298 lines · plain
1! REQUIRES: plugins, examples, shell2 3! RUN: %flang_fc1 -load %llvmshlibdir/flangOmpReport%pluginext -plugin flang-omp-report -fopenmp %s -o - | FileCheck %s4 5subroutine sb(n)6implicit none7 8integer :: n9integer :: 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,tmp212 13! CHECK:---14 15!Simple check with nowait16!$omp do17do i = 1, n18 arr_single(i) = i19end do20!$omp end do nowait21! CHECK-NEXT:- file: '{{[^"]*}}omp-nowait.f90'22! CHECK-NEXT: line: [[@LINE-6]]23! CHECK-NEXT: construct: do24! CHECK-NEXT: clauses:25! CHECK-NEXT: - clause: nowait26! CHECK-NEXT: details: ''27 28!Check for no effects on loop without nowait29!$omp do30do i = 1, n31 arr_single(i) = i32end do33!$omp end do34! CHECK-NEXT:- file: '{{[^"]*}}omp-nowait.f90'35! CHECK-NEXT: line: [[@LINE-6]]36! CHECK-NEXT: construct: do37! CHECK-NEXT: clauses: []38 39!Check with another construct nested inside loop with nowait40!$omp parallel shared(arr)41!$omp do42do i = 1, n43!$omp critical44 arr_single(i) = i45!$omp end critical46end do47!$omp end do nowait48!$omp end parallel49! CHECK-NEXT:- file: '{{[^"]*}}omp-nowait.f90'50! CHECK-NEXT: line: [[@LINE-7]]51! CHECK-NEXT: construct: critical52! CHECK-NEXT: clauses: []53! CHECK-NEXT:- file: '{{[^"]*}}omp-nowait.f90'54! CHECK-NEXT: line: [[@LINE-13]]55! CHECK-NEXT: construct: do56! CHECK-NEXT: clauses:57! CHECK-NEXT: - clause: nowait58! CHECK-NEXT: details: ''59! CHECK-NEXT:- file: '{{[^"]*}}omp-nowait.f90'60! CHECK-NEXT: line: [[@LINE-20]]61! CHECK-NEXT: construct: parallel62! CHECK-NEXT: clauses:63! CHECK-NEXT: - clause: shared64! CHECK-NEXT: details: arr65 66!Check with back to back loops (one with nowait) inside a parallel construct67!$omp parallel shared(arr)68!$omp do69do i=1,1070 arr(i,j) = i+j71end do72!$omp end do nowait73!$omp do schedule(guided)74do j=1,1075end do76!$omp end do77!$omp end parallel78! CHECK-NEXT:- file: '{{[^"]*}}omp-nowait.f90'79! CHECK-NEXT: line: [[@LINE-11]]80! CHECK-NEXT: construct: do81! CHECK-NEXT: clauses:82! CHECK-NEXT: - clause: nowait83! CHECK-NEXT: details: ''84! CHECK-NEXT:- file: '{{[^"]*}}omp-nowait.f90'85! CHECK-NEXT: line: [[@LINE-12]]86! CHECK-NEXT: construct: do87! CHECK-NEXT: clauses:88! CHECK-NEXT: - clause: schedule89! CHECK-NEXT: details: guided90! CHECK-NEXT:- file: '{{[^"]*}}omp-nowait.f90'91! CHECK-NEXT: line: [[@LINE-24]]92! CHECK-NEXT: construct: parallel93! CHECK-NEXT: clauses:94! CHECK-NEXT: - clause: shared95! CHECK-NEXT: details: arr96 97 98!Check nested parallel do loops with a nowait outside99!$omp parallel shared(arr)100!$omp do101do i=1,10102 arr_single(i)=i103 !$omp parallel104 !$omp do105 do j=1,10106 !$omp critical107 arr(i,j) = i+j108 !$omp end critical109 end do110 !$omp end do111 !$omp end parallel112end do113!$omp end do nowait114!$omp end parallel115! CHECK-NEXT:- file: '{{[^"]*}}omp-nowait.f90'116! CHECK-NEXT: line: [[@LINE-10]]117! CHECK-NEXT: construct: critical118! CHECK-NEXT: clauses: []119! CHECK-NEXT:- file: '{{[^"]*}}omp-nowait.f90'120! CHECK-NEXT: line: [[@LINE-16]]121! CHECK-NEXT: construct: do122! CHECK-NEXT: clauses: []123! CHECK-NEXT:- file: '{{[^"]*}}omp-nowait.f90'124! CHECK-NEXT: line: [[@LINE-21]]125! CHECK-NEXT: construct: parallel126! CHECK-NEXT: clauses: []127! CHECK-NEXT:- file: '{{[^"]*}}omp-nowait.f90'128! CHECK-NEXT: line: [[@LINE-28]]129! CHECK-NEXT: construct: do130! CHECK-NEXT: clauses:131! CHECK-NEXT: - clause: nowait132! CHECK-NEXT: details: ''133! CHECK-NEXT:- file: '{{[^"]*}}omp-nowait.f90'134! CHECK-NEXT: line: [[@LINE-35]]135! CHECK-NEXT: construct: parallel136! CHECK-NEXT: clauses:137! CHECK-NEXT: - clause: shared138! CHECK-NEXT: details: arr139 140!Check nested parallel do loops with a nowait inside141!$omp parallel shared(arr)142!$omp do143do i=1,10144 arr_single(i)=i145 !$omp parallel146 !$omp do147 do j=1,10148 !$omp critical149 arr(i,j) = i+j150 !$omp end critical151 end do152 !$omp end do nowait153 !$omp end parallel154end do155!$omp end do156!$omp end parallel157! CHECK-NEXT:- file: '{{[^"]*}}omp-nowait.f90'158! CHECK-NEXT: line: [[@LINE-10]]159! CHECK-NEXT: construct: critical160! CHECK-NEXT: clauses: []161! CHECK-NEXT:- file: '{{[^"]*}}omp-nowait.f90'162! CHECK-NEXT: line: [[@LINE-16]]163! CHECK-NEXT: construct: do164! CHECK-NEXT: clauses:165! CHECK-NEXT: - clause: nowait166! CHECK-NEXT: details: ''167! CHECK-NEXT:- file: '{{[^"]*}}omp-nowait.f90'168! CHECK-NEXT: line: [[@LINE-23]]169! CHECK-NEXT: construct: parallel170! CHECK-NEXT: clauses: []171! CHECK-NEXT:- file: '{{[^"]*}}omp-nowait.f90'172! CHECK-NEXT: line: [[@LINE-30]]173! CHECK-NEXT: construct: do174! CHECK-NEXT: clauses: []175! CHECK-NEXT:- file: '{{[^"]*}}omp-nowait.f90'176! CHECK-NEXT: line: [[@LINE-35]]177! CHECK-NEXT: construct: parallel178! CHECK-NEXT: clauses:179! CHECK-NEXT: - clause: shared180! CHECK-NEXT: details: arr181 182!Check nested parallel do loops with a nowait inside183!$omp parallel184!$omp do185do i=1,10186 arr_single(i)=i187 !$omp parallel shared(arr_quad)188 !$omp do schedule(dynamic)189 do j=1,10190 !$omp parallel191 !$omp do192 do k=1,10193 !$omp parallel194 !$omp do195 do l=1,10196 arr_quad(i,j,k,l) = i+j+k+l197 end do198 !$omp end do nowait199 !$omp end parallel200 end do201 !$omp end do202 !$omp end parallel203 end do204 !$omp end do nowait205 !$omp end parallel206end do207!$omp end do208!$omp end parallel209! CHECK-NEXT:- file: '{{[^"]*}}omp-nowait.f90'210! CHECK-NEXT: line: [[@LINE-16]]211! CHECK-NEXT: construct: do212! CHECK-NEXT: clauses:213! CHECK-NEXT: - clause: nowait214! CHECK-NEXT: details: ''215! CHECK-NEXT:- file: '{{[^"]*}}omp-nowait.f90'216! CHECK-NEXT: line: [[@LINE-23]]217! CHECK-NEXT: construct: parallel218! CHECK-NEXT: clauses: []219! CHECK-NEXT:- file: '{{[^"]*}}omp-nowait.f90'220! CHECK-NEXT: line: [[@LINE-29]]221! CHECK-NEXT: construct: do222! CHECK-NEXT: clauses: []223! CHECK-NEXT:- file: '{{[^"]*}}omp-nowait.f90'224! CHECK-NEXT: line: [[@LINE-34]]225! CHECK-NEXT: construct: parallel226! CHECK-NEXT: clauses: []227! CHECK-NEXT:- file: '{{[^"]*}}omp-nowait.f90'228! CHECK-NEXT: line: [[@LINE-40]]229! CHECK-NEXT: construct: do230! CHECK-NEXT: clauses:231! CHECK-NEXT: - clause: nowait232! CHECK-NEXT: details: ''233! CHECK-NEXT: - clause: schedule234! CHECK-NEXT: details: dynamic235! CHECK-NEXT:- file: '{{[^"]*}}omp-nowait.f90'236! CHECK-NEXT: line: [[@LINE-49]]237! CHECK-NEXT: construct: parallel238! CHECK-NEXT: clauses:239! CHECK-NEXT: - clause: shared240! CHECK-NEXT: details: arr_quad241! CHECK-NEXT:- file: '{{[^"]*}}omp-nowait.f90'242! CHECK-NEXT: line: [[@LINE-58]]243! CHECK-NEXT: construct: do244! CHECK-NEXT: clauses: []245! CHECK-NEXT:- file: '{{[^"]*}}omp-nowait.f90'246! CHECK-NEXT: line: [[@LINE-63]]247! CHECK-NEXT: construct: parallel248! CHECK-NEXT: clauses: []249 250 251!Check a do simd with nowait252!$omp do simd private(tmp)253do j = 1,n254 do i = 1,n255 tmp = arr(i,j) + brr(i,j)256 crr(i,j) = tmp257 end do258end do259!$omp end do simd nowait260! CHECK-NEXT:- file: '{{[^"]*}}omp-nowait.f90'261! CHECK-NEXT: line: [[@LINE-9]]262! CHECK-NEXT: construct: do simd263! CHECK-NEXT: clauses:264! CHECK-NEXT: - clause: nowait265! CHECK-NEXT: details: ''266! CHECK-NEXT: - clause: private267! CHECK-NEXT: details: tmp268 269 270!test nowait on non-do construct271!$omp parallel272!$omp single273tmp1 = i+j274!$omp end single275 276!$omp single277tmp2 = i-j278!$omp end single nowait279!$omp end parallel280! CHECK-NEXT:- file: '{{[^"]*}}omp-nowait.f90'281! CHECK-NEXT: line: [[@LINE-9]]282! CHECK-NEXT: construct: single283! CHECK-NEXT: clauses: []284! CHECK-NEXT:- file: '{{[^"]*}}omp-nowait.f90'285! CHECK-NEXT: line: [[@LINE-9]]286! CHECK-NEXT: construct: single287! CHECK-NEXT: clauses:288! CHECK-NEXT: - clause: nowait289! CHECK-NEXT: details: ''290! CHECK-NEXT:- file: '{{[^"]*}}omp-nowait.f90'291! CHECK-NEXT: line: [[@LINE-20]]292! CHECK-NEXT: construct: parallel293! CHECK-NEXT: clauses: []294 295end subroutine296 297! CHECK-NEXT:...298