From: Richard Biener Date: Wed, 2 Mar 2016 08:55:42 +0000 (+0000) Subject: re PR target/67278 (ICE: verify_gimple failed on darwin 14.5 x86_64) X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=37d98220230bf243a5c3af3eebdb57b59c8d14c4;p=gcc.git re PR target/67278 (ICE: verify_gimple failed on darwin 14.5 x86_64) 2016-03-02 Richard Biener Uros Bizjak PR target/67278 * config/i386/i386.c (type_natural_mode): Handle XFmode vectors. * gcc.dg/simd-8.c: New testcase. Co-Authored-By: Uros Bizjak From-SVN: r233898 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index c07b3f03320..f4130717274 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2016-03-02 Richard Biener + Uros Bizjak + + PR target/67278 + * config/i386/i386.c (type_natural_mode): Handle XFmode vectors. + 2016-03-02 Richard Biener PR middle-end/67278 diff --git a/gcc/config/i386/i386.c b/gcc/config/i386/i386.c index 7e2a85cd7e9..20b12f5a1b8 100644 --- a/gcc/config/i386/i386.c +++ b/gcc/config/i386/i386.c @@ -7794,6 +7794,10 @@ type_natural_mode (const_tree type, const CUMULATIVE_ARGS *cum, { machine_mode innermode = TYPE_MODE (TREE_TYPE (type)); + /* There are no XFmode vector modes. */ + if (innermode = XFmode) + return mode; + if (TREE_CODE (TREE_TYPE (type)) == REAL_TYPE) mode = MIN_MODE_VECTOR_FLOAT; else diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 014d249f4d0..7554a0aa475 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,9 @@ +2016-03-02 Richard Biener + Uros Bizjak + + PR target/67278 + * gcc.dg/simd-8.c: New testcase. + 2016-03-02 Richard Biener PR middle-end/67278 diff --git a/gcc/testsuite/gcc.dg/simd-8.c b/gcc/testsuite/gcc.dg/simd-8.c new file mode 100644 index 00000000000..6e6cd357e83 --- /dev/null +++ b/gcc/testsuite/gcc.dg/simd-8.c @@ -0,0 +1,19 @@ +/* { dg-do compile } */ + +#if __SIZEOF_LONG_DOUBLE__ == 16 || __SIZEOF_LONG_DOUBLE__ == 8 +typedef long double a __attribute__((vector_size (32))); + +a __attribute__((noinline)) +sum (a first, a second) +{ + return first + second; +} + +a +foo (a x, a y, a z) +{ + return sum (x, y) + z; +} +#else +int main() {} +#endif