In a "Worksharing-loop construct", one can add a nowait clause at the end of the loop (i.e. at the loop tail). This clause wasn't associated with the corresponding loop when originally worked on in flang-omp-report. Note that this refers to parsing and parse-tree generation. To work around it, it was needed to track such clauses and the loops. This should no longer be required (and in fact no longer works) and so was removed. This results in 'curLoopLogRecord' and 'loopLogRecordStack' and all references to them being removed. This also allows for 'constructClauses' to be swapped from std::deque to llvm::SmallVector. Lastly a new test has been added testing the "nowait" clauses in a variety of ways. Reviewed By: awarzynski, kiranchandramohan Differential Revision: https://reviews.llvm.org/D112217
298 lines
8.8 KiB
Fortran
298 lines
8.8 KiB
Fortran
! REQUIRES: plugins, examples, shell
|
|
|
|
! RUN: %flang_fc1 -load %llvmshlibdir/flangOmpReport.so -plugin flang-omp-report -fopenmp %s -o - | FileCheck %s
|
|
|
|
subroutine sb(n)
|
|
implicit none
|
|
|
|
integer :: n
|
|
integer :: arr(n,n), brr(n,n), crr(n,n)
|
|
integer :: arr_single(n),arr_quad(n,n,n,n)
|
|
integer :: i,j,k,l,tmp,tmp1,tmp2
|
|
|
|
! CHECK:---
|
|
|
|
!Simple check with nowait
|
|
!$omp do
|
|
do i = 1, n
|
|
arr_single(i) = i
|
|
end do
|
|
!$omp end do nowait
|
|
! CHECK-NEXT:- file: '{{[^"]*}}omp-nowait.f90'
|
|
! CHECK-NEXT: line: [[@LINE-6]]
|
|
! CHECK-NEXT: construct: do
|
|
! CHECK-NEXT: clauses:
|
|
! CHECK-NEXT: - clause: nowait
|
|
! CHECK-NEXT: details: ''
|
|
|
|
!Check for no effects on loop without nowait
|
|
!$omp do
|
|
do i = 1, n
|
|
arr_single(i) = i
|
|
end do
|
|
!$omp end do
|
|
! CHECK-NEXT:- file: '{{[^"]*}}omp-nowait.f90'
|
|
! CHECK-NEXT: line: [[@LINE-6]]
|
|
! CHECK-NEXT: construct: do
|
|
! CHECK-NEXT: clauses: []
|
|
|
|
!Check with another construct nested inside loop with nowait
|
|
!$omp parallel shared(arr)
|
|
!$omp do
|
|
do i = 1, n
|
|
!$omp critical
|
|
arr_single(i) = i
|
|
!$omp end critical
|
|
end do
|
|
!$omp end do nowait
|
|
!$omp end parallel
|
|
! CHECK-NEXT:- file: '{{[^"]*}}omp-nowait.f90'
|
|
! CHECK-NEXT: line: [[@LINE-7]]
|
|
! CHECK-NEXT: construct: critical
|
|
! CHECK-NEXT: clauses: []
|
|
! CHECK-NEXT:- file: '{{[^"]*}}omp-nowait.f90'
|
|
! CHECK-NEXT: line: [[@LINE-13]]
|
|
! CHECK-NEXT: construct: do
|
|
! CHECK-NEXT: clauses:
|
|
! CHECK-NEXT: - clause: nowait
|
|
! CHECK-NEXT: details: ''
|
|
! CHECK-NEXT:- file: '{{[^"]*}}omp-nowait.f90'
|
|
! CHECK-NEXT: line: [[@LINE-20]]
|
|
! CHECK-NEXT: construct: parallel
|
|
! CHECK-NEXT: clauses:
|
|
! CHECK-NEXT: - clause: shared
|
|
! CHECK-NEXT: details: arr
|
|
|
|
!Check with back to back loops (one with nowait) inside a parallel construct
|
|
!$omp parallel shared(arr)
|
|
!$omp do
|
|
do i=1,10
|
|
arr(i,j) = i+j
|
|
end do
|
|
!$omp end do nowait
|
|
!$omp do schedule(guided)
|
|
do j=1,10
|
|
end do
|
|
!$omp end do
|
|
!$omp end parallel
|
|
! CHECK-NEXT:- file: '{{[^"]*}}omp-nowait.f90'
|
|
! CHECK-NEXT: line: [[@LINE-11]]
|
|
! CHECK-NEXT: construct: do
|
|
! CHECK-NEXT: clauses:
|
|
! CHECK-NEXT: - clause: nowait
|
|
! CHECK-NEXT: details: ''
|
|
! CHECK-NEXT:- file: '{{[^"]*}}omp-nowait.f90'
|
|
! CHECK-NEXT: line: [[@LINE-12]]
|
|
! CHECK-NEXT: construct: do
|
|
! CHECK-NEXT: clauses:
|
|
! CHECK-NEXT: - clause: schedule
|
|
! CHECK-NEXT: details: guided
|
|
! CHECK-NEXT:- file: '{{[^"]*}}omp-nowait.f90'
|
|
! CHECK-NEXT: line: [[@LINE-24]]
|
|
! CHECK-NEXT: construct: parallel
|
|
! CHECK-NEXT: clauses:
|
|
! CHECK-NEXT: - clause: shared
|
|
! CHECK-NEXT: details: arr
|
|
|
|
|
|
!Check nested parallel do loops with a nowait outside
|
|
!$omp parallel shared(arr)
|
|
!$omp do
|
|
do i=1,10
|
|
arr_single(i)=i
|
|
!$omp parallel
|
|
!$omp do
|
|
do j=1,10
|
|
!$omp critical
|
|
arr(i,j) = i+j
|
|
!$omp end critical
|
|
end do
|
|
!$omp end do
|
|
!$omp end parallel
|
|
end do
|
|
!$omp end do nowait
|
|
!$omp end parallel
|
|
! CHECK-NEXT:- file: '{{[^"]*}}omp-nowait.f90'
|
|
! CHECK-NEXT: line: [[@LINE-10]]
|
|
! CHECK-NEXT: construct: critical
|
|
! CHECK-NEXT: clauses: []
|
|
! CHECK-NEXT:- file: '{{[^"]*}}omp-nowait.f90'
|
|
! CHECK-NEXT: line: [[@LINE-16]]
|
|
! CHECK-NEXT: construct: do
|
|
! CHECK-NEXT: clauses: []
|
|
! CHECK-NEXT:- file: '{{[^"]*}}omp-nowait.f90'
|
|
! CHECK-NEXT: line: [[@LINE-21]]
|
|
! CHECK-NEXT: construct: parallel
|
|
! CHECK-NEXT: clauses: []
|
|
! CHECK-NEXT:- file: '{{[^"]*}}omp-nowait.f90'
|
|
! CHECK-NEXT: line: [[@LINE-28]]
|
|
! CHECK-NEXT: construct: do
|
|
! CHECK-NEXT: clauses:
|
|
! CHECK-NEXT: - clause: nowait
|
|
! CHECK-NEXT: details: ''
|
|
! CHECK-NEXT:- file: '{{[^"]*}}omp-nowait.f90'
|
|
! CHECK-NEXT: line: [[@LINE-35]]
|
|
! CHECK-NEXT: construct: parallel
|
|
! CHECK-NEXT: clauses:
|
|
! CHECK-NEXT: - clause: shared
|
|
! CHECK-NEXT: details: arr
|
|
|
|
!Check nested parallel do loops with a nowait inside
|
|
!$omp parallel shared(arr)
|
|
!$omp do
|
|
do i=1,10
|
|
arr_single(i)=i
|
|
!$omp parallel
|
|
!$omp do
|
|
do j=1,10
|
|
!$omp critical
|
|
arr(i,j) = i+j
|
|
!$omp end critical
|
|
end do
|
|
!$omp end do nowait
|
|
!$omp end parallel
|
|
end do
|
|
!$omp end do
|
|
!$omp end parallel
|
|
! CHECK-NEXT:- file: '{{[^"]*}}omp-nowait.f90'
|
|
! CHECK-NEXT: line: [[@LINE-10]]
|
|
! CHECK-NEXT: construct: critical
|
|
! CHECK-NEXT: clauses: []
|
|
! CHECK-NEXT:- file: '{{[^"]*}}omp-nowait.f90'
|
|
! CHECK-NEXT: line: [[@LINE-16]]
|
|
! CHECK-NEXT: construct: do
|
|
! CHECK-NEXT: clauses:
|
|
! CHECK-NEXT: - clause: nowait
|
|
! CHECK-NEXT: details: ''
|
|
! CHECK-NEXT:- file: '{{[^"]*}}omp-nowait.f90'
|
|
! CHECK-NEXT: line: [[@LINE-23]]
|
|
! CHECK-NEXT: construct: parallel
|
|
! CHECK-NEXT: clauses: []
|
|
! CHECK-NEXT:- file: '{{[^"]*}}omp-nowait.f90'
|
|
! CHECK-NEXT: line: [[@LINE-30]]
|
|
! CHECK-NEXT: construct: do
|
|
! CHECK-NEXT: clauses: []
|
|
! CHECK-NEXT:- file: '{{[^"]*}}omp-nowait.f90'
|
|
! CHECK-NEXT: line: [[@LINE-35]]
|
|
! CHECK-NEXT: construct: parallel
|
|
! CHECK-NEXT: clauses:
|
|
! CHECK-NEXT: - clause: shared
|
|
! CHECK-NEXT: details: arr
|
|
|
|
!Check nested parallel do loops with a nowait inside
|
|
!$omp parallel
|
|
!$omp do
|
|
do i=1,10
|
|
arr_single(i)=i
|
|
!$omp parallel shared(arr_quad)
|
|
!$omp do schedule(dynamic)
|
|
do j=1,10
|
|
!$omp parallel
|
|
!$omp do
|
|
do k=1,10
|
|
!$omp parallel
|
|
!$omp do
|
|
do l=1,10
|
|
arr_quad(i,j,k,l) = i+j+k+l
|
|
end do
|
|
!$omp end do nowait
|
|
!$omp end parallel
|
|
end do
|
|
!$omp end do
|
|
!$omp end parallel
|
|
end do
|
|
!$omp end do nowait
|
|
!$omp end parallel
|
|
end do
|
|
!$omp end do
|
|
!$omp end parallel
|
|
! CHECK-NEXT:- file: '{{[^"]*}}omp-nowait.f90'
|
|
! CHECK-NEXT: line: [[@LINE-16]]
|
|
! CHECK-NEXT: construct: do
|
|
! CHECK-NEXT: clauses:
|
|
! CHECK-NEXT: - clause: nowait
|
|
! CHECK-NEXT: details: ''
|
|
! CHECK-NEXT:- file: '{{[^"]*}}omp-nowait.f90'
|
|
! CHECK-NEXT: line: [[@LINE-23]]
|
|
! CHECK-NEXT: construct: parallel
|
|
! CHECK-NEXT: clauses: []
|
|
! CHECK-NEXT:- file: '{{[^"]*}}omp-nowait.f90'
|
|
! CHECK-NEXT: line: [[@LINE-29]]
|
|
! CHECK-NEXT: construct: do
|
|
! CHECK-NEXT: clauses: []
|
|
! CHECK-NEXT:- file: '{{[^"]*}}omp-nowait.f90'
|
|
! CHECK-NEXT: line: [[@LINE-34]]
|
|
! CHECK-NEXT: construct: parallel
|
|
! CHECK-NEXT: clauses: []
|
|
! CHECK-NEXT:- file: '{{[^"]*}}omp-nowait.f90'
|
|
! CHECK-NEXT: line: [[@LINE-40]]
|
|
! CHECK-NEXT: construct: do
|
|
! CHECK-NEXT: clauses:
|
|
! CHECK-NEXT: - clause: nowait
|
|
! CHECK-NEXT: details: ''
|
|
! CHECK-NEXT: - clause: schedule
|
|
! CHECK-NEXT: details: dynamic
|
|
! CHECK-NEXT:- file: '{{[^"]*}}omp-nowait.f90'
|
|
! CHECK-NEXT: line: [[@LINE-49]]
|
|
! CHECK-NEXT: construct: parallel
|
|
! CHECK-NEXT: clauses:
|
|
! CHECK-NEXT: - clause: shared
|
|
! CHECK-NEXT: details: arr_quad
|
|
! CHECK-NEXT:- file: '{{[^"]*}}omp-nowait.f90'
|
|
! CHECK-NEXT: line: [[@LINE-58]]
|
|
! CHECK-NEXT: construct: do
|
|
! CHECK-NEXT: clauses: []
|
|
! CHECK-NEXT:- file: '{{[^"]*}}omp-nowait.f90'
|
|
! CHECK-NEXT: line: [[@LINE-63]]
|
|
! CHECK-NEXT: construct: parallel
|
|
! CHECK-NEXT: clauses: []
|
|
|
|
|
|
!Check a do simd with nowait
|
|
!$omp do simd private(tmp)
|
|
do j = 1,n
|
|
do i = 1,n
|
|
tmp = arr(i,j) + brr(i,j)
|
|
crr(i,j) = tmp
|
|
end do
|
|
end do
|
|
!$omp end do simd nowait
|
|
! CHECK-NEXT:- file: '{{[^"]*}}omp-nowait.f90'
|
|
! CHECK-NEXT: line: [[@LINE-9]]
|
|
! CHECK-NEXT: construct: do simd
|
|
! CHECK-NEXT: clauses:
|
|
! CHECK-NEXT: - clause: nowait
|
|
! CHECK-NEXT: details: ''
|
|
! CHECK-NEXT: - clause: private
|
|
! CHECK-NEXT: details: tmp
|
|
|
|
|
|
!test nowait on non-do construct
|
|
!$omp parallel
|
|
!$omp single
|
|
tmp1 = i+j
|
|
!$omp end single
|
|
|
|
!$omp single
|
|
tmp2 = i-j
|
|
!$omp end single nowait
|
|
!$omp end parallel
|
|
! CHECK-NEXT:- file: '{{[^"]*}}omp-nowait.f90'
|
|
! CHECK-NEXT: line: [[@LINE-9]]
|
|
! CHECK-NEXT: construct: single
|
|
! CHECK-NEXT: clauses: []
|
|
! CHECK-NEXT:- file: '{{[^"]*}}omp-nowait.f90'
|
|
! CHECK-NEXT: line: [[@LINE-9]]
|
|
! CHECK-NEXT: construct: single
|
|
! CHECK-NEXT: clauses:
|
|
! CHECK-NEXT: - clause: nowait
|
|
! CHECK-NEXT: details: ''
|
|
! CHECK-NEXT:- file: '{{[^"]*}}omp-nowait.f90'
|
|
! CHECK-NEXT: line: [[@LINE-20]]
|
|
! CHECK-NEXT: construct: parallel
|
|
! CHECK-NEXT: clauses: []
|
|
|
|
end subroutine
|
|
|
|
! CHECK-NEXT:...
|