| /* { dg-do run } */ |
| /* { dg-additional-options "-O2 -fdump-tree-vect-details" } */ |
| /* { dg-additional-options "-mavx" { target avx_runtime } } */ |
| /* { dg-final { scan-tree-dump-times "vectorized 1 loops" 3 "vect" { target avx_runtime } } } */ |
| |
| int v, x; |
| |
| __attribute__((noipa)) void |
| foo (int *a) |
| { |
| #pragma omp for simd lastprivate (conditional: x) schedule(simd: static) |
| for (int i = 0; i < 128; i++) |
| if (a[i]) |
| x = a[i]; |
| } |
| |
| __attribute__((noipa)) void |
| bar (int *a, int *b) |
| { |
| #pragma omp for simd lastprivate (conditional: x, v) schedule(static, 16) |
| for (int i = 16; i < 128; ++i) |
| { |
| if (a[i]) |
| x = a[i]; |
| if (b[i]) |
| v = b[i] + 10; |
| } |
| } |
| |
| __attribute__((noipa)) void |
| baz (int *a) |
| { |
| #pragma omp for simd lastprivate (conditional: x) schedule(simd: dynamic, 16) |
| for (int i = 0; i < 128; i++) |
| if (a[i]) |
| x = a[i] + 5; |
| } |
| |
| int |
| main () |
| { |
| int a[128], b[128], i; |
| for (i = 0; i < 128; i++) |
| { |
| a[i] = ((i % 11) == 2) ? i + 10 : 0; |
| asm volatile ("" : "+g" (i)); |
| b[i] = ((i % 13) == 5) ? i * 2 : 0; |
| } |
| #pragma omp parallel |
| foo (a); |
| if (x != 133) |
| __builtin_abort (); |
| x = -3; |
| #pragma omp parallel |
| bar (b, a); |
| if (x != 244 || v != 143) |
| __builtin_abort (); |
| #pragma omp parallel |
| baz (b); |
| if (x != 249) |
| __builtin_abort (); |
| return 0; |
| } |