// NOTE: Assertions have been autogenerated by utils/update_cc_test_checks.py UTC_ARGS: --check-globals smart // REQUIRES: amdgpu-registered-target // RUN: %clang_cc1 -x hip -triple amdgcn-amd-amdhsa -emit-llvm -fcuda-is-device -debug-info-kind=limited -gheterogeneous-dwarf=diexpression -o - %s | FileCheck --check-prefix=DIEXPRESSION-IR %s // XFAIL: * #define __global__ __attribute__((global)) #define __device__ __attribute__((device)) #define __shared__ __attribute__((shared)) #define __constant__ __attribute__((constant)) __shared__ int GlobalSharedA; __shared__ int GlobalSharedB; __device__ int GlobalDeviceA; __device__ int GlobalDeviceB; __constant__ int GlobalConstantA; __constant__ int GlobalConstantB; // DIEXPRESSION-IR-LABEL: @_Z7kernel1i( // DIEXPRESSION-IR-NEXT: entry: // DIEXPRESSION-IR-NEXT: [[ARG_ADDR:%.*]] = alloca i32, align 4, addrspace(5) // DIEXPRESSION-IR-NEXT: [[KERNELVARA:%.*]] = alloca i32, align 4, addrspace(5) // DIEXPRESSION-IR-NEXT: [[KERNELVARB:%.*]] = alloca i32, align 4, addrspace(5) // DIEXPRESSION-IR-NEXT: [[KERNELVARSHAREDAPOINTER:%.*]] = alloca ptr, align 8, addrspace(5) // DIEXPRESSION-IR-NEXT: [[KERNELVARSHAREDBPOINTER:%.*]] = alloca ptr, align 8, addrspace(5) // DIEXPRESSION-IR-NEXT: [[KERNELVARAPOINTER:%.*]] = alloca ptr, align 8, addrspace(5) // DIEXPRESSION-IR-NEXT: [[KERNELVARBPOINTER:%.*]] = alloca ptr, align 8, addrspace(5) // DIEXPRESSION-IR-NEXT: [[ARG_ADDR_ASCAST:%.*]] = addrspacecast ptr addrspace(5) [[ARG_ADDR]] to ptr // DIEXPRESSION-IR-NEXT: [[KERNELVARA_ASCAST:%.*]] = addrspacecast ptr addrspace(5) [[KERNELVARA]] to ptr // DIEXPRESSION-IR-NEXT: [[KERNELVARB_ASCAST:%.*]] = addrspacecast ptr addrspace(5) [[KERNELVARB]] to ptr // DIEXPRESSION-IR-NEXT: [[KERNELVARSHAREDAPOINTER_ASCAST:%.*]] = addrspacecast ptr addrspace(5) [[KERNELVARSHAREDAPOINTER]] to ptr // DIEXPRESSION-IR-NEXT: [[KERNELVARSHAREDBPOINTER_ASCAST:%.*]] = addrspacecast ptr addrspace(5) [[KERNELVARSHAREDBPOINTER]] to ptr // DIEXPRESSION-IR-NEXT: [[KERNELVARAPOINTER_ASCAST:%.*]] = addrspacecast ptr addrspace(5) [[KERNELVARAPOINTER]] to ptr // DIEXPRESSION-IR-NEXT: [[KERNELVARBPOINTER_ASCAST:%.*]] = addrspacecast ptr addrspace(5) [[KERNELVARBPOINTER]] to ptr // DIEXPRESSION-IR-NEXT: store i32 [[ARG:%.*]], ptr [[ARG_ADDR_ASCAST]], align 4 // DIEXPRESSION-IR-NEXT: #dbg_declare(ptr addrspace(5) [[ARG_ADDR]], [[META23:![0-9]+]], !DIExpression(DIOpArg(0, ptr addrspace(5)), DIOpDeref(i32)), [[META38:![0-9]+]]) // DIEXPRESSION-IR-NEXT: #dbg_declare(ptr addrspace(5) [[KERNELVARA]], [[META24:![0-9]+]], !DIExpression(DIOpArg(0, ptr addrspace(5)), DIOpDeref(i32)), [[META39:![0-9]+]]) // DIEXPRESSION-IR-NEXT: #dbg_declare(ptr addrspace(5) [[KERNELVARB]], [[META25:![0-9]+]], !DIExpression(DIOpArg(0, ptr addrspace(5)), DIOpDeref(i32)), [[META40:![0-9]+]]) // DIEXPRESSION-IR-NEXT: #dbg_declare(ptr addrspace(5) [[KERNELVARSHAREDAPOINTER]], [[META26:![0-9]+]], !DIExpression(DIOpArg(0, ptr addrspace(5)), DIOpDeref(ptr)), [[META41:![0-9]+]]) // DIEXPRESSION-IR-NEXT: store ptr addrspacecast (ptr addrspace(3) @_ZZ7kernel1iE16KernelVarSharedA to ptr), ptr [[KERNELVARSHAREDAPOINTER_ASCAST]], align 8, !dbg [[META41]] // DIEXPRESSION-IR-NEXT: #dbg_declare(ptr addrspace(5) [[KERNELVARSHAREDBPOINTER]], [[META28:![0-9]+]], !DIExpression(DIOpArg(0, ptr addrspace(5)), DIOpDeref(ptr)), [[META42:![0-9]+]]) // DIEXPRESSION-IR-NEXT: store ptr addrspacecast (ptr addrspace(3) @_ZZ7kernel1iE16KernelVarSharedB to ptr), ptr [[KERNELVARSHAREDBPOINTER_ASCAST]], align 8, !dbg [[META42]] // DIEXPRESSION-IR-NEXT: #dbg_declare(ptr addrspace(5) [[KERNELVARAPOINTER]], [[META29:![0-9]+]], !DIExpression(DIOpArg(0, ptr addrspace(5)), DIOpDeref(ptr)), [[META43:![0-9]+]]) // DIEXPRESSION-IR-NEXT: store ptr [[KERNELVARA_ASCAST]], ptr [[KERNELVARAPOINTER_ASCAST]], align 8, !dbg [[META43]] // DIEXPRESSION-IR-NEXT: #dbg_declare(ptr addrspace(5) [[KERNELVARBPOINTER]], [[META30:![0-9]+]], !DIExpression(DIOpArg(0, ptr addrspace(5)), DIOpDeref(ptr)), [[META44:![0-9]+]]) // DIEXPRESSION-IR-NEXT: store ptr [[KERNELVARB_ASCAST]], ptr [[KERNELVARBPOINTER_ASCAST]], align 8, !dbg [[META44]] // DIEXPRESSION-IR-NEXT: ret void, !dbg [[DBG45:![0-9]+]] // __global__ void kernel1(int Arg) { __shared__ int KernelVarSharedA; __shared__ int KernelVarSharedB; int KernelVarA; int KernelVarB; auto *KernelVarSharedAPointer = &KernelVarSharedA; auto *KernelVarSharedBPointer = &KernelVarSharedB; auto *KernelVarAPointer = &KernelVarA; auto *KernelVarBPointer = &KernelVarB; } // DIEXPRESSION-IR-LABEL: @_Z5func1i( // DIEXPRESSION-IR-NEXT: entry: // DIEXPRESSION-IR-NEXT: [[ARG_ADDR:%.*]] = alloca i32, align 4, addrspace(5) // DIEXPRESSION-IR-NEXT: [[FUNCVARA:%.*]] = alloca i32, align 4, addrspace(5) // DIEXPRESSION-IR-NEXT: [[FUNCVARB:%.*]] = alloca i32, align 4, addrspace(5) // DIEXPRESSION-IR-NEXT: [[FUNCVARAPOINTER:%.*]] = alloca ptr, align 8, addrspace(5) // DIEXPRESSION-IR-NEXT: [[FUNCVARBPOINTER:%.*]] = alloca ptr, align 8, addrspace(5) // DIEXPRESSION-IR-NEXT: [[ARG_ADDR_ASCAST:%.*]] = addrspacecast ptr addrspace(5) [[ARG_ADDR]] to ptr // DIEXPRESSION-IR-NEXT: [[FUNCVARA_ASCAST:%.*]] = addrspacecast ptr addrspace(5) [[FUNCVARA]] to ptr // DIEXPRESSION-IR-NEXT: [[FUNCVARB_ASCAST:%.*]] = addrspacecast ptr addrspace(5) [[FUNCVARB]] to ptr // DIEXPRESSION-IR-NEXT: [[FUNCVARAPOINTER_ASCAST:%.*]] = addrspacecast ptr addrspace(5) [[FUNCVARAPOINTER]] to ptr // DIEXPRESSION-IR-NEXT: [[FUNCVARBPOINTER_ASCAST:%.*]] = addrspacecast ptr addrspace(5) [[FUNCVARBPOINTER]] to ptr // DIEXPRESSION-IR-NEXT: store i32 [[ARG:%.*]], ptr [[ARG_ADDR_ASCAST]], align 4 // DIEXPRESSION-IR-NEXT: #dbg_declare(ptr addrspace(5) [[ARG_ADDR]], [[META48:![0-9]+]], !DIExpression(DIOpArg(0, ptr addrspace(5)), DIOpDeref(i32)), [[META53:![0-9]+]]) // DIEXPRESSION-IR-NEXT: #dbg_declare(ptr addrspace(5) [[FUNCVARA]], [[META49:![0-9]+]], !DIExpression(DIOpArg(0, ptr addrspace(5)), DIOpDeref(i32)), [[META54:![0-9]+]]) // DIEXPRESSION-IR-NEXT: #dbg_declare(ptr addrspace(5) [[FUNCVARB]], [[META50:![0-9]+]], !DIExpression(DIOpArg(0, ptr addrspace(5)), DIOpDeref(i32)), [[META55:![0-9]+]]) // DIEXPRESSION-IR-NEXT: #dbg_declare(ptr addrspace(5) [[FUNCVARAPOINTER]], [[META51:![0-9]+]], !DIExpression(DIOpArg(0, ptr addrspace(5)), DIOpDeref(ptr)), [[META56:![0-9]+]]) // DIEXPRESSION-IR-NEXT: store ptr [[FUNCVARA_ASCAST]], ptr [[FUNCVARAPOINTER_ASCAST]], align 8, !dbg [[META56]] // DIEXPRESSION-IR-NEXT: #dbg_declare(ptr addrspace(5) [[FUNCVARBPOINTER]], [[META52:![0-9]+]], !DIExpression(DIOpArg(0, ptr addrspace(5)), DIOpDeref(ptr)), [[META57:![0-9]+]]) // DIEXPRESSION-IR-NEXT: store ptr [[FUNCVARB_ASCAST]], ptr [[FUNCVARBPOINTER_ASCAST]], align 8, !dbg [[META57]] // DIEXPRESSION-IR-NEXT: ret void, !dbg [[DBG58:![0-9]+]] // __device__ void func1(int Arg) { int FuncVarA; int FuncVarB; auto *FuncVarAPointer = &FuncVarA; auto *FuncVarBPointer = &FuncVarB; } struct pair { int first, second; }; // DIEXPRESSION-IR-LABEL: @_Z5func14pair( // DIEXPRESSION-IR-NEXT: entry: // DIEXPRESSION-IR-NEXT: [[P:%.*]] = alloca [[STRUCT_PAIR:%.*]], align 4, addrspace(5) // DIEXPRESSION-IR-NEXT: [[P1:%.*]] = addrspacecast ptr addrspace(5) [[P]] to ptr // DIEXPRESSION-IR-NEXT: store [2 x i32] [[P_COERCE:%.*]], ptr [[P1]], align 4 // DIEXPRESSION-IR-NEXT: #dbg_declare(ptr addrspace(5) [[P]], [[META67:![0-9]+]], !DIExpression(DIOpArg(0, ptr addrspace(5)), DIOpDeref([[STRUCT_PAIR]])), [[META68:![0-9]+]]) // DIEXPRESSION-IR-NEXT: ret void, !dbg [[DBG69:![0-9]+]] // __device__ void func1(pair p) {} //. // DIEXPRESSION-IR: [[META0:![0-9]+]] = !DIGlobalVariableExpression(var: [[META1:![0-9]+]], expr: !DIExpression(DIOpArg(0, ptr addrspace(3)), DIOpDeref(i32))) // DIEXPRESSION-IR: [[META1]] = distinct !DIGlobalVariable(name: "GlobalSharedA", scope: [[META2:![0-9]+]], file: [[META7:![0-9]+]], line: 10, type: [[META8:![0-9]+]], isLocal: false, isDefinition: true, memorySpace: DW_MSPACE_LLVM_group) // DIEXPRESSION-IR: [[META2]] = distinct !DICompileUnit(language: DW_LANG_HIP, file: [[META3:![0-9]+]], producer: "{{.*}}clang version {{.*}}", isOptimized: false, runtimeVersion: 0, emissionKind: FullDebug, globals: [[META4:![0-9]+]], splitDebugInlining: false, nameTableKind: None) // DIEXPRESSION-IR: [[META3]] = !DIFile(filename: "{{.*}}clang/test/CodeGenHIP/", directory: "") // DIEXPRESSION-IR: [[META4]] = !{[[META0]], [[META5:![0-9]+]], [[META9:![0-9]+]], [[META11:![0-9]+]], [[META13:![0-9]+]], [[META15:![0-9]+]], [[META17:![0-9]+]], [[META31:![0-9]+]]} // DIEXPRESSION-IR: [[META5]] = !DIGlobalVariableExpression(var: [[META6:![0-9]+]], expr: !DIExpression(DIOpArg(0, ptr addrspace(3)), DIOpDeref(i32))) // DIEXPRESSION-IR: [[META6]] = distinct !DIGlobalVariable(name: "GlobalSharedB", scope: [[META2]], file: [[META7]], line: 11, type: [[META8]], isLocal: false, isDefinition: true, memorySpace: DW_MSPACE_LLVM_group) // DIEXPRESSION-IR: [[META7]] = !DIFile(filename: "{{.*}}clang/test/CodeGenHIP/debug-info-diop-in-diexpression_ir.hip", directory: "") // DIEXPRESSION-IR: [[META8]] = !DIBasicType(name: "int", size: 32, encoding: DW_ATE_signed) // DIEXPRESSION-IR: [[META9]] = !DIGlobalVariableExpression(var: [[META10:![0-9]+]], expr: !DIExpression(DIOpArg(0, ptr addrspace(1)), DIOpDeref(i32))) // DIEXPRESSION-IR: [[META10]] = distinct !DIGlobalVariable(name: "GlobalDeviceA", scope: [[META2]], file: [[META7]], line: 12, type: [[META8]], isLocal: false, isDefinition: true, memorySpace: DW_MSPACE_LLVM_global) // DIEXPRESSION-IR: [[META11]] = !DIGlobalVariableExpression(var: [[META12:![0-9]+]], expr: !DIExpression(DIOpArg(0, ptr addrspace(1)), DIOpDeref(i32))) // DIEXPRESSION-IR: [[META12]] = distinct !DIGlobalVariable(name: "GlobalDeviceB", scope: [[META2]], file: [[META7]], line: 13, type: [[META8]], isLocal: false, isDefinition: true, memorySpace: DW_MSPACE_LLVM_global) // DIEXPRESSION-IR: [[META13]] = !DIGlobalVariableExpression(var: [[META14:![0-9]+]], expr: !DIExpression(DIOpArg(0, ptr addrspace(4)), DIOpDeref(i32))) // DIEXPRESSION-IR: [[META14]] = distinct !DIGlobalVariable(name: "GlobalConstantA", scope: [[META2]], file: [[META7]], line: 14, type: [[META8]], isLocal: false, isDefinition: true, memorySpace: DW_MSPACE_LLVM_constant) // DIEXPRESSION-IR: [[META15]] = !DIGlobalVariableExpression(var: [[META16:![0-9]+]], expr: !DIExpression(DIOpArg(0, ptr addrspace(4)), DIOpDeref(i32))) // DIEXPRESSION-IR: [[META16]] = distinct !DIGlobalVariable(name: "GlobalConstantB", scope: [[META2]], file: [[META7]], line: 15, type: [[META8]], isLocal: false, isDefinition: true, memorySpace: DW_MSPACE_LLVM_constant) // DIEXPRESSION-IR: [[META17]] = !DIGlobalVariableExpression(var: [[META18:![0-9]+]], expr: !DIExpression(DIOpArg(0, ptr addrspace(3)), DIOpDeref(i32))) // DIEXPRESSION-IR: [[META18]] = distinct !DIGlobalVariable(name: "KernelVarSharedA", scope: [[META19:![0-9]+]], file: [[META7]], line: 48, type: [[META8]], isLocal: true, isDefinition: true, memorySpace: DW_MSPACE_LLVM_group) // DIEXPRESSION-IR: [[META19]] = distinct !DISubprogram(name: "kernel1", linkageName: "_Z7kernel1i", scope: [[META7]], file: [[META7]], line: 47, type: [[META20:![0-9]+]], scopeLine: 47, flags: DIFlagPrototyped, spFlags: DISPFlagDefinition, unit: [[META2]], retainedNodes: [[META22:![0-9]+]]) // DIEXPRESSION-IR: [[META20]] = !DISubroutineType(types: [[META21:![0-9]+]]) // DIEXPRESSION-IR: [[META21]] = !{null, [[META8]]} // DIEXPRESSION-IR: [[META22]] = !{[[META23]], [[META24]], [[META25]], [[META26]], [[META28]], [[META29]], [[META30]]} // DIEXPRESSION-IR: [[META23]] = !DILocalVariable(name: "Arg", arg: 1, scope: [[META19]], file: [[META7]], line: 47, type: [[META8]]) // DIEXPRESSION-IR: [[META24]] = !DILocalVariable(name: "KernelVarA", scope: [[META19]], file: [[META7]], line: 50, type: [[META8]]) // DIEXPRESSION-IR: [[META25]] = !DILocalVariable(name: "KernelVarB", scope: [[META19]], file: [[META7]], line: 51, type: [[META8]]) // DIEXPRESSION-IR: [[META26]] = !DILocalVariable(name: "KernelVarSharedAPointer", scope: [[META19]], file: [[META7]], line: 53, type: [[META27:![0-9]+]]) // DIEXPRESSION-IR: [[META27]] = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: [[META8]], size: 64, addressSpace: 1) // DIEXPRESSION-IR: [[META28]] = !DILocalVariable(name: "KernelVarSharedBPointer", scope: [[META19]], file: [[META7]], line: 54, type: [[META27]]) // DIEXPRESSION-IR: [[META29]] = !DILocalVariable(name: "KernelVarAPointer", scope: [[META19]], file: [[META7]], line: 55, type: [[META27]]) // DIEXPRESSION-IR: [[META30]] = !DILocalVariable(name: "KernelVarBPointer", scope: [[META19]], file: [[META7]], line: 56, type: [[META27]]) // DIEXPRESSION-IR: [[META31]] = !DIGlobalVariableExpression(var: [[META32:![0-9]+]], expr: !DIExpression(DIOpArg(0, ptr addrspace(3)), DIOpDeref(i32))) // DIEXPRESSION-IR: [[META32]] = distinct !DIGlobalVariable(name: "KernelVarSharedB", scope: [[META19]], file: [[META7]], line: 49, type: [[META8]], isLocal: true, isDefinition: true, memorySpace: DW_MSPACE_LLVM_group) // DIEXPRESSION-IR: [[META38]] = !DILocation(line: 47, column: 29, scope: [[META19]]) // DIEXPRESSION-IR: [[META39]] = !DILocation(line: 50, column: 7, scope: [[META19]]) // DIEXPRESSION-IR: [[META40]] = !DILocation(line: 51, column: 7, scope: [[META19]]) // DIEXPRESSION-IR: [[META41]] = !DILocation(line: 53, column: 9, scope: [[META19]]) // DIEXPRESSION-IR: [[META42]] = !DILocation(line: 54, column: 9, scope: [[META19]]) // DIEXPRESSION-IR: [[META43]] = !DILocation(line: 55, column: 9, scope: [[META19]]) // DIEXPRESSION-IR: [[META44]] = !DILocation(line: 56, column: 9, scope: [[META19]]) // DIEXPRESSION-IR: [[DBG45]] = !DILocation(line: 57, column: 1, scope: [[META19]]) // DIEXPRESSION-IR: [[META46:![0-9]+]] = distinct !DISubprogram(name: "func1", linkageName: "_Z5func1i", scope: [[META7]], file: [[META7]], line: 81, type: [[META20]], scopeLine: 81, flags: DIFlagPrototyped, spFlags: DISPFlagDefinition, unit: [[META2]], retainedNodes: [[META47:![0-9]+]]) // DIEXPRESSION-IR: [[META47]] = !{[[META48]], [[META49]], [[META50]], [[META51]], [[META52]]} // DIEXPRESSION-IR: [[META48]] = !DILocalVariable(name: "Arg", arg: 1, scope: [[META46]], file: [[META7]], line: 81, type: [[META8]]) // DIEXPRESSION-IR: [[META49]] = !DILocalVariable(name: "FuncVarA", scope: [[META46]], file: [[META7]], line: 82, type: [[META8]]) // DIEXPRESSION-IR: [[META50]] = !DILocalVariable(name: "FuncVarB", scope: [[META46]], file: [[META7]], line: 83, type: [[META8]]) // DIEXPRESSION-IR: [[META51]] = !DILocalVariable(name: "FuncVarAPointer", scope: [[META46]], file: [[META7]], line: 85, type: [[META27]]) // DIEXPRESSION-IR: [[META52]] = !DILocalVariable(name: "FuncVarBPointer", scope: [[META46]], file: [[META7]], line: 86, type: [[META27]]) // DIEXPRESSION-IR: [[META53]] = !DILocation(line: 81, column: 27, scope: [[META46]]) // DIEXPRESSION-IR: [[META54]] = !DILocation(line: 82, column: 7, scope: [[META46]]) // DIEXPRESSION-IR: [[META55]] = !DILocation(line: 83, column: 7, scope: [[META46]]) // DIEXPRESSION-IR: [[META56]] = !DILocation(line: 85, column: 9, scope: [[META46]]) // DIEXPRESSION-IR: [[META57]] = !DILocation(line: 86, column: 9, scope: [[META46]]) // DIEXPRESSION-IR: [[DBG58]] = !DILocation(line: 87, column: 1, scope: [[META46]]) // DIEXPRESSION-IR: [[META59:![0-9]+]] = distinct !DISubprogram(name: "func1", linkageName: "_Z5func14pair", scope: [[META7]], file: [[META7]], line: 98, type: [[META60:![0-9]+]], scopeLine: 98, flags: DIFlagPrototyped, spFlags: DISPFlagDefinition, unit: [[META2]], retainedNodes: [[META66:![0-9]+]]) // DIEXPRESSION-IR: [[META60]] = !DISubroutineType(types: [[META61:![0-9]+]]) // DIEXPRESSION-IR: [[META61]] = !{null, [[META62:![0-9]+]]} // DIEXPRESSION-IR: [[META62]] = distinct !DICompositeType(tag: DW_TAG_structure_type, name: "pair", file: [[META7]], line: 89, size: 64, flags: DIFlagTypePassByValue, elements: [[META63:![0-9]+]], identifier: "_ZTS4pair") // DIEXPRESSION-IR: [[META63]] = !{[[META64:![0-9]+]], [[META65:![0-9]+]]} // DIEXPRESSION-IR: [[META64]] = !DIDerivedType(tag: DW_TAG_member, name: "first", scope: [[META62]], file: [[META7]], line: 89, baseType: [[META8]], size: 32) // DIEXPRESSION-IR: [[META65]] = !DIDerivedType(tag: DW_TAG_member, name: "second", scope: [[META62]], file: [[META7]], line: 89, baseType: [[META8]], size: 32, offset: 32) // DIEXPRESSION-IR: [[META66]] = !{[[META67]]} // DIEXPRESSION-IR: [[META67]] = !DILocalVariable(name: "p", arg: 1, scope: [[META59]], file: [[META7]], line: 98, type: [[META62]]) // DIEXPRESSION-IR: [[META68]] = !DILocation(line: 98, column: 28, scope: [[META59]]) // DIEXPRESSION-IR: [[DBG69]] = !DILocation(line: 98, column: 32, scope: [[META59]]) //.