! 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'