1
+ ; RUN: llc %s -o %t.o -mcpu=gfx1030 -filetype=obj -O0
2
+ ; RUN: llvm-debuginfo-analyzer %t.o --print=all --attribute=all | FileCheck %s
3
+
4
+ ; This test compiles this module with AMDGPU backend under -O0,
5
+ ; and makes sure llvm-debuginfo-analzyer works for it.
6
+
7
+ ; Simple checks to make sure llvm-debuginfo-analzyer didn't fail early.
8
+ ; CHECK: Logical View:
9
+ ; CHECK: {CompileUnit}
10
+ ; CHECK: {Code} 's_endpgm'
11
+
12
+ source_filename = "module"
13
+ target datalayout = "e-p:64:64-p1:64:64-p2:32:32-p3:32:32-p4:64:64-p5:32:32-p6:32:32-p7:160:256:256:32-p8:128:128-p9:192:256:256:32-p10:32:32-p11:32:32-i64:64-v16:16-v24:32-v32:32-v48:64-v96:128-v192:256-v256:256-v512:512-v1024:1024-v2048:2048-n32:64-S32-A5-G1-ni:7:8:9-p32:32:32-v8:8-v16:16-v32:32-v48:32-v64:32-v80:32-v96:32-v112:32-v128:32-v144:32-v160:32-v176:32-v192:32-v208:32-v224:32-v240:32-v256:32-i1:32-i8:8-i16:16-i32:32-i64:32-f16:16-f32:32-f64:32"
14
+ target triple = "amdgcn-amd-amdpal"
15
+
16
+ %dx.types.ResRet.f32 = type { float , float , float , float , i32 }
17
+
18
+ ; Function Attrs: memory(readwrite)
19
+ define dllexport amdgpu_cs void @_amdgpu_cs_main (i32 inreg noundef %globalTable , i32 inreg noundef %userdata4 , <3 x i32 > inreg noundef %WorkgroupId , i32 inreg noundef %MultiDispatchInfo , <3 x i32 > noundef %LocalInvocationId ) #0 !dbg !14 {
20
+ %LocalInvocationId.i0 = extractelement <3 x i32 > %LocalInvocationId , i64 0 , !dbg !28
21
+ %WorkgroupId.i0 = extractelement <3 x i32 > %WorkgroupId , i64 0 , !dbg !28
22
+ %1 = call i64 @llvm.amdgcn.s.getpc (), !dbg !28
23
+ %2 = shl i32 %WorkgroupId.i0 , 6 , !dbg !28
24
+ %3 = add i32 %LocalInvocationId.i0 , %2 , !dbg !28
25
+ #dbg_value(i32 %3 , !29 , !DIExpression (DW_OP_LLVM_fragment, 0 , 32 ), !28 )
26
+ %4 = and i64 %1 , -4294967296 , !dbg !30
27
+ %5 = zext i32 %userdata4 to i64 , !dbg !30
28
+ %6 = or disjoint i64 %4 , %5 , !dbg !30
29
+ %7 = inttoptr i64 %6 to ptr addrspace (4 ), !dbg !30
30
+ call void @llvm.assume (i1 true ) [ "align" (ptr addrspace (4 ) %7 , i32 4 ), "dereferenceable" (ptr addrspace (4 ) %7 , i32 -1 ) ], !dbg !30
31
+ %8 = load <4 x i32 >, ptr addrspace (4 ) %7 , align 4 , !dbg !30 , !invariant.load !2
32
+ %9 = call float @llvm.amdgcn.struct.buffer.load.format.f32 (<4 x i32 > %8 , i32 %3 , i32 0 , i32 0 , i32 0 ), !dbg !30
33
+ #dbg_value(%dx.types.ResRet.f32 poison, !31 , !DIExpression (), !32 )
34
+ %10 = fmul reassoc arcp contract afn float %9 , 2 .000000e+00 , !dbg !33
35
+ #dbg_value(float %10 , !34 , !DIExpression (), !35 )
36
+ call void @llvm.assume (i1 true ) [ "align" (ptr addrspace (4 ) %7 , i32 4 ), "dereferenceable" (ptr addrspace (4 ) %7 , i32 -1 ) ], !dbg !36
37
+ %11 = getelementptr i8 , ptr addrspace (4 ) %7 , i64 32 , !dbg !36
38
+ %.upto01 = insertelement <4 x float > poison, float %10 , i64 0 , !dbg !36
39
+ %12 = shufflevector <4 x float > %.upto01 , <4 x float > poison, <4 x i32 > zeroinitializer , !dbg !36
40
+ %13 = load <4 x i32 >, ptr addrspace (4 ) %11 , align 4 , !dbg !36 , !invariant.load !2
41
+ call void @llvm.amdgcn.struct.buffer.store.format.v4f32 (<4 x float > %12 , <4 x i32 > %13 , i32 %3 , i32 0 , i32 0 , i32 0 ), !dbg !36
42
+ ret void , !dbg !37
43
+ }
44
+
45
+ ; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none)
46
+ declare noundef i64 @llvm.amdgcn.s.getpc () #1
47
+
48
+ ; Function Attrs: nocallback nofree nosync nounwind willreturn memory(inaccessiblemem: write)
49
+ declare void @llvm.assume (i1 noundef) #2
50
+
51
+ ; Function Attrs: nocallback nofree nosync nounwind willreturn memory(write)
52
+ declare void @llvm.amdgcn.struct.buffer.store.format.v4f32 (<4 x float >, <4 x i32 >, i32 , i32 , i32 , i32 immarg) #3
53
+
54
+ ; Function Attrs: nocallback nofree nosync nounwind willreturn memory(read)
55
+ declare float @llvm.amdgcn.struct.buffer.load.format.f32 (<4 x i32 >, i32 , i32 , i32 , i32 immarg) #4
56
+
57
+ attributes #0 = { memory(readwrite) "amdgpu-flat-work-group-size" ="64,64" "amdgpu-memory-bound" ="false" "amdgpu-num-sgpr" ="4294967295" "amdgpu-num-vgpr" ="4294967295" "amdgpu-prealloc-sgpr-spill-vgprs" "amdgpu-unroll-threshold" ="1200" "amdgpu-wave-limiter" ="false" "amdgpu-work-group-info-arg-no" ="3" "denormal-fp-math" ="ieee" "denormal-fp-math-f32" ="preserve-sign" "target-features" =",+wavefrontsize64,+cumode,+enable-flat-scratch" }
58
+ attributes #1 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }
59
+ attributes #2 = { nocallback nofree nosync nounwind willreturn memory(inaccessiblemem: write) }
60
+ attributes #3 = { nocallback nofree nosync nounwind willreturn memory(write) }
61
+ attributes #4 = { nocallback nofree nosync nounwind willreturn memory(read) }
62
+
63
+ !llvm.dbg.cu = !{!0 }
64
+ !llvm.module.flags = !{!12 , !13 }
65
+
66
+ !0 = distinct !DICompileUnit (language: DW_LANG_C_plus_plus, file: !1 , producer: "dxcoob 1.7.2308.16 (52da17e29)" , isOptimized: false , runtimeVersion: 0 , emissionKind: FullDebug, enums: !2 , globals: !3 )
67
+ !1 = !DIFile (filename: "tests\\b asic_var.hlsl" , directory: "" )
68
+ !2 = !{}
69
+ !3 = !{!4 , !10 }
70
+ !4 = distinct !DIGlobalVariableExpression (var: !5 , expr: !DIExpression ())
71
+ !5 = !DIGlobalVariable (name: "u0" , linkageName: "\01 ?u0@@3V?$RWBuffer@M@@A" , scope: !0 , file: !1 , line: 2 , type: !6 , isLocal: false , isDefinition: true )
72
+ !6 = !DICompositeType (tag: DW_TAG_class_type, name: "RWBuffer<float>" , file: !1 , line: 2 , size: 32 , align: 32 , elements: !2 , templateParams: !7 )
73
+ !7 = !{!8 }
74
+ !8 = !DITemplateTypeParameter (name: "element" , type: !9 )
75
+ !9 = !DIBasicType (name: "float" , size: 32 , align: 32 , encoding: DW_ATE_float)
76
+ !10 = distinct !DIGlobalVariableExpression (var: !11 , expr: !DIExpression ())
77
+ !11 = !DIGlobalVariable (name: "u1" , linkageName: "\01 ?u1@@3V?$RWBuffer@M@@A" , scope: !0 , file: !1 , line: 3 , type: !6 , isLocal: false , isDefinition: true )
78
+ !12 = !{i32 2 , !"Dwarf Version" , i32 5 }
79
+ !13 = !{i32 2 , !"Debug Info Version" , i32 3 }
80
+ !14 = distinct !DISubprogram (name: "main" , scope: !1 , file: !1 , line: 7 , type: !15 , scopeLine: 7 , flags: DIFlagPrototyped, spFlags: DISPFlagDefinition, unit: !0 )
81
+ !15 = !DISubroutineType (types: !16 )
82
+ !16 = !{null , !17 }
83
+ !17 = !DIDerivedType (tag: DW_TAG_typedef, name: "uint3" , file: !1 , baseType: !18 )
84
+ !18 = !DICompositeType (tag: DW_TAG_class_type, name: "vector<unsigned int, 3>" , file: !1 , size: 96 , align: 32 , elements: !19 , templateParams: !24 )
85
+ !19 = !{!20 , !22 , !23 }
86
+ !20 = !DIDerivedType (tag: DW_TAG_member, name: "x" , scope: !18 , file: !1 , baseType: !21 , size: 32 , align: 32 , flags: DIFlagPublic)
87
+ !21 = !DIBasicType (name: "unsigned int" , size: 32 , align: 32 , encoding: DW_ATE_unsigned)
88
+ !22 = !DIDerivedType (tag: DW_TAG_member, name: "y" , scope: !18 , file: !1 , baseType: !21 , size: 32 , align: 32 , offset: 32 , flags: DIFlagPublic)
89
+ !23 = !DIDerivedType (tag: DW_TAG_member, name: "z" , scope: !18 , file: !1 , baseType: !21 , size: 32 , align: 32 , offset: 64 , flags: DIFlagPublic)
90
+ !24 = !{!25 , !26 }
91
+ !25 = !DITemplateTypeParameter (name: "element" , type: !21 )
92
+ !26 = !DITemplateValueParameter (name: "element_count" , type: !27 , value: i32 3 )
93
+ !27 = !DIBasicType (name: "int" , size: 32 , align: 32 , encoding: DW_ATE_signed)
94
+ !28 = !DILocation (line: 7 , column: 17 , scope: !14 )
95
+ !29 = !DILocalVariable (name: "dtid" , arg: 1 , scope: !14 , file: !1 , line: 7 , type: !17 )
96
+ !30 = !DILocation (line: 11 , column: 18 , scope: !14 )
97
+ !31 = !DILocalVariable (name: "my_var" , scope: !14 , file: !1 , line: 11 , type: !9 )
98
+ !32 = !DILocation (line: 11 , column: 9 , scope: !14 )
99
+ !33 = !DILocation (line: 14 , column: 26 , scope: !14 )
100
+ !34 = !DILocalVariable (name: "my_var2" , scope: !14 , file: !1 , line: 14 , type: !9 )
101
+ !35 = !DILocation (line: 14 , column: 9 , scope: !14 )
102
+ !36 = !DILocation (line: 17 , column: 14 , scope: !14 )
103
+ !37 = !DILocation (line: 19 , column: 1 , scope: !14 )
0 commit comments