aboutsummaryrefslogtreecommitdiff
path: root/flang/test/Parser
diff options
context:
space:
mode:
authorNimish Mishra <neelam.nimish@gmail.com>2022-06-06 20:17:32 +0530
committerNimish Mishra <neelam.nimish@gmail.com>2022-06-06 14:55:27 +0530
commit6a3c4a40f4ba6943c5902660858d0c3df2830330 (patch)
treea4b44b10d8cce7525ffcba4a88f90e6e6a4d4670 /flang/test/Parser
parent5018a5dcbe70a9e2e39341762ec0ca0ad76d28b4 (diff)
downloadllvm-6a3c4a40f4ba6943c5902660858d0c3df2830330.zip
llvm-6a3c4a40f4ba6943c5902660858d0c3df2830330.tar.gz
llvm-6a3c4a40f4ba6943c5902660858d0c3df2830330.tar.bz2
[flang][OpenMP] Added parser support for in_reduction clause
OpenMP 5.0 adds a new clause `in_reduction` on OpenMP directives. This patch adds parser support for the same. Reviewed By: kiranchandramohan Differential Revision: https://reviews.llvm.org/D124156
Diffstat (limited to 'flang/test/Parser')
-rw-r--r--flang/test/Parser/omp-in-reduction-clause.f9079
1 files changed, 79 insertions, 0 deletions
diff --git a/flang/test/Parser/omp-in-reduction-clause.f90 b/flang/test/Parser/omp-in-reduction-clause.f90
new file mode 100644
index 0000000..16f0457
--- /dev/null
+++ b/flang/test/Parser/omp-in-reduction-clause.f90
@@ -0,0 +1,79 @@
+! RUN: %flang_fc1 -fdebug-unparse -fopenmp %s | FileCheck --ignore-case %s
+! RUN: %flang_fc1 -fdebug-dump-parse-tree -fopenmp %s | FileCheck --check-prefix="PARSE-TREE" %s
+
+! Check for IN_REDUCTION() clause on OpenMP constructs
+
+subroutine omp_in_reduction_taskgroup()
+ integer :: z, i
+ !CHECK: !$OMP TASKGROUP TASK_REDUCTION(+:z)
+ !$omp taskgroup task_reduction(+:z)
+ !CHECK-NEXT: !$OMP TASK IN_REDUCTION(+:z)
+ !$omp task in_reduction(+:z)
+ !CHECK-NEXT: z=z+5_4
+ z = z + 5
+ !CHECK-NEXT: !$OMP END TASK
+ !$omp end task
+
+ !CHECK-NEXT: !$OMP TASKLOOP IN_REDUCTION(+:z)
+ !$omp taskloop in_reduction(+:z)
+ !CHECK-NEXT: DO i=1_4,10_4
+ do i=1,10
+ !CHECK-NEXT: z=5_4*z
+ z = z * 5
+ !CHECK-NEXT: END DO
+ end do
+ !CHECK-NEXT: !$OMP END TASKLOOP
+ !$omp end taskloop
+ !CHECK-NEXT: !$OMP END TASKGROUP
+ !$omp end taskgroup
+end subroutine omp_in_reduction_taskgroup
+
+!PARSE-TREE: OpenMPConstruct -> OpenMPBlockConstruct
+!PARSE-TREE-NEXT: OmpBeginBlockDirective
+!PARSE-TREE-NEXT: OmpBlockDirective -> llvm::omp::Directive = taskgroup
+!PARSE-TREE-NEXT: OmpClauseList -> OmpClause -> TaskReduction -> OmpReductionClause
+
+!PARSE-TREE: OpenMPConstruct -> OpenMPBlockConstruct
+!PARSE-TREE-NEXT: OmpBeginBlockDirective
+!PARSE-TREE-NEXT: OmpBlockDirective -> llvm::omp::Directive = task
+!PARSE-TREE-NEXT: OmpClauseList -> OmpClause -> InReduction -> OmpInReductionClause
+!PARSE-TREE-NEXT: OmpReductionOperator -> DefinedOperator -> IntrinsicOperator = Add
+!PARSE-TREE-NEXT: OmpObjectList -> OmpObject -> Designator -> DataRef -> Name = 'z'
+
+!PARSE-TREE: OpenMPConstruct -> OpenMPLoopConstruct
+!PARSE-TREE-NEXT: OmpBeginLoopDirective
+!PARSE-TREE-NEXT: OmpLoopDirective -> llvm::omp::Directive = taskloop
+!PARSE-TREE-NEXT: OmpClauseList -> OmpClause -> InReduction -> OmpInReductionClause
+!PARSE-TREE-NEXT: OmpReductionOperator -> DefinedOperator -> IntrinsicOperator = Add
+!PARSE-TREE-NEXT: OmpObjectList -> OmpObject -> Designator -> DataRef -> Name = 'z'
+
+subroutine omp_in_reduction_parallel()
+ integer :: z
+ !CHECK: !$OMP PARALLEL REDUCTION(+:z)
+ !$omp parallel reduction(+:z)
+ !CHECK-NEXT: !$OMP TASKLOOP SIMD IN_REDUCTION(+:z)
+ !$omp taskloop simd in_reduction(+:z)
+ !CHECK-NEXT: DO i=1_4,10_4
+ do i=1,10
+ !CHECK-NEXT: z=5_4*z
+ z = z * 5
+ !CHECK-NEXT: END DO
+ end do
+ !CHECK-NEXT: !$OMP END TASKLOOP SIMD
+ !$omp end taskloop simd
+ !CHECK-NEXT: !$OMP END PARALLEL
+ !$omp end parallel
+end subroutine omp_in_reduction_parallel
+
+!PARSE-TREE: OpenMPConstruct -> OpenMPBlockConstruct
+!PARSE-TREE-NEXT: OmpBeginBlockDirective
+!PARSE-TREE-NEXT: OmpBlockDirective -> llvm::omp::Directive = parallel
+!PARSE-TREE-NEXT: OmpClauseList -> OmpClause -> Reduction -> OmpReductionClause
+
+!PARSE-TREE: OpenMPConstruct -> OpenMPLoopConstruct
+!PARSE-TREE-NEXT: OmpBeginLoopDirective
+!PARSE-TREE-NEXT: OmpLoopDirective -> llvm::omp::Directive = taskloop simd
+!PARSE-TREE-NEXT: OmpClauseList -> OmpClause -> InReduction -> OmpInReductionClause
+!PARSE-TREE-NEXT: OmpReductionOperator -> DefinedOperator -> IntrinsicOperator = Add
+!PASRE-TREE-NEXT: OmpObjectList -> OmpObject -> Designator -> DataRef -> Name = 'z'
+