1 ; RUN: llc -mtriple=nvptx64-nvidia-cuda < %s | FileCheck %s
3 @GLOBAL = addrspace(1) externally_initialized global i32 0, align 4, !dbg !0
4 @SHARED = addrspace(3) externally_initialized global i32 undef, align 4, !dbg !6
6 define void @test(float, float*, float*, i32) !dbg !17 {
7 %5 = alloca float, align 4
8 %6 = alloca float*, align 8
9 %7 = alloca float*, align 8
10 %8 = alloca i32, align 4
11 store float %0, float* %5, align 4
12 call void @llvm.dbg.declare(metadata float* %5, metadata !22, metadata !DIExpression()), !dbg !23
13 store float* %1, float** %6, align 8
14 call void @llvm.dbg.declare(metadata float** %6, metadata !24, metadata !DIExpression()), !dbg !25
15 store float* %2, float** %7, align 8
16 call void @llvm.dbg.declare(metadata float** %7, metadata !26, metadata !DIExpression()), !dbg !27
17 store i32 %3, i32* %8, align 4
18 call void @llvm.dbg.declare(metadata i32* %8, metadata !28, metadata !DIExpression()), !dbg !29
19 %9 = load float, float* %5, align 4, !dbg !30
20 %10 = load float*, float** %6, align 8, !dbg !31
21 %11 = load i32, i32* %8, align 4, !dbg !32
22 %12 = sext i32 %11 to i64, !dbg !31
23 %13 = getelementptr inbounds float, float* %10, i64 %12, !dbg !31
24 %14 = load float, float* %13, align 4, !dbg !31
25 %15 = fmul contract float %9, %14, !dbg !33
26 %16 = load float*, float** %7, align 8, !dbg !34
27 %17 = load i32, i32* %8, align 4, !dbg !35
28 %18 = sext i32 %17 to i64, !dbg !34
29 %19 = getelementptr inbounds float, float* %16, i64 %18, !dbg !34
30 store float %15, float* %19, align 4, !dbg !36
31 store i32 0, i32* addrspacecast (i32 addrspace(1)* @GLOBAL to i32*), align 4, !dbg !37
32 store i32 0, i32* addrspacecast (i32 addrspace(3)* @SHARED to i32*), align 4, !dbg !38
36 ; Function Attrs: nounwind readnone speculatable
37 declare void @llvm.dbg.declare(metadata, metadata, metadata)
40 !nvvm.annotations = !{!10}
41 !llvm.module.flags = !{!11, !12, !13, !14, !15}
44 !0 = !DIGlobalVariableExpression(var: !1, expr: !DIExpression())
45 !1 = distinct !DIGlobalVariable(name: "GLOBAL", scope: !2, file: !8, line: 3, type: !9, isLocal: false, isDefinition: true)
46 !2 = distinct !DICompileUnit(language: DW_LANG_C_plus_plus, file: !3, producer: "clang version 9.0.0 (trunk 351969) (llvm/trunk 351973)", isOptimized: false, runtimeVersion: 0, emissionKind: FullDebug, enums: !4, globals: !5, nameTableKind: None)
47 !3 = !DIFile(filename: "new.cc", directory: "/tmp")
50 !6 = !DIGlobalVariableExpression(var: !7, expr: !DIExpression(DW_OP_constu, 8, DW_OP_swap, DW_OP_xderef))
51 !7 = distinct !DIGlobalVariable(name: "SHARED", scope: !2, file: !8, line: 4, type: !9, isLocal: false, isDefinition: true)
52 !8 = !DIFile(filename: "test.cu", directory: "/tmp")
53 !9 = !DIBasicType(name: "int", size: 32, encoding: DW_ATE_signed)
54 !10 = !{void (float, float*, float*, i32)* @test, !"kernel", i32 1}
55 !11 = !{i32 2, !"Dwarf Version", i32 2}
56 !12 = !{i32 2, !"Debug Info Version", i32 3}
57 !13 = !{i32 1, !"wchar_size", i32 4}
58 !14 = !{i32 4, !"nvvm-reflect-ftz", i32 0}
59 !15 = !{i32 7, !"PIC Level", i32 2}
60 !16 = !{!"clang version 9.0.0 (trunk 351969) (llvm/trunk 351973)"}
61 !17 = distinct !DISubprogram(name: "test", linkageName: "test", scope: !8, file: !8, line: 6, type: !18, scopeLine: 6, flags: DIFlagPrototyped, spFlags: DISPFlagDefinition, unit: !2, retainedNodes: !4)
62 !18 = !DISubroutineType(types: !19)
63 !19 = !{null, !20, !21, !21, !9}
64 !20 = !DIBasicType(name: "float", size: 32, encoding: DW_ATE_float)
65 !21 = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: !20, size: 64)
66 !22 = !DILocalVariable(name: "a", arg: 1, scope: !17, file: !8, line: 6, type: !20)
67 !23 = !DILocation(line: 6, column: 41, scope: !17)
68 !24 = !DILocalVariable(name: "x", arg: 2, scope: !17, file: !8, line: 6, type: !21)
69 !25 = !DILocation(line: 6, column: 51, scope: !17)
70 !26 = !DILocalVariable(name: "y", arg: 3, scope: !17, file: !8, line: 6, type: !21)
71 !27 = !DILocation(line: 6, column: 61, scope: !17)
72 !28 = !DILocalVariable(name: "i", arg: 4, scope: !17, file: !8, line: 6, type: !9)
73 !29 = !DILocation(line: 6, column: 68, scope: !17)
74 !30 = !DILocation(line: 7, column: 10, scope: !17)
75 !31 = !DILocation(line: 7, column: 14, scope: !17)
76 !32 = !DILocation(line: 7, column: 16, scope: !17)
77 !33 = !DILocation(line: 7, column: 12, scope: !17)
78 !34 = !DILocation(line: 7, column: 3, scope: !17)
79 !35 = !DILocation(line: 7, column: 5, scope: !17)
80 !36 = !DILocation(line: 7, column: 8, scope: !17)
81 !37 = !DILocation(line: 8, column: 10, scope: !17)
82 !38 = !DILocation(line: 9, column: 10, scope: !17)
83 !39 = !DILocation(line: 10, column: 1, scope: !17)
85 ; CHECK: .section .debug_abbrev
87 ; CHECK-NEXT: .b8 1 // Abbreviation Code
88 ; CHECK-NEXT: .b8 17 // DW_TAG_compile_unit
89 ; CHECK-NEXT: .b8 1 // DW_CHILDREN_yes
90 ; CHECK-NEXT: .b8 37 // DW_AT_producer
91 ; CHECK-NEXT: .b8 8 // DW_FORM_string
92 ; CHECK-NEXT: .b8 19 // DW_AT_language
93 ; CHECK-NEXT: .b8 5 // DW_FORM_data2
94 ; CHECK-NEXT: .b8 3 // DW_AT_name
95 ; CHECK-NEXT: .b8 8 // DW_FORM_string
96 ; CHECK-NEXT: .b8 16 // DW_AT_stmt_list
97 ; CHECK-NEXT: .b8 6 // DW_FORM_data4
98 ; CHECK-NEXT: .b8 27 // DW_AT_comp_dir
99 ; CHECK-NEXT: .b8 8 // DW_FORM_string
100 ; CHECK-NEXT: .b8 17 // DW_AT_low_pc
101 ; CHECK-NEXT: .b8 1 // DW_FORM_addr
102 ; CHECK-NEXT: .b8 18 // DW_AT_high_pc
103 ; CHECK-NEXT: .b8 1 // DW_FORM_addr
104 ; CHECK-NEXT: .b8 0 // EOM(1)
105 ; CHECK-NEXT: .b8 0 // EOM(2)
106 ; CHECK-NEXT: .b8 2 // Abbreviation Code
107 ; CHECK-NEXT: .b8 52 // DW_TAG_variable
108 ; CHECK-NEXT: .b8 0 // DW_CHILDREN_no
109 ; CHECK-NEXT: .b8 3 // DW_AT_name
110 ; CHECK-NEXT: .b8 8 // DW_FORM_string
111 ; CHECK-NEXT: .b8 73 // DW_AT_type
112 ; CHECK-NEXT: .b8 19 // DW_FORM_ref4
113 ; CHECK-NEXT: .b8 63 // DW_AT_external
114 ; CHECK-NEXT: .b8 12 // DW_FORM_flag
115 ; CHECK-NEXT: .b8 58 // DW_AT_decl_file
116 ; CHECK-NEXT: .b8 11 // DW_FORM_data1
117 ; CHECK-NEXT: .b8 59 // DW_AT_decl_line
118 ; CHECK-NEXT: .b8 11 // DW_FORM_data1
119 ; CHECK-NEXT: .b8 51 // DW_AT_address_class
120 ; CHECK-NEXT: .b8 11 // DW_FORM_data1
121 ; CHECK-NEXT: .b8 2 // DW_AT_location
122 ; CHECK-NEXT: .b8 10 // DW_FORM_block1
123 ; CHECK-NEXT: .b8 0 // EOM(1)
124 ; CHECK-NEXT: .b8 0 // EOM(2)
125 ; CHECK-NEXT: .b8 3 // Abbreviation Code
126 ; CHECK-NEXT: .b8 36 // DW_TAG_base_type
127 ; CHECK-NEXT: .b8 0 // DW_CHILDREN_no
128 ; CHECK-NEXT: .b8 3 // DW_AT_name
129 ; CHECK-NEXT: .b8 8 // DW_FORM_string
130 ; CHECK-NEXT: .b8 62 // DW_AT_encoding
131 ; CHECK-NEXT: .b8 11 // DW_FORM_data1
132 ; CHECK-NEXT: .b8 11 // DW_AT_byte_size
133 ; CHECK-NEXT: .b8 11 // DW_FORM_data1
134 ; CHECK-NEXT: .b8 0 // EOM(1)
135 ; CHECK-NEXT: .b8 0 // EOM(2)
136 ; CHECK-NEXT: .b8 4 // Abbreviation Code
137 ; CHECK-NEXT: .b8 46 // DW_TAG_subprogram
138 ; CHECK-NEXT: .b8 1 // DW_CHILDREN_yes
139 ; CHECK-NEXT: .b8 17 // DW_AT_low_pc
140 ; CHECK-NEXT: .b8 1 // DW_FORM_addr
141 ; CHECK-NEXT: .b8 18 // DW_AT_high_pc
142 ; CHECK-NEXT: .b8 1 // DW_FORM_addr
143 ; CHECK-NEXT: .b8 64 // DW_AT_frame_base
144 ; CHECK-NEXT: .b8 10 // DW_FORM_block1
145 ; CHECK-NEXT: .b8 135 // DW_AT_MIPS_linkage_name
147 ; CHECK-NEXT: .b8 8 // DW_FORM_string
148 ; CHECK-NEXT: .b8 3 // DW_AT_name
149 ; CHECK-NEXT: .b8 8 // DW_FORM_string
150 ; CHECK-NEXT: .b8 58 // DW_AT_decl_file
151 ; CHECK-NEXT: .b8 11 // DW_FORM_data1
152 ; CHECK-NEXT: .b8 59 // DW_AT_decl_line
153 ; CHECK-NEXT: .b8 11 // DW_FORM_data1
154 ; CHECK-NEXT: .b8 63 // DW_AT_external
155 ; CHECK-NEXT: .b8 12 // DW_FORM_flag
156 ; CHECK-NEXT: .b8 0 // EOM(1)
157 ; CHECK-NEXT: .b8 0 // EOM(2)
158 ; CHECK-NEXT: .b8 5 // Abbreviation Code
159 ; CHECK-NEXT: .b8 5 // DW_TAG_formal_parameter
160 ; CHECK-NEXT: .b8 0 // DW_CHILDREN_no
161 ; CHECK-NEXT: .b8 3 // DW_AT_name
162 ; CHECK-NEXT: .b8 8 // DW_FORM_string
163 ; CHECK-NEXT: .b8 58 // DW_AT_decl_file
164 ; CHECK-NEXT: .b8 11 // DW_FORM_data1
165 ; CHECK-NEXT: .b8 59 // DW_AT_decl_line
166 ; CHECK-NEXT: .b8 11 // DW_FORM_data1
167 ; CHECK-NEXT: .b8 73 // DW_AT_type
168 ; CHECK-NEXT: .b8 19 // DW_FORM_ref4
169 ; CHECK-NEXT: .b8 0 // EOM(1)
170 ; CHECK-NEXT: .b8 0 // EOM(2)
171 ; CHECK-NEXT: .b8 0 // EOM(3)
173 ; CHECK-NEXT: .section .debug_info
175 ; CHECK-NEXT: .b32 217 // Length of Unit
176 ; CHECK-NEXT: .b8 2 // DWARF version number
178 ; CHECK-NEXT: .b32 .debug_abbrev // Offset Into Abbrev. Section
179 ; CHECK-NEXT: .b8 8 // Address Size (in bytes)
180 ; CHECK-NEXT: .b8 1 // Abbrev [1] 0xb:0xd2 DW_TAG_compile_unit
181 ; CHECK-NEXT: .b8 99 // DW_AT_producer
182 ; CHECK-NEXT: .b8 108
184 ; CHECK-NEXT: .b8 110
185 ; CHECK-NEXT: .b8 103
187 ; CHECK-NEXT: .b8 118
188 ; CHECK-NEXT: .b8 101
189 ; CHECK-NEXT: .b8 114
190 ; CHECK-NEXT: .b8 115
191 ; CHECK-NEXT: .b8 105
192 ; CHECK-NEXT: .b8 111
193 ; CHECK-NEXT: .b8 110
202 ; CHECK-NEXT: .b8 116
203 ; CHECK-NEXT: .b8 114
204 ; CHECK-NEXT: .b8 117
205 ; CHECK-NEXT: .b8 110
206 ; CHECK-NEXT: .b8 107
217 ; CHECK-NEXT: .b8 108
218 ; CHECK-NEXT: .b8 108
219 ; CHECK-NEXT: .b8 118
220 ; CHECK-NEXT: .b8 109
222 ; CHECK-NEXT: .b8 116
223 ; CHECK-NEXT: .b8 114
224 ; CHECK-NEXT: .b8 117
225 ; CHECK-NEXT: .b8 110
226 ; CHECK-NEXT: .b8 107
236 ; CHECK-NEXT: .b8 4 // DW_AT_language
238 ; CHECK-NEXT: .b8 110 // DW_AT_name
239 ; CHECK-NEXT: .b8 101
240 ; CHECK-NEXT: .b8 119
245 ; CHECK-NEXT: .b32 .debug_line // DW_AT_stmt_list
246 ; CHECK-NEXT: .b8 47 // DW_AT_comp_dir
247 ; CHECK-NEXT: .b8 116
248 ; CHECK-NEXT: .b8 109
249 ; CHECK-NEXT: .b8 112
251 ; CHECK-NEXT: .b64 Lfunc_begin0 // DW_AT_low_pc
252 ; CHECK-NEXT: .b64 Lfunc_end0 // DW_AT_high_pc
253 ; CHECK-NEXT: .b8 2 // Abbrev [2] 0x65:0x1a DW_TAG_variable
254 ; CHECK-NEXT: .b8 71 // DW_AT_name
261 ; CHECK-NEXT: .b32 127 // DW_AT_type
262 ; CHECK-NEXT: .b8 1 // DW_AT_external
263 ; CHECK-NEXT: .b8 1 // DW_AT_decl_file
264 ; CHECK-NEXT: .b8 3 // DW_AT_decl_line
265 ; CHECK-NEXT: .b8 5 // DW_AT_address_class
266 ; CHECK-NEXT: .b8 9 // DW_AT_location
268 ; CHECK-NEXT: .b64 GLOBAL
269 ; CHECK-NEXT: .b8 3 // Abbrev [3] 0x7f:0x7 DW_TAG_base_type
270 ; CHECK-NEXT: .b8 105 // DW_AT_name
271 ; CHECK-NEXT: .b8 110
272 ; CHECK-NEXT: .b8 116
274 ; CHECK-NEXT: .b8 5 // DW_AT_encoding
275 ; CHECK-NEXT: .b8 4 // DW_AT_byte_size
276 ; CHECK-NEXT: .b8 2 // Abbrev [2] 0x86:0x1a DW_TAG_variable
277 ; CHECK-NEXT: .b8 83 // DW_AT_name
284 ; CHECK-NEXT: .b32 127 // DW_AT_type
285 ; CHECK-NEXT: .b8 1 // DW_AT_external
286 ; CHECK-NEXT: .b8 1 // DW_AT_decl_file
287 ; CHECK-NEXT: .b8 4 // DW_AT_decl_line
288 ; CHECK-NEXT: .b8 8 // DW_AT_address_class
289 ; CHECK-NEXT: .b8 9 // DW_AT_location
291 ; CHECK-NEXT: .b64 SHARED
292 ; CHECK-NEXT: .b8 4 // Abbrev [4] 0xa0:0x33 DW_TAG_subprogram
293 ; CHECK-NEXT: .b64 Lfunc_begin0 // DW_AT_low_pc
294 ; CHECK-NEXT: .b64 Lfunc_end0 // DW_AT_high_pc
295 ; CHECK-NEXT: .b8 1 // DW_AT_frame_base
296 ; CHECK-NEXT: .b8 156
297 ; CHECK-NEXT: .b8 116 // DW_AT_MIPS_linkage_name
298 ; CHECK-NEXT: .b8 101
299 ; CHECK-NEXT: .b8 115
300 ; CHECK-NEXT: .b8 116
302 ; CHECK-NEXT: .b8 116 // DW_AT_name
303 ; CHECK-NEXT: .b8 101
304 ; CHECK-NEXT: .b8 115
305 ; CHECK-NEXT: .b8 116
307 ; CHECK-NEXT: .b8 1 // DW_AT_decl_file
308 ; CHECK-NEXT: .b8 6 // DW_AT_decl_line
309 ; CHECK-NEXT: .b8 1 // DW_AT_external
310 ; CHECK-NEXT: .b8 5 // Abbrev [5] 0xc0:0x9 DW_TAG_formal_parameter
311 ; CHECK-NEXT: .b8 97 // DW_AT_name
313 ; CHECK-NEXT: .b8 1 // DW_AT_decl_file
314 ; CHECK-NEXT: .b8 6 // DW_AT_decl_line
315 ; CHECK-NEXT: .b32 211 // DW_AT_type
316 ; CHECK-NEXT: .b8 5 // Abbrev [5] 0xc9:0x9 DW_TAG_formal_parameter
317 ; CHECK-NEXT: .b8 105 // DW_AT_name
319 ; CHECK-NEXT: .b8 1 // DW_AT_decl_file
320 ; CHECK-NEXT: .b8 6 // DW_AT_decl_line
321 ; CHECK-NEXT: .b32 127 // DW_AT_type
322 ; CHECK-NEXT: .b8 0 // End Of Children Mark
323 ; CHECK-NEXT: .b8 3 // Abbrev [3] 0xd3:0x9 DW_TAG_base_type
324 ; CHECK-NEXT: .b8 102 // DW_AT_name
325 ; CHECK-NEXT: .b8 108
326 ; CHECK-NEXT: .b8 111
328 ; CHECK-NEXT: .b8 116
330 ; CHECK-NEXT: .b8 4 // DW_AT_encoding
331 ; CHECK-NEXT: .b8 4 // DW_AT_byte_size
332 ; CHECK-NEXT: .b8 0 // End Of Children Mark
334 ; CHECK-NEXT: .section .debug_macinfo
336 ; CHECK-NEXT: .b8 0 // End Of Macro List Mark