Add ALL variable category, implement semantic checks to verify the validity of the clause, improve error messages, add testcases. The variable category modifier is optional since 5.0, make sure we allow it to be missing. If it is missing, assume "all" in clause conversion.
85 lines
2.7 KiB
Fortran
85 lines
2.7 KiB
Fortran
!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 target defaultmap(from)
|
|
!$omp end target
|
|
end
|
|
|
|
!UNPARSE: SUBROUTINE f00
|
|
!UNPARSE: !$OMP TARGET DEFAULTMAP(FROM)
|
|
!UNPARSE: !$OMP END TARGET
|
|
!UNPARSE: END SUBROUTINE
|
|
|
|
!PARSE-TREE: OmpBeginBlockDirective
|
|
!PARSE-TREE: | OmpBlockDirective -> llvm::omp::Directive = target
|
|
!PARSE-TREE: | OmpClauseList -> OmpClause -> Defaultmap -> OmpDefaultmapClause
|
|
!PARSE-TREE: | | ImplicitBehavior = From
|
|
!PARSE-TREE: Block
|
|
|
|
subroutine f01
|
|
!$omp target defaultmap(firstprivate: aggregate)
|
|
!$omp end target
|
|
end
|
|
|
|
!UNPARSE: SUBROUTINE f01
|
|
!UNPARSE: !$OMP TARGET DEFAULTMAP(FIRSTPRIVATE:AGGREGATE)
|
|
!UNPARSE: !$OMP END TARGET
|
|
!UNPARSE: END SUBROUTINE
|
|
|
|
!PARSE-TREE: OmpBeginBlockDirective
|
|
!PARSE-TREE: | OmpBlockDirective -> llvm::omp::Directive = target
|
|
!PARSE-TREE: | OmpClauseList -> OmpClause -> Defaultmap -> OmpDefaultmapClause
|
|
!PARSE-TREE: | | ImplicitBehavior = Firstprivate
|
|
!PARSE-TREE: | | VariableCategory = Aggregate
|
|
|
|
subroutine f02
|
|
!$omp target defaultmap(alloc: all)
|
|
!$omp end target
|
|
end
|
|
|
|
!UNPARSE: SUBROUTINE f02
|
|
!UNPARSE: !$OMP TARGET DEFAULTMAP(ALLOC:ALL)
|
|
!UNPARSE: !$OMP END TARGET
|
|
!UNPARSE: END SUBROUTINE
|
|
|
|
!PARSE-TREE: OmpBeginBlockDirective
|
|
!PARSE-TREE: | OmpBlockDirective -> llvm::omp::Directive = target
|
|
!PARSE-TREE: | OmpClauseList -> OmpClause -> Defaultmap -> OmpDefaultmapClause
|
|
!PARSE-TREE: | | ImplicitBehavior = Alloc
|
|
!PARSE-TREE: | | VariableCategory = All
|
|
|
|
! Both "all" and "allocatable" are valid, and "all" is a prefix of
|
|
! "allocatable". Make sure we parse this correctly.
|
|
subroutine f03
|
|
!$omp target defaultmap(alloc: allocatable)
|
|
!$omp end target
|
|
end
|
|
|
|
!UNPARSE: SUBROUTINE f03
|
|
!UNPARSE: !$OMP TARGET DEFAULTMAP(ALLOC:ALLOCATABLE)
|
|
!UNPARSE: !$OMP END TARGET
|
|
!UNPARSE: END SUBROUTINE
|
|
|
|
!PARSE-TREE: OmpBeginBlockDirective
|
|
!PARSE-TREE: | OmpBlockDirective -> llvm::omp::Directive = target
|
|
!PARSE-TREE: | OmpClauseList -> OmpClause -> Defaultmap -> OmpDefaultmapClause
|
|
!PARSE-TREE: | | ImplicitBehavior = Alloc
|
|
!PARSE-TREE: | | VariableCategory = Allocatable
|
|
|
|
subroutine f04
|
|
!$omp target defaultmap(tofrom: scalar)
|
|
!$omp end target
|
|
end
|
|
|
|
!UNPARSE: SUBROUTINE f04
|
|
!UNPARSE: !$OMP TARGET DEFAULTMAP(TOFROM:SCALAR)
|
|
!UNPARSE: !$OMP END TARGET
|
|
!UNPARSE: END SUBROUTINE
|
|
|
|
!PARSE-TREE: OmpBeginBlockDirective
|
|
!PARSE-TREE: | OmpBlockDirective -> llvm::omp::Directive = target
|
|
!PARSE-TREE: | OmpClauseList -> OmpClause -> Defaultmap -> OmpDefaultmapClause
|
|
!PARSE-TREE: | | ImplicitBehavior = Tofrom
|
|
!PARSE-TREE: | | VariableCategory = Scalar
|