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