LLVM OpenMP
tile-stripe-reverse.c
Go to the documentation of this file.
1// RUN: %libomp-compile -fopenmp-version=60 && %libomp-run \
2// RUN: | FileCheck %s --match-full-lines
3
4// tile/stripe over a reverse that is not the innermost affected loop must
5// keep the reversal (regression test for #222401).
6
7#ifndef HEADER
8#define HEADER
9
10#include <stdio.h>
11#include <stdlib.h>
12
13int main() {
14 printf("tile\n");
15#pragma omp tile sizes(2, 2)
16#pragma omp reverse
17 for (int i = 0; i < 4; ++i)
18 for (int j = 0; j < 4; ++j)
19 printf("i=%d j=%d\n", i, j);
20
21 printf("stripe\n");
22#pragma omp stripe sizes(2, 2)
23#pragma omp reverse
24 for (int i = 0; i < 4; ++i)
25 for (int j = 0; j < 4; ++j)
26 printf("i=%d j=%d\n", i, j);
27
28 printf("nested\n");
29#pragma omp tile sizes(2, 2)
30#pragma omp reverse
31 for (int j = 0; j < 4; ++j) {
32#pragma omp reverse
33 for (int i = 0; i < 4; ++i)
34 printf("j=%d i=%d\n", j, i);
35 }
36
37 printf("done\n");
38 return EXIT_SUCCESS;
39}
40
41#endif /* HEADER */
42
43// CHECK: tile
44// CHECK-NEXT: i=3 j=0
45// CHECK-NEXT: i=3 j=1
46// CHECK-NEXT: i=2 j=0
47// CHECK-NEXT: i=2 j=1
48// CHECK-NEXT: i=3 j=2
49// CHECK-NEXT: i=3 j=3
50// CHECK-NEXT: i=2 j=2
51// CHECK-NEXT: i=2 j=3
52// CHECK-NEXT: i=1 j=0
53// CHECK-NEXT: i=1 j=1
54// CHECK-NEXT: i=0 j=0
55// CHECK-NEXT: i=0 j=1
56// CHECK-NEXT: i=1 j=2
57// CHECK-NEXT: i=1 j=3
58// CHECK-NEXT: i=0 j=2
59// CHECK-NEXT: i=0 j=3
60// CHECK-NEXT: stripe
61// CHECK-NEXT: i=3 j=0
62// CHECK-NEXT: i=3 j=1
63// CHECK-NEXT: i=2 j=0
64// CHECK-NEXT: i=2 j=1
65// CHECK-NEXT: i=3 j=2
66// CHECK-NEXT: i=3 j=3
67// CHECK-NEXT: i=2 j=2
68// CHECK-NEXT: i=2 j=3
69// CHECK-NEXT: i=1 j=0
70// CHECK-NEXT: i=1 j=1
71// CHECK-NEXT: i=0 j=0
72// CHECK-NEXT: i=0 j=1
73// CHECK-NEXT: i=1 j=2
74// CHECK-NEXT: i=1 j=3
75// CHECK-NEXT: i=0 j=2
76// CHECK-NEXT: i=0 j=3
77// CHECK-NEXT: nested
78// CHECK-NEXT: j=3 i=3
79// CHECK-NEXT: j=3 i=2
80// CHECK-NEXT: j=2 i=3
81// CHECK-NEXT: j=2 i=2
82// CHECK-NEXT: j=3 i=1
83// CHECK-NEXT: j=3 i=0
84// CHECK-NEXT: j=2 i=1
85// CHECK-NEXT: j=2 i=0
86// CHECK-NEXT: j=1 i=3
87// CHECK-NEXT: j=1 i=2
88// CHECK-NEXT: j=0 i=3
89// CHECK-NEXT: j=0 i=2
90// CHECK-NEXT: j=1 i=1
91// CHECK-NEXT: j=1 i=0
92// CHECK-NEXT: j=0 i=1
93// CHECK-NEXT: j=0 i=0
94// CHECK-NEXT: done
#define i
Definition kmp_stub.cpp:88
int main()