| !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 = {} |
| |