| // PR middle-end/66702 |
| // { dg-do run { target vect_simd_clones } } |
| // { dg-options "-O2" } |
| // { dg-additional-options "-msse2" { target sse2_runtime } } |
| // { dg-additional-options "-mavx" { target avx_runtime } } |
| |
| struct S { int s1, s2; }; |
| struct T { T (); ~T (); int t; }; |
| |
| T::T () : t(0) {} |
| T::~T () {} |
| |
| #pragma omp declare simd uniform(b, c) notinbranch |
| __attribute__((noinline)) int |
| foo (int a, S b, T c) |
| { |
| a++; |
| b.s1++; |
| b.s2++; |
| c.t++; |
| return a + b.s1 + b.s2 + c.t; |
| } |
| |
| int |
| main () |
| { |
| int r = 0; |
| S s = { 2, 3 }; |
| T t; |
| #pragma omp simd reduction(+:r) |
| for (int i = 0; i < 64; i++) |
| r += foo (i, s, t); |
| if (r != 2592) |
| __builtin_abort (); |
| } |