diff --git a/gcc/ChangeLog b/gcc/ChangeLog index b872a4d5edd..7ae4f39fb7d 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +2015-10-08 Yuri Rumyantsev + + * tree-vect-loop.c (vect_analyze_loop_operations): Skip virtual phi + in the tail of outer-loop. + 2015-10-08 David Edelsohn * config/rs6000/rs6000.c (rs6000_xcoff_debug_unwind_info): Always diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index ef2faab16a1..638751eaf93 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,7 @@ +2015-10-08 Yuri Rumyantsev + + * gcc.dg/vect/vect-outer-simd-3.c: New test. + 2015-10-08 Yuri Rumyantsev * gcc.dg/loop-unswitch-2.c: New test. diff --git a/gcc/testsuite/gcc.dg/vect/vect-outer-simd-3.c b/gcc/testsuite/gcc.dg/vect/vect-outer-simd-3.c new file mode 100644 index 00000000000..59e54db0752 --- /dev/null +++ b/gcc/testsuite/gcc.dg/vect/vect-outer-simd-3.c @@ -0,0 +1,78 @@ +/* { dg-require-effective-target vect_simd_clones } */ +/* { dg-additional-options "-O3 -fopenmp-simd -ffast-math" } */ +#include +#include "tree-vect.h" +#define N 64 + +float *px, *py; +float *tx, *ty; +float *x1, *z1, *t1, *t2; +int bound[N]; + +static void inline bar(const float cx, float cy, + float *vx, float *vy, int n) +{ + int j; + for (j = 0; j < n; ++j) + { + const float dx = cx - px[j]; + const float dy = cy - py[j]; + *vx -= dx * tx[j]; + *vy -= dy * ty[j]; + } +} + +__attribute__((noinline, noclone)) void foo1 () +{ + int i; + int n = bound[63]; +#pragma omp simd + for (i=0; i