llvm-project/flang/test/Semantics/OpenMP/omp-reduction09.f90
Kiran Chandramohan 495b8e104d [Flang][OpenMP] Provide an error when the minus operator is used in a reduction
OpenMP 5.2 standard has deprecated the usage of the minus operation in
reductions. The minus operation also is an unpleasant feature with
varied interpretations.

The patch also changes the usage of the minus operator in some existing testcases.

Discussed in https://discourse.llvm.org/t/openmp-runtime-problem-with-subtraction-reduction/64404

Reviewed By: peixin

Differential Revision: https://reviews.llvm.org/D132060
2022-08-18 14:35:12 +00:00

87 lines
2.6 KiB
Fortran

! RUN: %python %S/../test_symbols.py %s %flang_fc1 -fopenmp
! OpenMP Version 4.5
! 2.15.3.6 Reduction Clause Positive cases.
!DEF: /omp_reduction MainProgram
program omp_reduction
!DEF: /omp_reduction/i ObjectEntity INTEGER(4)
integer i
!DEF: /omp_reduction/k ObjectEntity INTEGER(4)
integer :: k = 10
!DEF: /omp_reduction/a ObjectEntity INTEGER(4)
integer a(10)
!DEF: /omp_reduction/b ObjectEntity INTEGER(4)
integer b(10,10,10)
!$omp parallel shared(k)
!$omp do reduction(+:k)
!DEF: /omp_reduction/OtherConstruct1/OtherConstruct1/i (OmpPrivate, OmpPreDetermined) HostAssoc INTEGER(4)
do i=1,10
!DEF: /omp_reduction/OtherConstruct1/OtherConstruct1/k (OmpReduction) HostAssoc INTEGER(4)
k = k+1
end do
!$omp end do
!$omp end parallel
!$omp parallel do reduction(+:a(10))
!DEF: /omp_reduction/OtherConstruct2/i (OmpPrivate, OmpPreDetermined) HostAssoc INTEGER(4)
do i=1,10
!REF: /omp_reduction/k
k = k+1
end do
!$omp end parallel do
!$omp parallel do reduction(+:a(1:10:1))
!DEF: /omp_reduction/OtherConstruct3/i (OmpPrivate, OmpPreDetermined) HostAssoc INTEGER(4)
do i=1,10
!REF: /omp_reduction/k
k = k+1
end do
!$omp end parallel do
!$omp parallel do reduction(+:b(1:10:1,1:5,2))
!DEF: /omp_reduction/OtherConstruct4/i (OmpPrivate, OmpPreDetermined) HostAssoc INTEGER(4)
do i=1,10
!REF: /omp_reduction/k
k = k+1
end do
!$omp end parallel do
!$omp parallel do reduction(+:b(1:10:1,1:5,2:5:1))
!DEF: /omp_reduction/OtherConstruct5/i (OmpPrivate, OmpPreDetermined) HostAssoc INTEGER(4)
do i=1,10
!REF: /omp_reduction/k
k = k+1
end do
!$omp end parallel do
!$omp parallel private(i)
!$omp do reduction(+:k) reduction(+:j)
!DEF: /omp_reduction/OtherConstruct6/OtherConstruct1/i (OmpPrivate, OmpPreDetermined) HostAssoc INTEGER(4)
do i=1,10
!DEF: /omp_reduction/OtherConstruct6/OtherConstruct1/k (OmpReduction) HostAssoc INTEGER(4)
k = k+1
end do
!$omp end do
!$omp end parallel
!$omp do reduction(+:k) reduction(*:j) reduction(+:l)
!DEF: /omp_reduction/OtherConstruct7/i (OmpPrivate, OmpPreDetermined) HostAssoc INTEGER(4)
do i=1,10
!DEF: /omp_reduction/OtherConstruct7/k (OmpReduction) HostAssoc INTEGER(4)
k = k+1
end do
!$omp end do
!$omp do reduction(.and.:k) reduction(.or.:j) reduction(.eqv.:l)
!DEF: /omp_reduction/OtherConstruct8/i (OmpPrivate, OmpPreDetermined) HostAssoc INTEGER(4)
do i=1,10
!DEF: /omp_reduction/OtherConstruct8/k (OmpReduction) HostAssoc INTEGER(4)
k = k+1
end do
!$omp end do
end program omp_reduction