blob: 73b3678be4b101e6c1160bd7c40e114fda24b71e [file] [edit]
!RUN: %flang_fc1 -fdebug-unparse -fopenmp -fopenmp-version=52 %s | FileCheck --ignore-case --check-prefix="UNPARSE" %s
!RUN: %flang_fc1 -fdebug-dump-parse-tree -fopenmp -fopenmp-version=52 %s | FileCheck --check-prefix="PARSE-TREE" %s
subroutine f00
!$omp begin metadirective
continue
!$omp end metadirective
end
!UNPARSE: SUBROUTINE f00
!UNPARSE: !$OMP BEGIN METADIRECTIVE
!UNPARSE: CONTINUE
!UNPARSE: !$OMP END METADIRECTIVE
!UNPARSE: END SUBROUTINE
!PARSE-TREE: ExecutionPartConstruct -> ExecutableConstruct -> OpenMPConstruct -> OmpDelimitedMetadirectiveDirective
!PARSE-TREE: | OmpBeginDirective
!PARSE-TREE: | | OmpDirectiveName -> llvm::omp::Directive = metadirective
!PARSE-TREE: | | OmpClauseList ->
!PARSE-TREE: | | Flags = {ExplicitBegin}
!PARSE-TREE: | Block
!PARSE-TREE: | OmpEndDirective
!PARSE-TREE: | | OmpDirectiveName -> llvm::omp::Directive = metadirective
!PARSE-TREE: | | OmpClauseList ->
!PARSE-TREE: | | Flags = {}
subroutine f01(s)
integer :: i
integer :: s
s = 0
!$omp begin metadirective &
!$omp & when(user={condition(.true.)}: parallel do reduction(+: s)) &
!$omp & otherwise(do)
do i = 1, 10
s = s + i
end do
!$omp end metadirective
end
!UNPARSE: SUBROUTINE f01 (s)
!UNPARSE: INTEGER i
!UNPARSE: INTEGER s
!UNPARSE: s=0_4
!UNPARSE: !$OMP BEGIN METADIRECTIVE WHEN(USER={CONDITION(.true._4)}: PARALLEL DO REDUCTION(+: s)&
!UNPARSE: !$OMP&) OTHERWISE(DO)
!UNPARSE: DO i=1_4,10_4
!UNPARSE: s=s+i
!UNPARSE: END DO
!UNPARSE: !$OMP END METADIRECTIVE
!UNPARSE: END SUBROUTINE
!PARSE-TREE: ExecutionPartConstruct -> ExecutableConstruct -> OpenMPConstruct -> OmpDelimitedMetadirectiveDirective
!PARSE-TREE: | OmpBeginDirective
!PARSE-TREE: | | OmpDirectiveName -> llvm::omp::Directive = metadirective
!PARSE-TREE: | | OmpClauseList -> OmpClause -> When -> OmpWhenClause
!PARSE-TREE: | | | Modifier -> OmpContextSelectorSpecification -> OmpTraitSetSelector
!PARSE-TREE: | | | | OmpTraitSetSelectorName -> Value = User
!PARSE-TREE: | | | | OmpTraitSelector
!PARSE-TREE: | | | | | OmpTraitSelectorName -> Value = Condition
!PARSE-TREE: | | | | | Properties
!PARSE-TREE: | | | | | | OmpTraitProperty -> Scalar -> Expr = '.true._4'
!PARSE-TREE: | | | | | | | LiteralConstant -> LogicalLiteralConstant
!PARSE-TREE: | | | | | | | | bool = 'true'
!PARSE-TREE: | | | OmpDirectiveSpecification
!PARSE-TREE: | | | | OmpDirectiveName -> llvm::omp::Directive = parallel do
!PARSE-TREE: | | | | OmpClauseList -> OmpClause -> Reduction -> OmpReductionClause
!PARSE-TREE: | | | | | Modifier -> OmpReductionIdentifier -> DefinedOperator -> IntrinsicOperator = Add
!PARSE-TREE: | | | | | OmpObjectList -> OmpObject -> Designator -> DataRef -> Name = 's'
!PARSE-TREE: | | | | Flags = {}
!PARSE-TREE: | | OmpClause -> Otherwise -> OmpOtherwiseClause -> OmpDirectiveSpecification
!PARSE-TREE: | | | OmpDirectiveName -> llvm::omp::Directive = do
!PARSE-TREE: | | | OmpClauseList ->
!PARSE-TREE: | | | Flags = {}
!PARSE-TREE: | | Flags = {ExplicitBegin}
!PARSE-TREE: | Block
!PARSE-TREE: | OmpEndDirective
!PARSE-TREE: | | OmpDirectiveName -> llvm::omp::Directive = metadirective
!PARSE-TREE: | | OmpClauseList ->
!PARSE-TREE: | | Flags = {}