llvm-project/flang/test/Parser/OpenMP/target-loop-unparse.f90
Krzysztof Parzyszek e75e28ad3c
[flang][OpenMP] Use OmpDirectiveSpecification in Omp[Begin|End]LoopDi… (#159087)
…rective

This makes accessing directive components, such as directive name or the
list of clauses simpler and more uniform across different directives. It
also makes the parser simpler, since it reuses existing parsing
functionality.

The changes are scattered over a number of files, but they all share the
same nature:
- getting the begin/end directive from OpenMPLoopConstruct,
- getting the llvm::omp::Directive enum, and the source location,
- getting the clause list.
2025-09-16 11:38:03 -05:00

66 lines
1.7 KiB
Fortran

! RUN: %flang_fc1 -fdebug-unparse -fopenmp -fopenmp-version=50 %s | \
! RUN: FileCheck --ignore-case %s
! RUN: %flang_fc1 -fdebug-dump-parse-tree -fopenmp -fopenmp-version=50 %s | \
! RUN: FileCheck --check-prefix="PARSE-TREE" %s
! Check for parsing of loop directive
subroutine test_loop
integer :: i, j = 1
!PARSE-TREE: OmpBeginLoopDirective
!PARSE-TREE-NEXT: OmpDirectiveName -> llvm::omp::Directive = loop
!CHECK: !$omp loop
!$omp loop
do i=1,10
j = j + 1
end do
!$omp end loop
!PARSE-TREE: OmpBeginLoopDirective
!PARSE-TREE-NEXT: OmpDirectiveName -> llvm::omp::Directive = loop
!PARSE-TREE-NEXT: OmpClauseList -> OmpClause -> Bind -> OmpBindClause -> Binding = Thread
!CHECK: !$omp loop
!$omp loop bind(thread)
do i=1,10
j = j + 1
end do
!$omp end loop
end subroutine
subroutine test_target_loop
integer :: i, j = 1
!PARSE-TREE: OmpBeginLoopDirective
!PARSE-TREE-NEXT: OmpDirectiveName -> llvm::omp::Directive = target loop
!CHECK: !$omp target loop
!$omp target loop
do i=1,10
j = j + 1
end do
!$omp end target loop
end subroutine
subroutine test_target_teams_loop
integer :: i, j = 1
!PARSE-TREE: OmpBeginLoopDirective
!PARSE-TREE-NEXT: OmpDirectiveName -> llvm::omp::Directive = target teams loop
!CHECK: !$omp target teams loop
!$omp target teams loop
do i=1,10
j = j + 1
end do
!$omp end target teams loop
end subroutine
subroutine test_target_parallel_loop
integer :: i, j = 1
!PARSE-TREE: OmpBeginLoopDirective
!PARSE-TREE-NEXT: OmpDirectiveName -> llvm::omp::Directive = target parallel loop
!CHECK: !$omp target parallel loop
!$omp target parallel loop
do i=1,10
j = j + 1
end do
!$omp end target parallel loop
end subroutine