| ! RUN: %flang_fc1 -fdebug-dump-parse-tree %s 2>&1 | FileCheck %s |
| include "cuf-sanity-common" |
| !CHECK: Program -> ProgramUnit -> SubroutineSubprogram |
| !CHECK: | SubroutineStmt |
| !CHECK: | | Name = 'atcuf' |
| !CHECK: | SpecificationPart |
| !CHECK: | | ImplicitPart -> |
| !CHECK: | ExecutionPart -> Block |
| !CHECK: | EndSubroutineStmt -> |
| !CHECK: ProgramUnit -> SubroutineSubprogram |
| !CHECK: | SubroutineStmt |
| !CHECK: | | Name = 'cudadefd' |
| !CHECK: | SpecificationPart |
| !CHECK: | | ImplicitPart -> |
| !CHECK: | ExecutionPart -> Block |
| !CHECK: | EndSubroutineStmt -> |
| !CHECK: ProgramUnit -> Module |
| !CHECK: | ModuleStmt -> Name = 'm' |
| !CHECK: | SpecificationPart |
| !CHECK: | | ImplicitPart -> |
| !CHECK: | | DeclarationConstruct -> SpecificationConstruct -> TypeDeclarationStmt |
| !CHECK: | | | DeclarationTypeSpec -> IntrinsicTypeSpec -> Real |
| !CHECK: | | | AttrSpec -> Allocatable |
| !CHECK: | | | AttrSpec -> CUDADataAttr = Pinned |
| !CHECK: | | | EntityDecl |
| !CHECK: | | | | Name = 'pa' |
| !CHECK: | | | | ArraySpec -> DeferredShapeSpecList -> int |
| !CHECK: | ModuleSubprogramPart |
| !CHECK: | | ContainsStmt |
| !CHECK: | | ModuleSubprogram -> SubroutineSubprogram |
| !CHECK: | | | SubroutineStmt |
| !CHECK: | | | | PrefixSpec -> Attributes -> CUDASubprogramAttrs = Device |
| !CHECK: | | | | Name = 'devicesub' |
| !CHECK: | | | SpecificationPart |
| !CHECK: | | | | ImplicitPart -> |
| !CHECK: | | | ExecutionPart -> Block |
| !CHECK: | | | EndSubroutineStmt -> |
| !CHECK: | | ModuleSubprogram -> FunctionSubprogram |
| !CHECK: | | | FunctionStmt |
| !CHECK: | | | | PrefixSpec -> Attributes -> CUDASubprogramAttrs = Device |
| !CHECK: | | | | PrefixSpec -> DeclarationTypeSpec -> IntrinsicTypeSpec -> Real |
| !CHECK: | | | | Name = 'devicefunc' |
| !CHECK: | | | SpecificationPart |
| !CHECK: | | | | ImplicitPart -> |
| !CHECK: | | | ExecutionPart -> Block |
| !CHECK: | | | | ExecutionPartConstruct -> ExecutableConstruct -> ActionStmt -> AssignmentStmt = 'devicefunc=1._4' |
| !CHECK: | | | | | Variable = 'devicefunc' |
| !CHECK: | | | | | | Designator -> DataRef -> Name = 'devicefunc' |
| !CHECK: | | | | | Expr = '1._4' |
| !CHECK: | | | | | | LiteralConstant -> RealLiteralConstant |
| !CHECK: | | | | | | | Real = '1.' |
| !CHECK: | | | EndFunctionStmt -> |
| !CHECK: | | ModuleSubprogram -> SubroutineSubprogram |
| !CHECK: | | | SubroutineStmt |
| !CHECK: | | | | PrefixSpec -> Attributes -> CUDASubprogramAttrs = Global |
| !CHECK: | | | | Name = 'globalsub' |
| !CHECK: | | | SpecificationPart |
| !CHECK: | | | | ImplicitPart -> |
| !CHECK: | | | ExecutionPart -> Block |
| !CHECK: | | | EndSubroutineStmt -> |
| !CHECK: | | ModuleSubprogram -> SubroutineSubprogram |
| !CHECK: | | | SubroutineStmt |
| !CHECK: | | | | PrefixSpec -> Attributes -> CUDASubprogramAttrs = Grid_Global |
| !CHECK: | | | | Name = 'gridglobalsub' |
| !CHECK: | | | SpecificationPart |
| !CHECK: | | | | ImplicitPart -> |
| !CHECK: | | | ExecutionPart -> Block |
| !CHECK: | | | EndSubroutineStmt -> |
| !CHECK: | | ModuleSubprogram -> SubroutineSubprogram |
| !CHECK: | | | SubroutineStmt |
| !CHECK: | | | | PrefixSpec -> Attributes -> CUDASubprogramAttrs = Host |
| !CHECK: | | | | Name = 'hostsub' |
| !CHECK: | | | SpecificationPart |
| !CHECK: | | | | ImplicitPart -> |
| !CHECK: | | | ExecutionPart -> Block |
| !CHECK: | | | EndSubroutineStmt -> |
| !CHECK: | | ModuleSubprogram -> SubroutineSubprogram |
| !CHECK: | | | SubroutineStmt |
| !CHECK: | | | | PrefixSpec -> Attributes -> CUDASubprogramAttrs = Global |
| !CHECK: | | | | PrefixSpec -> Launch_Bounds -> Scalar -> Integer -> Constant -> Expr = '1_4' |
| !CHECK: | | | | | LiteralConstant -> IntLiteralConstant = '1' |
| !CHECK: | | | | Scalar -> Integer -> Constant -> Expr = '2_4' |
| !CHECK: | | | | | LiteralConstant -> IntLiteralConstant = '2' |
| !CHECK: | | | | Name = 'lbsub' |
| !CHECK: | | | SpecificationPart |
| !CHECK: | | | | ImplicitPart -> |
| !CHECK: | | | ExecutionPart -> Block |
| !CHECK: | | | EndSubroutineStmt -> |
| !CHECK: | | ModuleSubprogram -> SubroutineSubprogram |
| !CHECK: | | | SubroutineStmt |
| !CHECK: | | | | PrefixSpec -> Attributes -> CUDASubprogramAttrs = Global |
| !CHECK: | | | | PrefixSpec -> Cluster_Dims -> Scalar -> Integer -> Constant -> Expr = '1_4' |
| !CHECK: | | | | | LiteralConstant -> IntLiteralConstant = '1' |
| !CHECK: | | | | Scalar -> Integer -> Constant -> Expr = '2_4' |
| !CHECK: | | | | | LiteralConstant -> IntLiteralConstant = '2' |
| !CHECK: | | | | Scalar -> Integer -> Constant -> Expr = '3_4' |
| !CHECK: | | | | | LiteralConstant -> IntLiteralConstant = '3' |
| !CHECK: | | | | Name = 'cdsub' |
| !CHECK: | | | SpecificationPart |
| !CHECK: | | | | ImplicitPart -> |
| !CHECK: | | | ExecutionPart -> Block |
| !CHECK: | | | EndSubroutineStmt -> |
| !CHECK: | | ModuleSubprogram -> SubroutineSubprogram |
| !CHECK: | | | SubroutineStmt |
| !CHECK: | | | | PrefixSpec -> Attributes -> CUDASubprogramAttrs = Device |
| !CHECK: | | | | Name = 'attrs' |
| !CHECK: | | | SpecificationPart |
| !CHECK: | | | | ImplicitPart -> |
| !CHECK: | | | | DeclarationConstruct -> SpecificationConstruct -> OtherSpecificationStmt -> CUDAAttributesStmt |
| !CHECK: | | | | | CUDADataAttr = Device |
| !CHECK: | | | | | Name = 'devx1' |
| !CHECK: | | | | DeclarationConstruct -> SpecificationConstruct -> TypeDeclarationStmt |
| !CHECK: | | | | | DeclarationTypeSpec -> IntrinsicTypeSpec -> Real |
| !CHECK: | | | | | AttrSpec -> CUDADataAttr = Device |
| !CHECK: | | | | | EntityDecl |
| !CHECK: | | | | | | Name = 'devx2' |
| !CHECK: | | | ExecutionPart -> Block |
| !CHECK: | | | EndSubroutineStmt -> |
| !CHECK: | | ModuleSubprogram -> SubroutineSubprogram |
| !CHECK: | | | SubroutineStmt |
| !CHECK: | | | | Name = 'test' |
| !CHECK: | | | SpecificationPart |
| !CHECK: | | | | ImplicitPart -> |
| !CHECK: | | | | DeclarationConstruct -> SpecificationConstruct -> TypeDeclarationStmt |
| !CHECK: | | | | | DeclarationTypeSpec -> IntrinsicTypeSpec -> Logical |
| !CHECK: | | | | | EntityDecl |
| !CHECK: | | | | | | Name = 'ispinned' |
| !CHECK: | | | ExecutionPart -> Block |
| !CHECK: | | | | ExecutionPartConstruct -> ExecutableConstruct -> CUFKernelDoConstruct |
| !CHECK: | | | | | Directive |
| !CHECK: | | | | | | Scalar -> Integer -> Constant -> Expr = '1_4' |
| !CHECK: | | | | | | | LiteralConstant -> IntLiteralConstant = '1' |
| !CHECK: | | | | | | Scalar -> Integer -> Expr = '1_4' |
| !CHECK: | | | | | | | LiteralConstant -> IntLiteralConstant = '1' |
| !CHECK: | | | | | DoConstruct |
| !CHECK: | | | | | | NonLabelDoStmt |
| !CHECK: | | | | | | | LoopControl -> LoopBounds |
| !CHECK: | | | | | | | | Scalar -> Name = 'j' |
| !CHECK: | | | | | | | | Scalar -> Expr = '1_4' |
| !CHECK: | | | | | | | | | LiteralConstant -> IntLiteralConstant = '1' |
| !CHECK: | | | | | | | | Scalar -> Expr = '10_4' |
| !CHECK: | | | | | | | | | LiteralConstant -> IntLiteralConstant = '10' |
| !CHECK: | | | | | | Block |
| !CHECK: | | | | | | EndDoStmt -> |
| !CHECK: | | | | ExecutionPartConstruct -> ExecutableConstruct -> CUFKernelDoConstruct |
| !CHECK: | | | | | Directive |
| !CHECK: | | | | | | StarOrExpr -> Scalar -> Integer -> Expr = '1_4' |
| !CHECK: | | | | | | | LiteralConstant -> IntLiteralConstant = '1' |
| !CHECK: | | | | | | StarOrExpr -> Scalar -> Integer -> Expr = '2_4' |
| !CHECK: | | | | | | | LiteralConstant -> IntLiteralConstant = '2' |
| !CHECK: | | | | | | StarOrExpr -> Scalar -> Integer -> Expr = '3_4' |
| !CHECK: | | | | | | | LiteralConstant -> IntLiteralConstant = '3' |
| !CHECK: | | | | | | Scalar -> Integer -> Expr = '1_4' |
| !CHECK: | | | | | | | LiteralConstant -> IntLiteralConstant = '1' |
| !CHECK: | | | | | DoConstruct |
| !CHECK: | | | | | | NonLabelDoStmt |
| !CHECK: | | | | | | | LoopControl -> LoopBounds |
| !CHECK: | | | | | | | | Scalar -> Name = 'j' |
| !CHECK: | | | | | | | | Scalar -> Expr = '1_4' |
| !CHECK: | | | | | | | | | LiteralConstant -> IntLiteralConstant = '1' |
| !CHECK: | | | | | | | | Scalar -> Expr = '10_4' |
| !CHECK: | | | | | | | | | LiteralConstant -> IntLiteralConstant = '10' |
| !CHECK: | | | | | | Block |
| !CHECK: | | | | | | EndDoStmt -> |
| !CHECK: | | | | ExecutionPartConstruct -> ExecutableConstruct -> ActionStmt -> CallStmt = 'CALL globalsub<<<1_4,2_4>>>()' |
| !CHECK: | | | | | Call |
| !CHECK: | | | | | | ProcedureDesignator -> Name = 'globalsub' |
| !CHECK: | | | | | Chevrons |
| !CHECK: | | | | | | Scalar -> Expr = '1_4' |
| !CHECK: | | | | | | | LiteralConstant -> IntLiteralConstant = '1' |
| !CHECK: | | | | | | Scalar -> Expr = '2_4' |
| !CHECK: | | | | | | | LiteralConstant -> IntLiteralConstant = '2' |
| !CHECK: | | | | ExecutionPartConstruct -> ExecutableConstruct -> ActionStmt -> CallStmt = 'CALL globalsub<<<1_4,2_4,3_4>>>()' |
| !CHECK: | | | | | Call |
| !CHECK: | | | | | | ProcedureDesignator -> Name = 'globalsub' |
| !CHECK: | | | | | Chevrons |
| !CHECK: | | | | | | Scalar -> Expr = '1_4' |
| !CHECK: | | | | | | | LiteralConstant -> IntLiteralConstant = '1' |
| !CHECK: | | | | | | Scalar -> Expr = '2_4' |
| !CHECK: | | | | | | | LiteralConstant -> IntLiteralConstant = '2' |
| !CHECK: | | | | | | Scalar -> Integer -> Expr = '3_4' |
| !CHECK: | | | | | | | LiteralConstant -> IntLiteralConstant = '3' |
| !CHECK: | | | | ExecutionPartConstruct -> ExecutableConstruct -> ActionStmt -> CallStmt = 'CALL globalsub<<<1_4,2_4,3_4,4_4>>>()' |
| !CHECK: | | | | | Call |
| !CHECK: | | | | | | ProcedureDesignator -> Name = 'globalsub' |
| !CHECK: | | | | | Chevrons |
| !CHECK: | | | | | | Scalar -> Expr = '1_4' |
| !CHECK: | | | | | | | LiteralConstant -> IntLiteralConstant = '1' |
| !CHECK: | | | | | | Scalar -> Expr = '2_4' |
| !CHECK: | | | | | | | LiteralConstant -> IntLiteralConstant = '2' |
| !CHECK: | | | | | | Scalar -> Integer -> Expr = '3_4' |
| !CHECK: | | | | | | | LiteralConstant -> IntLiteralConstant = '3' |
| !CHECK: | | | | | | Scalar -> Integer -> Expr = '4_4' |
| !CHECK: | | | | | | | LiteralConstant -> IntLiteralConstant = '4' |
| !CHECK: | | | | ExecutionPartConstruct -> ExecutableConstruct -> ActionStmt -> AllocateStmt |
| !CHECK: | | | | | Allocation |
| !CHECK: | | | | | | AllocateObject = 'pa' |
| !CHECK: | | | | | | | Name = 'pa' |
| !CHECK: | | | | | | AllocateShapeSpec |
| !CHECK: | | | | | | | Scalar -> Integer -> Expr = '32_4' |
| !CHECK: | | | | | | | | LiteralConstant -> IntLiteralConstant = '32' |
| !CHECK: | | | | | AllocOpt -> Pinned -> Scalar -> Logical -> Variable = 'ispinned' |
| !CHECK: | | | | | | Designator -> DataRef -> Name = 'ispinned' |
| !CHECK: | | | EndSubroutineStmt -> |
| !CHECK: | EndModuleStmt -> |