1// PR middle-end/66702 2// { dg-options "-O2" } 3// { dg-additional-options "-msse2" { target sse2_runtime } } 4// { dg-additional-options "-mavx" { target avx_runtime } } 5 6void 7bar (int &a, int &b, int *&c, int &d) 8{ 9 volatile int x; 10 int *volatile y; 11 x = a; a = x; 12 x = b; b = x; 13 y = c; c = y; 14 x = d; d = x; 15} 16 17void (*volatile barp) (int &, int &, int *&, int &) = bar; 18 19#pragma omp declare simd uniform(b, c) linear(d:2) aligned(c:32) notinbranch 20int 21foo (int a, int b, int *c, int d) 22{ 23 a++; 24 b++; 25 c += 8; 26 d += 2; 27 barp (a, b, c, d); 28 return a + b + *c + d; 29} 30 31volatile int e = 5; 32int c[64] __attribute__((aligned (32))); 33 34int 35main () 36{ 37 int d = 7, r = 0; 38 int b = e; 39 for (int i = 0; i < 64; i++) 40 c[i] = i; 41 #pragma omp simd reduction(+:r) linear(d:2) 42 for (int i = 0; i < 64; i++) 43 { 44 r += foo (i, b, c, d); 45 d += 2; 46 } 47 if (r != 7584) 48 __builtin_abort (); 49} 50