| !RUN: %flang_fc1 -fopenmp-version=51 -fopenmp -fdebug-unparse-no-sema %s | FileCheck --check-prefix="UNPARSE" %s |
| !RUN: %flang_fc1 -fopenmp-version=51 -fopenmp -fdebug-dump-parse-tree-no-sema %s | FileCheck --check-prefix="PARSE-TREE" %s |
| |
| subroutine sub1 |
| integer :: r |
| !$omp assume no_openmp |
| !$omp end assume |
| |
| !$omp assume no_parallelism |
| !$omp end assume |
| |
| !$omp assume no_openmp_routines |
| !$omp end assume |
| |
| !$omp assume absent(allocate), contains(workshare, task) |
| block ! strictly-structured-block |
| end block |
| |
| !$omp assume holds(1.eq.1) |
| block |
| end block |
| print *, r |
| end subroutine sub1 |
| |
| !UNPARSE: SUBROUTINE sub1 |
| !UNPARSE: INTEGER r |
| !UNPARSE: !$OMP ASSUME NO_OPENMP |
| !UNPARSE: !$OMP END ASSUME |
| !UNPARSE: !$OMP ASSUME NO_PARALLELISM |
| !UNPARSE: !$OMP END ASSUME |
| !UNPARSE: !$OMP ASSUME NO_OPENMP_ROUTINES |
| !UNPARSE: !$OMP END ASSUME |
| !UNPARSE: !$OMP ASSUME ABSENT(ALLOCATE) CONTAINS(WORKSHARE,TASK) |
| !UNPARSE: BLOCK |
| !UNPARSE: END BLOCK |
| !UNPARSE: !$OMP ASSUME HOLDS(1==1) |
| !UNPARSE: BLOCK |
| !UNPARSE: END BLOCK |
| !UNPARSE: PRINT *, r |
| !UNPARSE: END SUBROUTINE sub1 |
| |
| !PARSE-TREE: ExecutionPartConstruct -> ExecutableConstruct -> OpenMPConstruct -> OmpAssumeDirective |
| !PARSE-TREE: | OmpBeginDirective |
| !PARSE-TREE: | | OmpDirectiveName -> llvm::omp::Directive = assume |
| !PARSE-TREE: | | OmpClauseList -> OmpClause -> NoOpenmp |
| !PARSE-TREE: | | Flags = {} |
| !PARSE-TREE: | Block |
| !PARSE-TREE: | OmpEndDirective |
| !PARSE-TREE: | | OmpDirectiveName -> llvm::omp::Directive = assume |
| !PARSE-TREE: | | OmpClauseList -> |
| !PARSE-TREE: | | Flags = {} |
| !PARSE-TREE: ExecutionPartConstruct -> ExecutableConstruct -> OpenMPConstruct -> OmpAssumeDirective |
| !PARSE-TREE: | OmpBeginDirective |
| !PARSE-TREE: | | OmpDirectiveName -> llvm::omp::Directive = assume |
| !PARSE-TREE: | | OmpClauseList -> OmpClause -> NoParallelism |
| !PARSE-TREE: | | Flags = {} |
| !PARSE-TREE: | Block |
| !PARSE-TREE: | OmpEndDirective |
| !PARSE-TREE: | | OmpDirectiveName -> llvm::omp::Directive = assume |
| !PARSE-TREE: | | OmpClauseList -> |
| !PARSE-TREE: | | Flags = {} |
| !PARSE-TREE: ExecutionPartConstruct -> ExecutableConstruct -> OpenMPConstruct -> OmpAssumeDirective |
| !PARSE-TREE: | OmpBeginDirective |
| !PARSE-TREE: | | OmpDirectiveName -> llvm::omp::Directive = assume |
| !PARSE-TREE: | | OmpClauseList -> OmpClause -> NoOpenmpRoutines |
| !PARSE-TREE: | | Flags = {} |
| !PARSE-TREE: | Block |
| !PARSE-TREE: | OmpEndDirective |
| !PARSE-TREE: | | OmpDirectiveName -> llvm::omp::Directive = assume |
| !PARSE-TREE: | | OmpClauseList -> |
| !PARSE-TREE: | | Flags = {} |
| !PARSE-TREE: ExecutionPartConstruct -> ExecutableConstruct -> OpenMPConstruct -> OmpAssumeDirective |
| !PARSE-TREE: | OmpBeginDirective |
| !PARSE-TREE: | | OmpDirectiveName -> llvm::omp::Directive = assume |
| !PARSE-TREE: | | OmpClauseList -> OmpClause -> Absent -> OmpAbsentClause -> llvm::omp::Directive = allocate |
| !PARSE-TREE: | | OmpClause -> Contains -> OmpContainsClause -> llvm::omp::Directive = workshare |
| !PARSE-TREE: | | llvm::omp::Directive = task |
| !PARSE-TREE: | | Flags = {} |
| !PARSE-TREE: | Block |
| !PARSE-TREE: | | ExecutionPartConstruct -> ExecutableConstruct -> BlockConstruct |
| !PARSE-TREE: | | | BlockStmt -> |
| !PARSE-TREE: | | | BlockSpecificationPart -> SpecificationPart |
| !PARSE-TREE: | | | | ImplicitPart -> |
| !PARSE-TREE: | | | Block |
| !PARSE-TREE: | | | EndBlockStmt -> |
| !PARSE-TREE: ExecutionPartConstruct -> ExecutableConstruct -> OpenMPConstruct -> OmpAssumeDirective |
| !PARSE-TREE: | OmpBeginDirective |
| !PARSE-TREE: | | OmpDirectiveName -> llvm::omp::Directive = assume |
| !PARSE-TREE: | | OmpClauseList -> OmpClause -> Holds -> OmpHoldsClause -> Expr -> EQ |
| !PARSE-TREE: | | | Expr -> LiteralConstant -> IntLiteralConstant = '1' |
| !PARSE-TREE: | | | Expr -> LiteralConstant -> IntLiteralConstant = '1' |
| !PARSE-TREE: | | Flags = {} |
| !PARSE-TREE: | Block |
| !PARSE-TREE: | | ExecutionPartConstruct -> ExecutableConstruct -> BlockConstruct |
| !PARSE-TREE: | | | BlockStmt -> |
| !PARSE-TREE: | | | BlockSpecificationPart -> SpecificationPart |
| !PARSE-TREE: | | | | ImplicitPart -> |
| !PARSE-TREE: | | | Block |
| !PARSE-TREE: | | | EndBlockStmt -> |
| |
| |
| subroutine sub2 |
| integer :: r |
| integer :: v |
| v = 87 |
| !$omp assume no_openmp |
| r = r + 1 |
| !$omp end assume |
| end subroutine sub2 |
| |
| !UNPARSE: SUBROUTINE sub2 |
| !UNPARSE: INTEGER r |
| !UNPARSE: INTEGER v |
| !UNPARSE: v = 87 |
| !UNPARSE: !$OMP ASSUME NO_OPENMP |
| !UNPARSE: r = r+1 |
| !UNPARSE: !$OMP END ASSUME |
| !UNPARSE: END SUBROUTINE sub2 |
| |
| !PARSE-TREE: ExecutionPartConstruct -> ExecutableConstruct -> ActionStmt -> AssignmentStmt |
| !PARSE-TREE: | Variable -> Designator -> DataRef -> Name = 'v' |
| !PARSE-TREE: | Expr -> LiteralConstant -> IntLiteralConstant = '87' |
| !PARSE-TREE: ExecutionPartConstruct -> ExecutableConstruct -> OpenMPConstruct -> OmpAssumeDirective |
| !PARSE-TREE: | OmpBeginDirective |
| !PARSE-TREE: | | OmpDirectiveName -> llvm::omp::Directive = assume |
| !PARSE-TREE: | | OmpClauseList -> OmpClause -> NoOpenmp |
| !PARSE-TREE: | | Flags = {} |
| !PARSE-TREE: | Block |
| !PARSE-TREE: | | ExecutionPartConstruct -> ExecutableConstruct -> ActionStmt -> AssignmentStmt |
| !PARSE-TREE: | | | Variable -> Designator -> DataRef -> Name = 'r' |
| !PARSE-TREE: | | | Expr -> Add |
| !PARSE-TREE: | | | | Expr -> Designator -> DataRef -> Name = 'r' |
| !PARSE-TREE: | | | | Expr -> LiteralConstant -> IntLiteralConstant = '1' |
| !PARSE-TREE: | OmpEndDirective |
| !PARSE-TREE: | | OmpDirectiveName -> llvm::omp::Directive = assume |
| !PARSE-TREE: | | OmpClauseList -> |
| !PARSE-TREE: | | Flags = {} |
| |
| program p |
| !$omp assumes no_openmp |
| end program p |
| |
| !UNPARSE: PROGRAM p |
| !UNPARSE: !$OMP ASSUMES NO_OPENMP |
| !UNPARSE: END PROGRAM p |
| |
| !PARSE-TREE: OpenMPDeclarativeConstruct -> OmpAssumesDirective -> OmpDirectiveSpecification |
| !PARSE-TREE: | OmpDirectiveName -> llvm::omp::Directive = assumes |
| !PARSE-TREE: | OmpClauseList -> OmpClause -> NoOpenmp |
| !PARSE-TREE: | Flags = {} |
| !PARSE-TREE: ImplicitPart -> |