/* PR tree-optimization/46009 */ /* { dg-require-effective-target vect_int } */ #include "tree-vect.h" int a[1024] __attribute__((aligned)); int b[1024] __attribute__((aligned)); int c[1024] __attribute__((aligned)); int d[1024] __attribute__((aligned)); int e[1024] __attribute__((aligned)); void __attribute__((noinline)) foo (void) { int i, g; for (i = 0; i < 1024; i++) { g = a[i] + b[i] + c[i] * d[i];; e[i] = g < 10 ? 1 : g; } } void __attribute__((noinline)) bar (void) { int i, g; for (i = 0; i < 1024; i++) { g = a[i] + b[i] + c[i] * d[i];; if (g < 10) e[i] = 1; else e[i] = g; } } int main (void) { int i; check_vect (); for (i = 0; i < 1024; i++) { asm volatile ("" : "+r" (i)); a[i] = i % 10; b[i] = i % 10; c[i] = 1; d[i] = -1; e[i] = -1; } foo (); for (i = 0; i < 1024; i++) { int g; asm volatile ("" : "+r" (i)); g = 2 * (i % 10) - 1; if (e[i] != (g < 10 ? 1 : g)) abort (); e[i] = -1; } bar (); for (i = 0; i < 1024; i++) { int g; asm volatile ("" : "+r" (i)); g = 2 * (i % 10) - 1; if (e[i] != (g < 10 ? 1 : g)) abort (); } return 0; } /* { dg-final { scan-tree-dump-times "vectorized 1 loops" 2 "vect" { target vect_int_mult } } } */ /* { dg-final { cleanup-tree-dump "vect" } } */