| /* { dg-require-effective-target vect_cond_mixed } */ |
| /* { dg-require-effective-target vect_float } */ |
| |
| #include "tree-vect.h" |
| |
| static float x[1024]; |
| static float y[1024]; |
| static float z[1024]; |
| static float w[1024]; |
| |
| void __attribute__((noinline,noclone)) barX() |
| { |
| int i; |
| for (i=0; i<1024; ++i) |
| z[i] = ((x[i]>0) & (w[i]<0)) ? z[i] : y[i]; |
| } |
| |
| int main() |
| { |
| int i; |
| |
| check_vect (); |
| |
| for (i = 0; i < 1024; ++i) |
| { |
| x[i] = -10 + i; |
| w[i] = 100 - i; |
| z[i] = 0.; |
| y[i] = 1.; |
| __asm__ volatile ("" : : : "memory"); |
| } |
| |
| barX(); |
| |
| for (i = 0; i < 1024; ++i) |
| if (z[i] != ((x[i]>0 && w[i]<0) ? 0. : 1.)) |
| abort (); |
| |
| return 0; |
| } |
| |
| /* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" } } */ |