aboutsummaryrefslogtreecommitdiff
path: root/gcc/testsuite/c-c++-common/gomp/tile-15.c
blob: 0308a1f13dec7b5831fc2614740fd219fd234fb6 (plain)
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);
    }
}