Accept the reduction modifier in the Flang parser. Issue a TODO message during lowering. OpenMP 5.0 introduced the reduction modifier. Details can be seen in 2.19.5.4 reductionClause. OpenMP 5.2 relevant section is 5.5.8reductionClause. This will help remove some of the parser errors highlighted in the following post and also bring it to a well defined behaviour (produce TODO errors for unsupported features, do not crash). https://discourse.llvm.org/t/proposal-rename-flang-new-to-flang/69462/60
21 lines
896 B
Fortran
21 lines
896 B
Fortran
! RUN: %flang_fc1 -fdebug-unparse-no-sema -fopenmp %s | FileCheck --ignore-case %s
|
|
! RUN: %flang_fc1 -fdebug-dump-parse-tree-no-sema -fopenmp %s | FileCheck --check-prefix="PARSE-TREE" %s
|
|
|
|
subroutine foo()
|
|
integer :: i, j
|
|
j = 0
|
|
! CHECK: !$OMP DO REDUCTION(TASK,*:j)
|
|
! PARSE-TREE: | | ExecutionPartConstruct -> ExecutableConstruct -> OpenMPConstruct -> OpenMPLoopConstruct
|
|
! PARSE-TREE: | | | OmpBeginLoopDirective
|
|
! PARSE-TREE: | | | | OmpLoopDirective -> llvm::omp::Directive = do
|
|
! PARSE-TREE: | | | | OmpClauseList -> OmpClause -> Reduction -> OmpReductionClause
|
|
! PARSE-TREE: | | | | | ReductionModifier = Task
|
|
! PARSE-TREE: | | | | | OmpReductionOperator -> DefinedOperator -> IntrinsicOperator = Multiply
|
|
! PARSE-TREE: | | | | | OmpObjectList -> OmpObject -> Designator -> DataRef -> Name = 'j
|
|
!$omp do reduction (task, *: j)
|
|
do i = 1, 10
|
|
j = j + 1
|
|
end do
|
|
!$omp end do
|
|
end
|