3 /* Like imperfect4.c, but bind the iteration variables in the loops. */
5 static int f1count
[3], f2count
[3];
6 static int g1count
[3], g2count
[3];
9 extern void abort (void);
11 extern "C" void abort (void);
14 int f1 (int depth
, int iter
)
20 int f2 (int depth
, int iter
)
26 int g1 (int depth
, int iter
)
32 int g2 (int depth
, int iter
)
38 void s1 (int a1
, int a2
, int a3
)
41 #pragma omp for collapse(3)
42 for (int i
= 0; i
< a1
; i
++)
47 for (int j
= 0; j
< a2
; j
++)
52 for (int k
= 0; k
< a3
; k
++)
90 /* All intervening code at the same depth must be executed the same
92 if (f1count
[0] != f2count
[0]) abort ();
93 if (f1count
[1] != f2count
[1]) abort ();
94 if (f1count
[2] != f2count
[2]) abort ();
95 if (g1count
[0] != f1count
[0]) abort ();
96 if (g2count
[0] != f1count
[0]) abort ();
97 if (g1count
[1] != f1count
[1]) abort ();
98 if (g2count
[1] != f1count
[1]) abort ();
99 if (g1count
[2] != f1count
[2]) abort ();
100 if (g2count
[2] != f1count
[2]) abort ();
102 /* Intervening code must be executed at least as many times as the loop
104 if (f1count
[0] < 3) abort ();
105 if (f1count
[1] < 3 * 4) abort ();
107 /* Intervening code must not be executed more times than the number
108 of logical iterations. */
109 if (f1count
[0] > 3 * 4 * 5) abort ();
110 if (f1count
[1] > 3 * 4 * 5) abort ();
112 /* Check that the innermost loop body is executed exactly the number
113 of logical iterations expected. */
114 if (f1count
[2] != 3 * 4 * 5) abort ();