1! { dg-additional-options "-fdump-tree-original" }
2
3subroutine foo
4implicit none
5integer :: i, a(5)
6
7!$omp do
8do i = 1, 5
9end do
10!$omp end do nowait
11
12!$omp do simd
13do i = 1, 5
14end do
15!$omp end do simd nowait
16
17!$omp scope
18!$omp end scope nowait
19
20!$omp sections
21  !$omp section
22  block; end block
23!$omp end sections nowait
24
25!$omp single
26!$omp end single nowait
27
28!$omp target
29!$omp end target nowait
30
31!$omp target parallel
32!$omp end target parallel nowait
33
34!$omp target parallel do
35do i = 1, 5
36end do
37!$omp end target parallel do nowait
38
39!$omp target parallel do simd
40do i = 1, 5
41end do
42!$omp end target parallel do simd nowait
43
44!$omp target parallel loop
45do i = 1, 5
46end do
47!$omp end target parallel loop nowait
48
49!$omp target teams distribute parallel do
50do i = 1, 5
51end do
52!$omp end target teams distribute parallel do nowait
53
54!$omp target teams distribute parallel do simd
55do i = 1, 5
56end do
57!$omp end target teams distribute parallel do simd nowait
58
59!$omp target simd
60do i = 1, 5
61end do
62!$omp end target simd nowait
63
64!$omp target teams
65!$omp end target teams nowait
66
67!$omp target teams distribute
68do i = 1, 5
69end do
70!$omp end target teams distribute nowait
71
72!$omp target teams distribute simd
73do i = 1, 5
74end do
75!$omp end target teams distribute simd nowait
76
77!$omp target teams loop
78do i = 1, 5
79end do
80!$omp end target teams loop nowait
81
82!$omp workshare
83A(:) = 5
84!$omp end workshare nowait
85end
86
87! Note: internally, for '... parallel do ...', 'nowait' is always added
88! such that for 'omp end target parallel do nowait', 'nowait' is on both
89! 'target' as specified in the OpenMP spec and and on 'do' due to internal usage.
90
91! Expected with 'nowait'
92
93! { dg-final { scan-tree-dump-times "#pragma omp for nowait" 6 "original" } }
94! { dg-final { scan-tree-dump-times "#pragma omp for schedule\\(static\\) nowait" 1 "original" } }
95! { dg-final { scan-tree-dump-times "#pragma omp sections nowait" 1 "original" } }
96! { dg-final { scan-tree-dump-times "#pragma omp single nowait" 1 "original" } }
97! { dg-final { scan-tree-dump-times "#pragma omp target nowait" 12 "original" } }
98
99! Never:
100
101! { dg-final { scan-tree-dump-not "#pragma omp distribute\[^\n\r]*nowait" "original" } }
102! { dg-final { scan-tree-dump-not "#pragma omp loop\[^\n\r]*nowait" "original" } }
103! { dg-final { scan-tree-dump-not "#pragma omp parallel\[^\n\r]*nowait" "original" } }
104! { dg-final { scan-tree-dump-not "#pragma omp section\[^s\]\[^\n\r]*nowait" "original" } }
105! { dg-final { scan-tree-dump-not "#pragma omp simd\[^\n\r]*nowait" "original" } }
106! { dg-final { scan-tree-dump-not "#pragma omp teams\[^\n\r]*nowait" "original" } }
107
108! Sometimes or never with nowait:
109
110! { dg-final { scan-tree-dump-times "#pragma omp distribute\[\n\r]" 4 "original" } }
111! { dg-final { scan-tree-dump-times "#pragma omp loop\[\n\r]" 2 "original" } }
112! { dg-final { scan-tree-dump-times "#pragma omp parallel\[\n\r]" 6 "original" } }
113! { dg-final { scan-tree-dump-times "#pragma omp section\[\n\r]" 1 "original" } }
114! { dg-final { scan-tree-dump-times "#pragma omp simd linear\\(i:1\\)\[\n\r]" 5 "original" } }
115! { dg-final { scan-tree-dump-times "#pragma omp teams\[\n\r]" 6 "original" } }
116
117! { dg-final { scan-tree-dump-times "#pragma omp target\[\n\r]" 0 "original" } }
118! { dg-final { scan-tree-dump-times "#pragma omp for\[\n\r]" 0 "original" } }
119