This verifies the "structural" restrictions on constructs encountered in a TASKGRAPH construct. There are also restrictions that apply to list items, specifically in the following contexts: - a list item on a clause on a replayable construct, - data-sharing attributes for a variable on a replayable construct. These restrictions are not verified, because that would require knowing which clauses (on a potential compound directive) apply to the task- generating construct of interest. This information is not available during semantic checks.
96 lines
3.3 KiB
Fortran
96 lines
3.3 KiB
Fortran
!RUN: %flang_fc1 -fdebug-unparse -fopenmp -fopenmp-version=60 %s | FileCheck --ignore-case --check-prefix="UNPARSE" %s
|
|
!RUN: %flang_fc1 -fdebug-dump-parse-tree -fopenmp -fopenmp-version=60 %s | FileCheck --check-prefix="PARSE-TREE" %s
|
|
|
|
subroutine f00
|
|
!$omp taskgraph
|
|
block
|
|
end block
|
|
end
|
|
|
|
!UNPARSE: SUBROUTINE f00
|
|
!UNPARSE: !$OMP TASKGRAPH
|
|
!UNPARSE: BLOCK
|
|
!UNPARSE: END BLOCK
|
|
!UNPARSE: END SUBROUTINE
|
|
|
|
!PARSE-TREE: ExecutionPartConstruct -> ExecutableConstruct -> OpenMPConstruct -> OmpBlockConstruct
|
|
!PARSE-TREE: | OmpBeginDirective
|
|
!PARSE-TREE: | | OmpDirectiveName -> llvm::omp::Directive = taskgraph
|
|
!PARSE-TREE: | | OmpClauseList ->
|
|
!PARSE-TREE: | | Flags = None
|
|
!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 f01(x, y)
|
|
integer :: x
|
|
logical :: y
|
|
!$omp taskgraph graph_id(x) graph_reset(y)
|
|
!$omp task
|
|
continue
|
|
!$omp end task
|
|
!$omp end taskgraph
|
|
end
|
|
|
|
!UNPARSE: SUBROUTINE f01 (x, y)
|
|
!UNPARSE: INTEGER x
|
|
!UNPARSE: LOGICAL y
|
|
!UNPARSE: !$OMP TASKGRAPH GRAPH_ID(x) GRAPH_RESET(y)
|
|
!UNPARSE: !$OMP TASK
|
|
!UNPARSE: CONTINUE
|
|
!UNPARSE: !$OMP END TASK
|
|
!UNPARSE: !$OMP END TASKGRAPH
|
|
!UNPARSE: END SUBROUTINE
|
|
|
|
!PARSE-TREE: ExecutionPartConstruct -> ExecutableConstruct -> OpenMPConstruct -> OmpBlockConstruct
|
|
!PARSE-TREE: | OmpBeginDirective
|
|
!PARSE-TREE: | | OmpDirectiveName -> llvm::omp::Directive = taskgraph
|
|
!PARSE-TREE: | | OmpClauseList -> OmpClause -> GraphId -> OmpGraphIdClause -> Scalar -> Integer -> Expr = 'x'
|
|
!PARSE-TREE: | | | Designator -> DataRef -> Name = 'x'
|
|
!PARSE-TREE: | | OmpClause -> GraphReset -> OmpGraphResetClause -> Scalar -> Logical -> Expr = 'y'
|
|
!PARSE-TREE: | | | Designator -> DataRef -> Name = 'y'
|
|
!PARSE-TREE: | | Flags = None
|
|
!PARSE-TREE: | Block
|
|
!PARSE-TREE: | | ExecutionPartConstruct -> ExecutableConstruct -> OpenMPConstruct -> OmpBlockConstruct
|
|
!PARSE-TREE: | | | OmpBeginDirective
|
|
!PARSE-TREE: | | | | OmpDirectiveName -> llvm::omp::Directive = task
|
|
!PARSE-TREE: | | | | OmpClauseList ->
|
|
!PARSE-TREE: | | | | Flags = None
|
|
!PARSE-TREE: | | | Block
|
|
!PARSE-TREE: | | | | ExecutionPartConstruct -> ExecutableConstruct -> ActionStmt -> ContinueStmt
|
|
!PARSE-TREE: | | | OmpEndDirective
|
|
!PARSE-TREE: | | | | OmpDirectiveName -> llvm::omp::Directive = task
|
|
!PARSE-TREE: | | | | OmpClauseList ->
|
|
!PARSE-TREE: | | | | Flags = None
|
|
!PARSE-TREE: | OmpEndDirective
|
|
!PARSE-TREE: | | OmpDirectiveName -> llvm::omp::Directive = taskgraph
|
|
!PARSE-TREE: | | OmpClauseList ->
|
|
!PARSE-TREE: | | Flags = None
|
|
|
|
|
|
subroutine f02
|
|
!$omp taskgraph graph_reset
|
|
!$omp end taskgraph
|
|
end
|
|
|
|
!UNPARSE: SUBROUTINE f02
|
|
!UNPARSE: !$OMP TASKGRAPH GRAPH_RESET
|
|
!UNPARSE: !$OMP END TASKGRAPH
|
|
!UNPARSE: END SUBROUTINE
|
|
|
|
!PARSE-TREE: ExecutionPartConstruct -> ExecutableConstruct -> OpenMPConstruct -> OmpBlockConstruct
|
|
!PARSE-TREE: | OmpBeginDirective
|
|
!PARSE-TREE: | | OmpDirectiveName -> llvm::omp::Directive = taskgraph
|
|
!PARSE-TREE: | | OmpClauseList -> OmpClause -> GraphReset ->
|
|
!PARSE-TREE: | | Flags = None
|
|
!PARSE-TREE: | Block
|
|
!PARSE-TREE: | OmpEndDirective
|
|
!PARSE-TREE: | | OmpDirectiveName -> llvm::omp::Directive = taskgraph
|
|
!PARSE-TREE: | | OmpClauseList ->
|
|
!PARSE-TREE: | | Flags = None
|