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 [[ omp :: directive (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 ();