1/* { dg-do run } */ 2/* { dg-options "-O2" } */ 3/* { dg-additional-options "-msse2" { target sse2_runtime } } */ 4/* { dg-additional-options "-mavx" { target avx_runtime } } */ 5 6static inline void 7foo (int *b, int *i, int *j, int x) 8{ 9 *b = *b + x + (*i - *i) + (*j - *j); 10} 11 12int 13main () 14{ 15 int i, j, b, c = 0; 16 i = 4; j = 4; b = 7; 17 #pragma omp simd linear(b:2) reduction(+:c) 18 for (i = 0; i < 64; i++) 19 { 20 c = c + (b != 7 + 2 * i); 21 foo (&b, &i, &j, 2); 22 } 23 if (c || i != 64 || b != 7 + 64 * 2) 24 __builtin_abort (); 25 i = 4; j = 4; b = 7; 26 #pragma omp simd linear(b:3) reduction(+:c) 27 for (i = 0; i < 64; i += 4) 28 { 29 c = c + (b != 7 + i / 4 * 3); 30 foo (&b, &i, &j, 3); 31 } 32 if (c || i != 64 || b != 7 + 16 * 3) 33 __builtin_abort (); 34 i = 4; j = 4; b = 7; 35 #pragma omp simd linear(i) linear(b:2) reduction(+:c) 36 for (i = 0; i < 64; i++) 37 { 38 c = c + (b != 7 + 2 * i); 39 foo (&b, &i, &j, 2); 40 } 41 if (c || i != 64 || b != 7 + 64 * 2) 42 __builtin_abort (); 43 i = 4; j = 4; b = 7; 44 #pragma omp simd linear(i:4) linear(b:3) reduction(+:c) 45 for (i = 0; i < 64; i += 4) 46 { 47 c = c + (b != 7 + i / 4 * 3); 48 foo (&b, &i, &j, 3); 49 } 50 if (c || i != 64 || b != 7 + 16 * 3) 51 __builtin_abort (); 52 i = 4; j = 4; b = 7; 53 #pragma omp simd collapse (2) linear(b:2) reduction(+:c) 54 for (i = 0; i < 8; i++) 55 for (j = 0; j < 8; j++) 56 { 57 c = c + (b != 7 + 2 * j + 2 * 8 * i); 58 foo (&b, &i, &j, 2); 59 } 60 if (c || i != 8 || j != 8 || b != 7 + 64 * 2) 61 __builtin_abort (); 62 i = 4; j = 4; b = 7; 63 #pragma omp simd collapse (2) lastprivate (i, j) linear(b:2) reduction(+:c) 64 for (i = 0; i < 8; i++) 65 for (j = 0; j < 8; j++) 66 { 67 c = c + (b != 7 + 2 * j + 2 * 8 * i); 68 foo (&b, &i, &j, 2); 69 } 70 if (c || i != 8 || j != 8 || b != 7 + 64 * 2) 71 __builtin_abort (); 72 i = 4; j = 4; b = 7; 73 #pragma omp parallel for simd schedule (static, 4) linear(b:2) reduction(+:c) 74 for (i = 0; i < 64; i++) 75 { 76 c = c + (b != 7 + 2 * i); 77 foo (&b, &i, &j, 2); 78 } 79 if (c || i != 64 || b != 7 + 64 * 2) 80 __builtin_abort (); 81 i = 4; j = 4; b = 7; 82 #pragma omp parallel for simd schedule (static, 4) linear(b:3) reduction(+:c) 83 for (i = 0; i < 64; i += 4) 84 { 85 c = c + (b != 7 + i / 4 * 3); 86 foo (&b, &i, &j, 3); 87 } 88 if (c || i != 64 || b != 7 + 16 * 3) 89 __builtin_abort (); 90 i = 4; j = 4; b = 7; 91 #pragma omp parallel for simd schedule (static, 4) linear(i) linear(b:2) reduction(+:c) 92 for (i = 0; i < 64; i++) 93 { 94 c = c + (b != 7 + 2 * i); 95 foo (&b, &i, &j, 2); 96 } 97 if (c || i != 64 || b != 7 + 64 * 2) 98 __builtin_abort (); 99 i = 4; j = 4; b = 7; 100 #pragma omp parallel for simd schedule (static, 4) linear(i:4) linear(b:3) reduction(+:c) 101 for (i = 0; i < 64; i += 4) 102 { 103 c = c + (b != 7 + i / 4 * 3); 104 foo (&b, &i, &j, 3); 105 } 106 if (c || i != 64 || b != 7 + 16 * 3) 107 __builtin_abort (); 108 i = 4; j = 4; b = 7; 109 #pragma omp parallel for simd lastprivate (i, j) collapse (2) schedule (static, 4) linear(b:2) reduction(+:c) 110 for (i = 0; i < 8; i++) 111 for (j = 0; j < 8; j++) 112 { 113 c = c + (b != 7 + 2 * j + 2 * 8 * i); 114 foo (&b, &i, &j, 2); 115 } 116 if (c || i != 8 || j != 8 || b != 7 + 64 * 2) 117 __builtin_abort (); 118 i = 4; j = 4; b = 7; 119 #pragma omp parallel for simd collapse (2) schedule (static, 4) linear(b:2) reduction(+:c) 120 for (i = 0; i < 8; i++) 121 for (j = 0; j < 8; j++) 122 { 123 c = c + (b != 7 + 2 * j + 2 * 8 * i); 124 foo (&b, &i, &j, 2); 125 } 126 if (c || i != 8 || j != 8 || b != 7 + 64 * 2) 127 __builtin_abort (); 128 return 0; 129} 130