1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
|
/* It isn't really clear what is supposed to be valid and what isn't when mixing
imperfectly nested loops with generated loops. Sorry for now until that is
clarified. */
void foo (int, int);
void
bar (void)
{
#pragma omp for collapse(2) /* { dg-message "imperfectly nested loop using generated loops" "" { target c } } */
for (int i = 0; i < 32; ++i) /* { dg-message "imperfectly nested loop using generated loops" "" { target c++ } } */
{
foo (i, -1);
#pragma omp tile sizes (2)
for (int j = 0; j < 32; ++j)
foo (i, j);
foo (i, -2);
}
}
void
baz (void)
{
#pragma omp for collapse(2) /* { dg-message "imperfectly nested loop using generated loops" "" { target c } } */
for (int i = 0; i < 32; ++i) /* { dg-message "imperfectly nested loop using generated loops" "" { target c++ } } */
{
foo (i, -1);
#pragma omp tile sizes (2, 2)
for (int j = 0; j < 32; ++j)
#pragma omp tile sizes (2, 2)
for (int k = 0; k < 32; ++k)
for (int l = 0; l < 32; ++l)
foo (i + k, j + l);
foo (i, -2);
}
}
void
qux (void)
{
#pragma omp for collapse(2) /* { dg-message "imperfectly nested loop using generated loops" "" { target c } } */
for (int i = 0; i < 32; ++i) /* { dg-message "imperfectly nested loop using generated loops" "" { target c++ } } */
{
int m = i + 6;
foo (i, -1);
#pragma omp tile sizes (2)
for (int j = m; j < 32; ++j)
foo (i, j);
foo (i, -2);
}
}
void
freddy (void)
{
#pragma omp for collapse(2) /* { dg-message "imperfectly nested loop using generated loops" "" { target c } } */
for (int i = 0; i < 32; ++i) /* { dg-message "imperfectly nested loop using generated loops" "" { target c++ } } */
{
int m = i + 6;
foo (i, -1);
#pragma omp tile sizes (2, 2)
for (int j = 0; j < 32; ++j)
#pragma omp tile sizes (2, 2)
for (int k = 0; k < 32; ++k)
for (int l = m; l < 32; ++l)
foo (i + k, j + l);
foo (i, -2);
}
}
|