98 lines · plain
1! Test the Parse Tree to ensure the OpenMP Loop Transformation Construct Fuse can be constructed on another Fuse2 3! RUN: %flang_fc1 -fdebug-dump-parse-tree -fopenmp -fopenmp-version=51 %s | FileCheck %s --check-prefix=CHECK-PARSE4! RUN: %flang_fc1 -fdebug-unparse -fopenmp -fopenmp-version=51 %s | FileCheck %s --check-prefix=CHECK-UNPARSE5 6subroutine fuse_on_fuse7 implicit none8 integer :: I = 109 integer :: j10 11 !$omp fuse12 !$omp fuse13 do i = 1, I14 continue15 end do16 do j = 1, I17 continue18 end do19 !$omp end fuse20 do j = 1, I21 continue22 end do23 !$omp end fuse24end subroutine25 26!CHECK-PARSE: | ExecutionPart -> Block27!CHECK-PARSE-NEXT: | | ExecutionPartConstruct -> ExecutableConstruct -> OpenMPConstruct -> OpenMPLoopConstruct28!CHECK-PARSE-NEXT: | | | OmpBeginLoopDirective29!CHECK-PARSE-NEXT: | | | | OmpDirectiveName -> llvm::omp::Directive = fuse30!CHECK-PARSE-NEXT: | | | | OmpClauseList ->31!CHECK-PARSE-NEXT: | | | | Flags = {}32!CHECK-PARSE-NEXT: | | | Block33!CHECK-PARSE-NEXT: | | | | ExecutionPartConstruct -> ExecutableConstruct -> OpenMPConstruct -> OpenMPLoopConstruct34!CHECK-PARSE-NEXT: | | | | | OmpBeginLoopDirective35!CHECK-PARSE-NEXT: | | | | | | OmpDirectiveName -> llvm::omp::Directive = fuse36!CHECK-PARSE-NEXT: | | | | | | OmpClauseList ->37!CHECK-PARSE-NEXT: | | | | | | Flags = {}38!CHECK-PARSE-NEXT: | | | | | Block39!CHECK-PARSE-NEXT: | | | | | | ExecutionPartConstruct -> ExecutableConstruct -> DoConstruct40!CHECK-PARSE-NEXT: | | | | | | | NonLabelDoStmt41!CHECK-PARSE-NEXT: | | | | | | | | LoopControl -> LoopBounds42!CHECK-PARSE-NEXT: | | | | | | | | | Scalar -> Name = 'i'43!CHECK-PARSE-NEXT: | | | | | | | | | Scalar -> Expr = '1_4'44!CHECK-PARSE-NEXT: | | | | | | | | | | LiteralConstant -> IntLiteralConstant = '1'45!CHECK-PARSE-NEXT: | | | | | | | | | Scalar -> Expr = 'i'46!CHECK-PARSE-NEXT: | | | | | | | | | | Designator -> DataRef -> Name = 'i'47!CHECK-PARSE-NEXT: | | | | | | | Block48!CHECK-PARSE-NEXT: | | | | | | | | ExecutionPartConstruct -> ExecutableConstruct -> ActionStmt -> ContinueStmt49!CHECK-PARSE-NEXT: | | | | | | | EndDoStmt ->50!CHECK-PARSE-NEXT: | | | | | | ExecutionPartConstruct -> ExecutableConstruct -> DoConstruct51!CHECK-PARSE-NEXT: | | | | | | | NonLabelDoStmt52!CHECK-PARSE-NEXT: | | | | | | | | LoopControl -> LoopBounds53!CHECK-PARSE-NEXT: | | | | | | | | | Scalar -> Name = 'j'54!CHECK-PARSE-NEXT: | | | | | | | | | Scalar -> Expr = '1_4'55!CHECK-PARSE-NEXT: | | | | | | | | | | LiteralConstant -> IntLiteralConstant = '1'56!CHECK-PARSE-NEXT: | | | | | | | | | Scalar -> Expr = 'i'57!CHECK-PARSE-NEXT: | | | | | | | | | | Designator -> DataRef -> Name = 'i'58!CHECK-PARSE-NEXT: | | | | | | | Block59!CHECK-PARSE-NEXT: | | | | | | | | ExecutionPartConstruct -> ExecutableConstruct -> ActionStmt -> ContinueStmt60!CHECK-PARSE-NEXT: | | | | | | | EndDoStmt ->61!CHECK-PARSE-NEXT: | | | | | OmpEndLoopDirective62!CHECK-PARSE-NEXT: | | | | | | OmpDirectiveName -> llvm::omp::Directive = fuse63!CHECK-PARSE-NEXT: | | | | | | OmpClauseList ->64!CHECK-PARSE-NEXT: | | | | | | Flags = {}65!CHECK-PARSE-NEXT: | | | | ExecutionPartConstruct -> ExecutableConstruct -> DoConstruct66!CHECK-PARSE-NEXT: | | | | | NonLabelDoStmt67!CHECK-PARSE-NEXT: | | | | | | LoopControl -> LoopBounds68!CHECK-PARSE-NEXT: | | | | | | | Scalar -> Name = 'j'69!CHECK-PARSE-NEXT: | | | | | | | Scalar -> Expr = '1_4'70!CHECK-PARSE-NEXT: | | | | | | | | LiteralConstant -> IntLiteralConstant = '1'71!CHECK-PARSE-NEXT: | | | | | | | Scalar -> Expr = 'i'72!CHECK-PARSE-NEXT: | | | | | | | | Designator -> DataRef -> Name = 'i'73!CHECK-PARSE-NEXT: | | | | | Block74!CHECK-PARSE-NEXT: | | | | | | ExecutionPartConstruct -> ExecutableConstruct -> ActionStmt -> ContinueStmt75!CHECK-PARSE-NEXT: | | | | | EndDoStmt ->76!CHECK-PARSE-NEXT: | | | OmpEndLoopDirective77!CHECK-PARSE-NEXT: | | | | OmpDirectiveName -> llvm::omp::Directive = fuse78!CHECK-PARSE-NEXT: | | | | OmpClauseList ->79!CHECK-PARSE-NEXT: | | | | Flags = {}80 81!CHECK-UNPARSE: SUBROUTINE fuse_on_fuse82!CHECK-UNPARSE-NEXT: IMPLICIT NONE83!CHECK-UNPARSE-NEXT: INTEGER :: i = 10_484!CHECK-UNPARSE-NEXT: INTEGER j85!CHECK-UNPARSE-NEXT: !$OMP FUSE86!CHECK-UNPARSE-NEXT: !$OMP FUSE87!CHECK-UNPARSE-NEXT: DO i=1_4,i88!CHECK-UNPARSE-NEXT: CONTINUE89!CHECK-UNPARSE-NEXT: END DO90!CHECK-UNPARSE-NEXT: DO j=1_4,i91!CHECK-UNPARSE-NEXT: CONTINUE92!CHECK-UNPARSE-NEXT: END DO93!CHECK-UNPARSE-NEXT: !$OMP END FUSE94!CHECK-UNPARSE-NEXT: DO j=1_4,i95!CHECK-UNPARSE-NEXT: CONTINUE96!CHECK-UNPARSE-NEXT: END DO97!CHECK-UNPARSE-NEXT: !$OMP END FUSE98