diff --git a/gcc/ChangeLog b/gcc/ChangeLog index c07b3f033205..f41307172746 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 7e2a85cd7e9a..20b12f5a1b88 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 014d249f4d0e..7554a0aa4759 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 000000000000..6e6cd357e832 --- /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