82 lines · plain
1! RUN: %flang_fc1 -fdebug-unparse -fopenmp -fopenmp-version=50 %s | FileCheck --ignore-case %s2! RUN: %flang_fc1 -fdebug-dump-parse-tree -fopenmp -fopenmp-version=50 %s | FileCheck --check-prefix="PARSE-TREE" %s3 4! Check for IN_REDUCTION() clause on OpenMP constructs5 6subroutine omp_in_reduction_taskgroup()7 integer :: z, i8 !CHECK: !$OMP TASKGROUP TASK_REDUCTION(+: z)9 !$omp taskgroup task_reduction(+:z)10 !CHECK-NEXT: !$OMP TASK IN_REDUCTION(+: z)11 !$omp task in_reduction(+:z)12 !CHECK-NEXT: z=z+5_413 z = z + 514 !CHECK-NEXT: !$OMP END TASK15 !$omp end task16 17 !CHECK-NEXT: !$OMP TASKLOOP IN_REDUCTION(+: z)18 !$omp taskloop in_reduction(+:z)19 !CHECK-NEXT: DO i=1_4,10_420 do i=1,1021 !CHECK-NEXT: z=5_4*z22 z = z * 523 !CHECK-NEXT: END DO24 end do25 !CHECK-NEXT: !$OMP END TASKLOOP26 !$omp end taskloop27 !CHECK-NEXT: !$OMP END TASKGROUP28 !$omp end taskgroup29end subroutine omp_in_reduction_taskgroup30 31!PARSE-TREE: OpenMPConstruct -> OmpBlockConstruct32!PARSE-TREE-NEXT: OmpBeginDirective33!PARSE-TREE-NEXT: OmpDirectiveName -> llvm::omp::Directive = taskgroup34!PARSE-TREE-NEXT: OmpClauseList -> OmpClause -> TaskReduction -> OmpTaskReductionClause35 36!PARSE-TREE: OpenMPConstruct -> OmpBlockConstruct37!PARSE-TREE-NEXT: OmpBeginDirective38!PARSE-TREE-NEXT: OmpDirectiveName -> llvm::omp::Directive = task39!PARSE-TREE-NEXT: OmpClauseList -> OmpClause -> InReduction -> OmpInReductionClause40!PARSE-TREE-NEXT: OmpReductionIdentifier -> DefinedOperator -> IntrinsicOperator = Add41!PARSE-TREE-NEXT: OmpObjectList -> OmpObject -> Designator -> DataRef -> Name = 'z'42 43!PARSE-TREE: OpenMPConstruct -> OpenMPLoopConstruct44!PARSE-TREE-NEXT: OmpBeginLoopDirective45!PARSE-TREE-NEXT: OmpDirectiveName -> llvm::omp::Directive = taskloop46!PARSE-TREE-NEXT: OmpClauseList -> OmpClause -> InReduction -> OmpInReductionClause47!PARSE-TREE-NEXT: OmpReductionIdentifier -> DefinedOperator -> IntrinsicOperator = Add48!PARSE-TREE-NEXT: OmpObjectList -> OmpObject -> Designator -> DataRef -> Name = 'z'49!PARSE-TREE-NEXT: Flags = {}50 51subroutine omp_in_reduction_parallel()52 integer :: z53 !CHECK: !$OMP PARALLEL REDUCTION(+: z)54 !$omp parallel reduction(+:z)55 !CHECK-NEXT: !$OMP TASKLOOP SIMD IN_REDUCTION(+: z)56 !$omp taskloop simd in_reduction(+:z)57 !CHECK-NEXT: DO i=1_4,10_458 do i=1,1059 !CHECK-NEXT: z=5_4*z60 z = z * 561 !CHECK-NEXT: END DO62 end do63 !CHECK-NEXT: !$OMP END TASKLOOP SIMD64 !$omp end taskloop simd65 !CHECK-NEXT: !$OMP END PARALLEL66 !$omp end parallel67end subroutine omp_in_reduction_parallel68 69!PARSE-TREE: OpenMPConstruct -> OmpBlockConstruct70!PARSE-TREE-NEXT: OmpBeginDirective71!PARSE-TREE-NEXT: OmpDirectiveName -> llvm::omp::Directive = parallel72!PARSE-TREE-NEXT: OmpClauseList -> OmpClause -> Reduction -> OmpReductionClause73 74!PARSE-TREE: OpenMPConstruct -> OpenMPLoopConstruct75!PARSE-TREE-NEXT: OmpBeginLoopDirective76!PARSE-TREE-NEXT: OmpDirectiveName -> llvm::omp::Directive = taskloop simd77!PARSE-TREE-NEXT: OmpClauseList -> OmpClause -> InReduction -> OmpInReductionClause78!PARSE-TREE-NEXT: OmpReductionIdentifier -> DefinedOperator -> IntrinsicOperator = Add79!PARSE-TREE-NEXT: OmpObjectList -> OmpObject -> Designator -> DataRef -> Name = 'z'80!PARSE-TREE-NEXT: Flags = {}81 82