brintos

brintos / llvm-project-archived public Read only

0
0
Text · 4.4 KiB · 10d87c4 Raw
78 lines · plain
1! This reproducer hit an issue where when finding directive's, and end directive's would iterate over the block.end()2! so Flang would crash. We should be able to parse this subroutine without flang crashing.3! Reported in https://github.com/llvm/llvm-project/issues/147309 and https://github.com/llvm/llvm-project/pull/145917#issuecomment-30415708244 5!RUN: %flang_fc1 -fdebug-dump-parse-tree -fopenmp -fopenmp-version=51 %s | FileCheck %s --check-prefix=CHECK-PARSE6!RUN: %flang_fc1 -fdebug-unparse -fopenmp -fopenmp-version=51 %s | FileCheck %s --check-prefix=CHECK-UNPARSE7 8subroutine loop_transformation_construct79implicit none10real(kind=8), dimension(1:10, 2) :: a11integer :: b,c12 13!$omp target teams distribute parallel do collapse(2) private(b)14do b = 1, 1015  do c = 1, 1016    a(b, 2) = a(c, 1)17  end do18end do19end subroutine20 21!CHECK-PARSE: | ExecutionPart -> Block22!CHECK-PARSE-NEXT: | | ExecutionPartConstruct -> ExecutableConstruct -> OpenMPConstruct -> OpenMPLoopConstruct23!CHECK-PARSE-NEXT: | | | OmpBeginLoopDirective24!CHECK-PARSE-NEXT: | | | | OmpDirectiveName -> llvm::omp::Directive = target teams distribute parallel do25!CHECK-PARSE-NEXT: | | | | OmpClauseList -> OmpClause -> Collapse -> Scalar -> Integer -> Constant -> Expr = '2_4'26!CHECK-PARSE-NEXT: | | | | | LiteralConstant -> IntLiteralConstant = '2'27!CHECK-PARSE-NEXT: | | | | OmpClause -> Private -> OmpObjectList -> OmpObject -> Designator -> DataRef -> Name = 'b'28!CHECK-PARSE-NEXT: | | | | Flags = {}29!CHECK-PARSE-NEXT: | | | Block30!CHECK-PARSE-NEXT: | | | | ExecutionPartConstruct -> ExecutableConstruct -> DoConstruct31!CHECK-PARSE-NEXT: | | | | | NonLabelDoStmt32!CHECK-PARSE-NEXT: | | | | | | LoopControl -> LoopBounds33!CHECK-PARSE-NEXT: | | | | | | | Scalar -> Name = 'b'34!CHECK-PARSE-NEXT: | | | | | | | Scalar -> Expr = '1_4'35!CHECK-PARSE-NEXT: | | | | | | | | LiteralConstant -> IntLiteralConstant = '1'36!CHECK-PARSE-NEXT: | | | | | | | Scalar -> Expr = '10_4'37!CHECK-PARSE-NEXT: | | | | | | | | LiteralConstant -> IntLiteralConstant = '10'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 = 'c'43!CHECK-PARSE-NEXT: | | | | | | | | | Scalar -> Expr = '1_4'44!CHECK-PARSE-NEXT: | | | | | | | | | | LiteralConstant -> IntLiteralConstant = '1'45!CHECK-PARSE-NEXT: | | | | | | | | | Scalar -> Expr = '10_4'46!CHECK-PARSE-NEXT: | | | | | | | | | | LiteralConstant -> IntLiteralConstant = '10'47!CHECK-PARSE-NEXT: | | | | | | | Block48!CHECK-PARSE-NEXT: | | | | | | | | ExecutionPartConstruct -> ExecutableConstruct -> ActionStmt -> AssignmentStmt = 'a(int(b,kind=8),2_8)=a(int(c,kind=8),1_8)'49!CHECK-PARSE-NEXT: | | | | | | | | | Variable = 'a(int(b,kind=8),2_8)'50!CHECK-PARSE-NEXT: | | | | | | | | | | Designator -> DataRef -> ArrayElement51!CHECK-PARSE-NEXT: | | | | | | | | | | | DataRef -> Name = 'a'52!CHECK-PARSE-NEXT: | | | | | | | | | | | SectionSubscript -> Integer -> Expr = 'b'53!CHECK-PARSE-NEXT: | | | | | | | | | | | | Designator -> DataRef -> Name = 'b'54!CHECK-PARSE-NEXT: | | | | | | | | | | | SectionSubscript -> Integer -> Expr = '2_4'55!CHECK-PARSE-NEXT: | | | | | | | | | | | | LiteralConstant -> IntLiteralConstant = '2'56!CHECK-PARSE-NEXT: | | | | | | | | | Expr = 'a(int(c,kind=8),1_8)'57!CHECK-PARSE-NEXT: | | | | | | | | | | Designator -> DataRef -> ArrayElement58!CHECK-PARSE-NEXT: | | | | | | | | | | | DataRef -> Name = 'a'59!CHECK-PARSE-NEXT: | | | | | | | | | | | SectionSubscript -> Integer -> Expr = 'c'60!CHECK-PARSE-NEXT: | | | | | | | | | | | | Designator -> DataRef -> Name = 'c'61!CHECK-PARSE-NEXT: | | | | | | | | | | | SectionSubscript -> Integer -> Expr = '1_4'62!CHECK-PARSE-NEXT: | | | | | | | | | | | | LiteralConstant -> IntLiteralConstant = '1'63!CHECK-PARSE-NEXT: | | | | | | | EndDoStmt ->64!CHECK-PARSE-NEXT: | | | | | EndDoStmt ->65!CHECK-PARSE-NEXT: | EndSubroutineStmt ->66 67!CHECK-UNPARSE: SUBROUTINE loop_transformation_construct768!CHECK-UNPARSE-NEXT:  IMPLICIT NONE69!CHECK-UNPARSE-NEXT:  REAL(KIND=8_4), DIMENSION(1_4:10_4,2_4) :: a70!CHECK-UNPARSE-NEXT:  INTEGER b, c71!CHECK-UNPARSE-NEXT: !$OMP TARGET TEAMS DISTRIBUTE PARALLEL DO  COLLAPSE(2_4) PRIVATE(b)72!CHECK-UNPARSE-NEXT:  DO b=1_4,10_473!CHECK-UNPARSE-NEXT:   DO c=1_4,10_474!CHECK-UNPARSE-NEXT:     a(int(b,kind=8),2_8)=a(int(c,kind=8),1_8)75!CHECK-UNPARSE-NEXT:   END DO76!CHECK-UNPARSE-NEXT:  END DO77!CHECK-UNPARSE-NEXT: END SUBROUTINE78