1! REQUIRES: plugins, examples, shell 2 3! RUN: %flang_fc1 -load %llvmshlibdir/flangOmpReport.so -plugin flang-omp-report -fopenmp %s -o - | FileCheck %s 4 5subroutine sb(n) 6implicit none 7 8integer :: n 9integer :: arr(n,n), brr(n,n), crr(n,n) 10integer :: arr_single(n),arr_quad(n,n,n,n) 11integer :: i,j,k,l,tmp,tmp1,tmp2 12 13! CHECK:--- 14 15!Simple check with nowait 16!$omp do 17do i = 1, n 18 arr_single(i) = i 19end do 20!$omp end do nowait 21! CHECK-NEXT:- file: '{{[^"]*}}omp-nowait.f90' 22! CHECK-NEXT: line: [[@LINE-6]] 23! CHECK-NEXT: construct: do 24! CHECK-NEXT: clauses: 25! CHECK-NEXT: - clause: nowait 26! CHECK-NEXT: details: '' 27 28!Check for no effects on loop without nowait 29!$omp do 30do i = 1, n 31 arr_single(i) = i 32end do 33!$omp end do 34! CHECK-NEXT:- file: '{{[^"]*}}omp-nowait.f90' 35! CHECK-NEXT: line: [[@LINE-6]] 36! CHECK-NEXT: construct: do 37! CHECK-NEXT: clauses: [] 38 39!Check with another construct nested inside loop with nowait 40!$omp parallel shared(arr) 41!$omp do 42do i = 1, n 43!$omp critical 44 arr_single(i) = i 45!$omp end critical 46end do 47!$omp end do nowait 48!$omp end parallel 49! CHECK-NEXT:- file: '{{[^"]*}}omp-nowait.f90' 50! CHECK-NEXT: line: [[@LINE-7]] 51! CHECK-NEXT: construct: critical 52! CHECK-NEXT: clauses: [] 53! CHECK-NEXT:- file: '{{[^"]*}}omp-nowait.f90' 54! CHECK-NEXT: line: [[@LINE-13]] 55! CHECK-NEXT: construct: do 56! CHECK-NEXT: clauses: 57! CHECK-NEXT: - clause: nowait 58! CHECK-NEXT: details: '' 59! CHECK-NEXT:- file: '{{[^"]*}}omp-nowait.f90' 60! CHECK-NEXT: line: [[@LINE-20]] 61! CHECK-NEXT: construct: parallel 62! CHECK-NEXT: clauses: 63! CHECK-NEXT: - clause: shared 64! CHECK-NEXT: details: arr 65 66!Check with back to back loops (one with nowait) inside a parallel construct 67!$omp parallel shared(arr) 68!$omp do 69do i=1,10 70 arr(i,j) = i+j 71end do 72!$omp end do nowait 73!$omp do schedule(guided) 74do j=1,10 75end do 76!$omp end do 77!$omp end parallel 78! CHECK-NEXT:- file: '{{[^"]*}}omp-nowait.f90' 79! CHECK-NEXT: line: [[@LINE-11]] 80! CHECK-NEXT: construct: do 81! CHECK-NEXT: clauses: 82! CHECK-NEXT: - clause: nowait 83! CHECK-NEXT: details: '' 84! CHECK-NEXT:- file: '{{[^"]*}}omp-nowait.f90' 85! CHECK-NEXT: line: [[@LINE-12]] 86! CHECK-NEXT: construct: do 87! CHECK-NEXT: clauses: 88! CHECK-NEXT: - clause: schedule 89! CHECK-NEXT: details: guided 90! CHECK-NEXT:- file: '{{[^"]*}}omp-nowait.f90' 91! CHECK-NEXT: line: [[@LINE-24]] 92! CHECK-NEXT: construct: parallel 93! CHECK-NEXT: clauses: 94! CHECK-NEXT: - clause: shared 95! CHECK-NEXT: details: arr 96 97 98!Check nested parallel do loops with a nowait outside 99!$omp parallel shared(arr) 100!$omp do 101do i=1,10 102 arr_single(i)=i 103 !$omp parallel 104 !$omp do 105 do j=1,10 106 !$omp critical 107 arr(i,j) = i+j 108 !$omp end critical 109 end do 110 !$omp end do 111 !$omp end parallel 112end do 113!$omp end do nowait 114!$omp end parallel 115! CHECK-NEXT:- file: '{{[^"]*}}omp-nowait.f90' 116! CHECK-NEXT: line: [[@LINE-10]] 117! CHECK-NEXT: construct: critical 118! CHECK-NEXT: clauses: [] 119! CHECK-NEXT:- file: '{{[^"]*}}omp-nowait.f90' 120! CHECK-NEXT: line: [[@LINE-16]] 121! CHECK-NEXT: construct: do 122! CHECK-NEXT: clauses: [] 123! CHECK-NEXT:- file: '{{[^"]*}}omp-nowait.f90' 124! CHECK-NEXT: line: [[@LINE-21]] 125! CHECK-NEXT: construct: parallel 126! CHECK-NEXT: clauses: [] 127! CHECK-NEXT:- file: '{{[^"]*}}omp-nowait.f90' 128! CHECK-NEXT: line: [[@LINE-28]] 129! CHECK-NEXT: construct: do 130! CHECK-NEXT: clauses: 131! CHECK-NEXT: - clause: nowait 132! CHECK-NEXT: details: '' 133! CHECK-NEXT:- file: '{{[^"]*}}omp-nowait.f90' 134! CHECK-NEXT: line: [[@LINE-35]] 135! CHECK-NEXT: construct: parallel 136! CHECK-NEXT: clauses: 137! CHECK-NEXT: - clause: shared 138! CHECK-NEXT: details: arr 139 140!Check nested parallel do loops with a nowait inside 141!$omp parallel shared(arr) 142!$omp do 143do i=1,10 144 arr_single(i)=i 145 !$omp parallel 146 !$omp do 147 do j=1,10 148 !$omp critical 149 arr(i,j) = i+j 150 !$omp end critical 151 end do 152 !$omp end do nowait 153 !$omp end parallel 154end do 155!$omp end do 156!$omp end parallel 157! CHECK-NEXT:- file: '{{[^"]*}}omp-nowait.f90' 158! CHECK-NEXT: line: [[@LINE-10]] 159! CHECK-NEXT: construct: critical 160! CHECK-NEXT: clauses: [] 161! CHECK-NEXT:- file: '{{[^"]*}}omp-nowait.f90' 162! CHECK-NEXT: line: [[@LINE-16]] 163! CHECK-NEXT: construct: do 164! CHECK-NEXT: clauses: 165! CHECK-NEXT: - clause: nowait 166! CHECK-NEXT: details: '' 167! CHECK-NEXT:- file: '{{[^"]*}}omp-nowait.f90' 168! CHECK-NEXT: line: [[@LINE-23]] 169! CHECK-NEXT: construct: parallel 170! CHECK-NEXT: clauses: [] 171! CHECK-NEXT:- file: '{{[^"]*}}omp-nowait.f90' 172! CHECK-NEXT: line: [[@LINE-30]] 173! CHECK-NEXT: construct: do 174! CHECK-NEXT: clauses: [] 175! CHECK-NEXT:- file: '{{[^"]*}}omp-nowait.f90' 176! CHECK-NEXT: line: [[@LINE-35]] 177! CHECK-NEXT: construct: parallel 178! CHECK-NEXT: clauses: 179! CHECK-NEXT: - clause: shared 180! CHECK-NEXT: details: arr 181 182!Check nested parallel do loops with a nowait inside 183!$omp parallel 184!$omp do 185do i=1,10 186 arr_single(i)=i 187 !$omp parallel shared(arr_quad) 188 !$omp do schedule(dynamic) 189 do j=1,10 190 !$omp parallel 191 !$omp do 192 do k=1,10 193 !$omp parallel 194 !$omp do 195 do l=1,10 196 arr_quad(i,j,k,l) = i+j+k+l 197 end do 198 !$omp end do nowait 199 !$omp end parallel 200 end do 201 !$omp end do 202 !$omp end parallel 203 end do 204 !$omp end do nowait 205 !$omp end parallel 206end do 207!$omp end do 208!$omp end parallel 209! CHECK-NEXT:- file: '{{[^"]*}}omp-nowait.f90' 210! CHECK-NEXT: line: [[@LINE-16]] 211! CHECK-NEXT: construct: do 212! CHECK-NEXT: clauses: 213! CHECK-NEXT: - clause: nowait 214! CHECK-NEXT: details: '' 215! CHECK-NEXT:- file: '{{[^"]*}}omp-nowait.f90' 216! CHECK-NEXT: line: [[@LINE-23]] 217! CHECK-NEXT: construct: parallel 218! CHECK-NEXT: clauses: [] 219! CHECK-NEXT:- file: '{{[^"]*}}omp-nowait.f90' 220! CHECK-NEXT: line: [[@LINE-29]] 221! CHECK-NEXT: construct: do 222! CHECK-NEXT: clauses: [] 223! CHECK-NEXT:- file: '{{[^"]*}}omp-nowait.f90' 224! CHECK-NEXT: line: [[@LINE-34]] 225! CHECK-NEXT: construct: parallel 226! CHECK-NEXT: clauses: [] 227! CHECK-NEXT:- file: '{{[^"]*}}omp-nowait.f90' 228! CHECK-NEXT: line: [[@LINE-40]] 229! CHECK-NEXT: construct: do 230! CHECK-NEXT: clauses: 231! CHECK-NEXT: - clause: nowait 232! CHECK-NEXT: details: '' 233! CHECK-NEXT: - clause: schedule 234! CHECK-NEXT: details: dynamic 235! CHECK-NEXT:- file: '{{[^"]*}}omp-nowait.f90' 236! CHECK-NEXT: line: [[@LINE-49]] 237! CHECK-NEXT: construct: parallel 238! CHECK-NEXT: clauses: 239! CHECK-NEXT: - clause: shared 240! CHECK-NEXT: details: arr_quad 241! CHECK-NEXT:- file: '{{[^"]*}}omp-nowait.f90' 242! CHECK-NEXT: line: [[@LINE-58]] 243! CHECK-NEXT: construct: do 244! CHECK-NEXT: clauses: [] 245! CHECK-NEXT:- file: '{{[^"]*}}omp-nowait.f90' 246! CHECK-NEXT: line: [[@LINE-63]] 247! CHECK-NEXT: construct: parallel 248! CHECK-NEXT: clauses: [] 249 250 251!Check a do simd with nowait 252!$omp do simd private(tmp) 253do j = 1,n 254 do i = 1,n 255 tmp = arr(i,j) + brr(i,j) 256 crr(i,j) = tmp 257 end do 258end do 259!$omp end do simd nowait 260! CHECK-NEXT:- file: '{{[^"]*}}omp-nowait.f90' 261! CHECK-NEXT: line: [[@LINE-9]] 262! CHECK-NEXT: construct: do simd 263! CHECK-NEXT: clauses: 264! CHECK-NEXT: - clause: nowait 265! CHECK-NEXT: details: '' 266! CHECK-NEXT: - clause: private 267! CHECK-NEXT: details: tmp 268 269 270!test nowait on non-do construct 271!$omp parallel 272!$omp single 273tmp1 = i+j 274!$omp end single 275 276!$omp single 277tmp2 = i-j 278!$omp end single nowait 279!$omp end parallel 280! CHECK-NEXT:- file: '{{[^"]*}}omp-nowait.f90' 281! CHECK-NEXT: line: [[@LINE-9]] 282! CHECK-NEXT: construct: single 283! CHECK-NEXT: clauses: [] 284! CHECK-NEXT:- file: '{{[^"]*}}omp-nowait.f90' 285! CHECK-NEXT: line: [[@LINE-9]] 286! CHECK-NEXT: construct: single 287! CHECK-NEXT: clauses: 288! CHECK-NEXT: - clause: nowait 289! CHECK-NEXT: details: '' 290! CHECK-NEXT:- file: '{{[^"]*}}omp-nowait.f90' 291! CHECK-NEXT: line: [[@LINE-20]] 292! CHECK-NEXT: construct: parallel 293! CHECK-NEXT: clauses: [] 294 295end subroutine 296 297! CHECK-NEXT:... 298