The `OmpDirectiveSpecification` contains directive name, the list of arguments, and the list of clauses. It was introduced to store the directive specification in METADIRECTIVE, and could be reused everywhere a directive representation is needed. In the long term this would unify the handling of common directive properties, as well as creating actual constructs from METADIRECTIVE by linking the contained directive specification with any associated user code.
91 lines
3.6 KiB
Fortran
91 lines
3.6 KiB
Fortran
!RUN: %flang_fc1 -fdebug-unparse -fopenmp -fopenmp-version=45 %s | FileCheck --ignore-case --check-prefix="UNPARSE" %s
|
|
!RUN: %flang_fc1 -fdebug-dump-parse-tree -fopenmp -fopenmp-version=45 %s | FileCheck --check-prefix="PARSE-TREE" %s
|
|
|
|
subroutine f00(x)
|
|
integer :: x(10, 10)
|
|
!$omp do ordered(2)
|
|
do i = 1, 10
|
|
do j = 1, 10
|
|
!$omp ordered depend(source)
|
|
x(i, j) = i + j
|
|
enddo
|
|
enddo
|
|
!$omp end do
|
|
end
|
|
|
|
!UNPARSE: SUBROUTINE f00 (x)
|
|
!UNPARSE: INTEGER x(10_4,10_4)
|
|
!UNPARSE: !$OMP DO ORDERED(2_4)
|
|
!UNPARSE: DO i=1_4,10_4
|
|
!UNPARSE: DO j=1_4,10_4
|
|
!UNPARSE: !$OMP ORDERED DEPEND(SOURCE)
|
|
!UNPARSE: x(int(i,kind=8),int(j,kind=8))=i+j
|
|
!UNPARSE: END DO
|
|
!UNPARSE: END DO
|
|
!UNPARSE: !$OMP END DO
|
|
!UNPARSE: END SUBROUTINE
|
|
|
|
!PARSE-TREE-LABEL: ProgramUnit -> SubroutineSubprogram
|
|
!PARSE-TREE: OmpBeginLoopDirective
|
|
!PARSE-TREE: | OmpLoopDirective -> llvm::omp::Directive = do
|
|
!PARSE-TREE: | OmpClauseList -> OmpClause -> Ordered -> Scalar -> Integer -> Constant -> Expr = '2_4'
|
|
!PARSE-TREE: | | LiteralConstant -> IntLiteralConstant = '2'
|
|
![...]
|
|
!PARSE-TREE: ExecutionPartConstruct -> ExecutableConstruct -> OpenMPConstruct -> OpenMPStandaloneConstruct -> OpenMPSimpleStandaloneConstruct -> OmpDirectiveSpecification
|
|
!PARSE-TREE: | OmpDirectiveName -> llvm::omp::Directive = ordered
|
|
!PARSE-TREE: | OmpClauseList -> OmpClause -> Depend -> OmpDependClause -> OmpDoacross -> Source
|
|
|
|
subroutine f01(x)
|
|
integer :: x(10, 10)
|
|
!$omp do ordered(2)
|
|
do i = 1, 10
|
|
do j = 1, 10
|
|
!$omp ordered depend(sink: i+1, j-2), depend(sink: i, j+3)
|
|
x(i, j) = i + j
|
|
enddo
|
|
enddo
|
|
!$omp end do
|
|
end
|
|
|
|
!UNPARSE: SUBROUTINE f01 (x)
|
|
!UNPARSE: INTEGER x(10_4,10_4)
|
|
!UNPARSE: !$OMP DO ORDERED(2_4)
|
|
!UNPARSE: DO i=1_4,10_4
|
|
!UNPARSE: DO j=1_4,10_4
|
|
!UNPARSE: !$OMP ORDERED DEPEND(SINK: i+1_4, j-2_4) DEPEND(SINK: i, j+3_4)
|
|
!UNPARSE: x(int(i,kind=8),int(j,kind=8))=i+j
|
|
!UNPARSE: END DO
|
|
!UNPARSE: END DO
|
|
!UNPARSE: !$OMP END DO
|
|
!UNPARSE: END SUBROUTINE
|
|
|
|
!PARSE-TREE-LABEL: ProgramUnit -> SubroutineSubprogram
|
|
!PARSE-TREE: OmpBeginLoopDirective
|
|
!PARSE-TREE: | OmpLoopDirective -> llvm::omp::Directive = do
|
|
!PARSE-TREE: | OmpClauseList -> OmpClause -> Ordered -> Scalar -> Integer -> Constant -> Expr = '2_4'
|
|
!PARSE-TREE: | | LiteralConstant -> IntLiteralConstant = '2'
|
|
![...]
|
|
!PARSE-TREE: ExecutionPartConstruct -> ExecutableConstruct -> OpenMPConstruct -> OpenMPStandaloneConstruct -> OpenMPSimpleStandaloneConstruct -> OmpDirectiveSpecification
|
|
!PARSE-TREE: | OmpDirectiveName -> llvm::omp::Directive = ordered
|
|
!PARSE-TREE: | OmpClauseList -> OmpClause -> Depend -> OmpDependClause -> OmpDoacross -> Sink -> OmpIterationVector -> OmpIteration
|
|
!PARSE-TREE: | | Name = 'i'
|
|
!PARSE-TREE: | | OmpIterationOffset
|
|
!PARSE-TREE: | | | DefinedOperator -> IntrinsicOperator = Add
|
|
!PARSE-TREE: | | | Scalar -> Integer -> Constant -> Expr = '1_4'
|
|
!PARSE-TREE: | | | | LiteralConstant -> IntLiteralConstant = '1'
|
|
!PARSE-TREE: | OmpIteration
|
|
!PARSE-TREE: | | Name = 'j'
|
|
!PARSE-TREE: | | OmpIterationOffset
|
|
!PARSE-TREE: | | | DefinedOperator -> IntrinsicOperator = Subtract
|
|
!PARSE-TREE: | | | Scalar -> Integer -> Constant -> Expr = '2_4'
|
|
!PARSE-TREE: | | | | LiteralConstant -> IntLiteralConstant = '2'
|
|
!PARSE-TREE: | OmpClause -> Depend -> OmpDependClause -> OmpDoacross -> Sink -> OmpIterationVector -> OmpIteration
|
|
!PARSE-TREE: | | Name = 'i'
|
|
!PARSE-TREE: | OmpIteration
|
|
!PARSE-TREE: | | Name = 'j'
|
|
!PARSE-TREE: | | OmpIterationOffset
|
|
!PARSE-TREE: | | | DefinedOperator -> IntrinsicOperator = Add
|
|
!PARSE-TREE: | | | Scalar -> Integer -> Constant -> Expr = '3_4'
|
|
!PARSE-TREE: | | | | LiteralConstant -> IntLiteralConstant = '3'
|
|
|