1 ; RUN: llc -mtriple=nvptx64-nvidia-cuda < %s | FileCheck %s
2 ; RUN: %if ptxas %{ llc -mtriple=nvptx64-nvidia-cuda < %s | %ptxas-verify %}
4 @GLOBAL = addrspace(1) externally_initialized global i32 0, align 4, !dbg !0
5 @SHARED = addrspace(3) externally_initialized global i32 undef, align 4, !dbg !6
7 define void @test(float, ptr, ptr, i32) !dbg !17 {
8 %5 = alloca float, align 4
9 %6 = alloca ptr, align 8
10 %7 = alloca ptr, align 8
11 %8 = alloca i32, align 4
12 store float %0, ptr %5, align 4
13 call void @llvm.dbg.declare(metadata ptr %5, metadata !22, metadata !DIExpression()), !dbg !23
14 store ptr %1, ptr %6, align 8
15 call void @llvm.dbg.declare(metadata ptr %6, metadata !24, metadata !DIExpression()), !dbg !25
16 store ptr %2, ptr %7, align 8
17 call void @llvm.dbg.declare(metadata ptr %7, metadata !26, metadata !DIExpression()), !dbg !27
18 store i32 %3, ptr %8, align 4
19 call void @llvm.dbg.declare(metadata ptr %8, metadata !28, metadata !DIExpression()), !dbg !29
20 %9 = load float, ptr %5, align 4, !dbg !30
21 %10 = load ptr, ptr %6, align 8, !dbg !31
22 %11 = load i32, ptr %8, align 4, !dbg !32
23 %12 = sext i32 %11 to i64, !dbg !31
24 %13 = getelementptr inbounds float, ptr %10, i64 %12, !dbg !31
25 %14 = load float, ptr %13, align 4, !dbg !31
26 %15 = fmul contract float %9, %14, !dbg !33
27 %16 = load ptr, ptr %7, align 8, !dbg !34
28 %17 = load i32, ptr %8, align 4, !dbg !35
29 %18 = sext i32 %17 to i64, !dbg !34
30 %19 = getelementptr inbounds float, ptr %16, i64 %18, !dbg !34
31 store float %15, ptr %19, align 4, !dbg !36
32 store i32 0, ptr addrspacecast (ptr addrspace(1) @GLOBAL to ptr), align 4, !dbg !37
33 store i32 0, ptr addrspacecast (ptr addrspace(3) @SHARED to ptr), align 4, !dbg !38
37 ; Function Attrs: nounwind readnone speculatable
38 declare void @llvm.dbg.declare(metadata, metadata, metadata)
41 !nvvm.annotations = !{!10}
42 !llvm.module.flags = !{!11, !12, !13, !14, !15}
45 !0 = !DIGlobalVariableExpression(var: !1, expr: !DIExpression())
46 !1 = distinct !DIGlobalVariable(name: "GLOBAL", scope: !2, file: !8, line: 3, type: !9, isLocal: false, isDefinition: true)
47 !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)
48 !3 = !DIFile(filename: "new.cc", directory: "/tmp")
51 !6 = !DIGlobalVariableExpression(var: !7, expr: !DIExpression(DW_OP_constu, 8, DW_OP_swap, DW_OP_xderef))
52 !7 = distinct !DIGlobalVariable(name: "SHARED", scope: !2, file: !8, line: 4, type: !9, isLocal: false, isDefinition: true)
53 !8 = !DIFile(filename: "test.cu", directory: "/tmp")
54 !9 = !DIBasicType(name: "int", size: 32, encoding: DW_ATE_signed)
55 !10 = !{ptr @test, !"kernel", i32 1}
56 !11 = !{i32 2, !"Dwarf Version", i32 2}
57 !12 = !{i32 2, !"Debug Info Version", i32 3}
58 !13 = !{i32 1, !"wchar_size", i32 4}
59 !14 = !{i32 4, !"nvvm-reflect-ftz", i32 0}
60 !15 = !{i32 7, !"PIC Level", i32 2}
61 !16 = !{!"clang version 9.0.0 (trunk 351969) (llvm/trunk 351973)"}
62 !17 = distinct !DISubprogram(name: "test", linkageName: "test", scope: !8, file: !8, line: 6, type: !18, scopeLine: 6, flags: DIFlagPrototyped, spFlags: DISPFlagDefinition, unit: !2, retainedNodes: !40)
63 !18 = !DISubroutineType(types: !19)
64 !19 = !{null, !20, !21, !21, !9}
65 !20 = !DIBasicType(name: "float", size: 32, encoding: DW_ATE_float)
66 !21 = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: !20, size: 64)
67 !22 = !DILocalVariable(name: "a", arg: 1, scope: !17, file: !8, line: 6, type: !20)
68 !23 = !DILocation(line: 6, column: 41, scope: !17)
69 !24 = !DILocalVariable(name: "x", arg: 2, scope: !17, file: !8, line: 6, type: !21)
70 !25 = !DILocation(line: 6, column: 51, scope: !17)
71 !26 = !DILocalVariable(name: "y", arg: 3, scope: !17, file: !8, line: 6, type: !21)
72 !27 = !DILocation(line: 6, column: 61, scope: !17)
73 !28 = !DILocalVariable(name: "i", arg: 4, scope: !17, file: !8, line: 6, type: !9)
74 !29 = !DILocation(line: 6, column: 68, scope: !17)
75 !30 = !DILocation(line: 7, column: 10, scope: !17)
76 !31 = !DILocation(line: 7, column: 14, scope: !17)
77 !32 = !DILocation(line: 7, column: 16, scope: !17)
78 !33 = !DILocation(line: 7, column: 12, scope: !17)
79 !34 = !DILocation(line: 7, column: 3, scope: !17)
80 !35 = !DILocation(line: 7, column: 5, scope: !17)
81 !36 = !DILocation(line: 7, column: 8, scope: !17)
82 !37 = !DILocation(line: 8, column: 10, scope: !17)
83 !38 = !DILocation(line: 9, column: 10, scope: !17)
84 !39 = !DILocation(line: 10, column: 1, scope: !17)
85 !40 = !{!22, !24, !26, !28}
87 ; CHECK: .section .debug_abbrev
89 ; CHECK-NEXT:.b8 1 // Abbreviation Code
90 ; CHECK-NEXT:.b8 17 // DW_TAG_compile_unit
91 ; CHECK-NEXT:.b8 1 // DW_CHILDREN_yes
92 ; CHECK-NEXT:.b8 37 // DW_AT_producer
93 ; CHECK-NEXT:.b8 8 // DW_FORM_string
94 ; CHECK-NEXT:.b8 19 // DW_AT_language
95 ; CHECK-NEXT:.b8 5 // DW_FORM_data2
96 ; CHECK-NEXT:.b8 3 // DW_AT_name
97 ; CHECK-NEXT:.b8 8 // DW_FORM_string
98 ; CHECK-NEXT:.b8 16 // DW_AT_stmt_list
99 ; CHECK-NEXT:.b8 6 // DW_FORM_data4
100 ; CHECK-NEXT:.b8 27 // DW_AT_comp_dir
101 ; CHECK-NEXT:.b8 8 // DW_FORM_string
102 ; CHECK-NEXT:.b8 17 // DW_AT_low_pc
103 ; CHECK-NEXT:.b8 1 // DW_FORM_addr
104 ; CHECK-NEXT:.b8 18 // DW_AT_high_pc
105 ; CHECK-NEXT:.b8 1 // DW_FORM_addr
106 ; CHECK-NEXT:.b8 0 // EOM(1)
107 ; CHECK-NEXT:.b8 0 // EOM(2)
108 ; CHECK-NEXT:.b8 2 // Abbreviation Code
109 ; CHECK-NEXT:.b8 52 // DW_TAG_variable
110 ; CHECK-NEXT:.b8 0 // DW_CHILDREN_no
111 ; CHECK-NEXT:.b8 3 // DW_AT_name
112 ; CHECK-NEXT:.b8 8 // DW_FORM_string
113 ; CHECK-NEXT:.b8 73 // DW_AT_type
114 ; CHECK-NEXT:.b8 19 // DW_FORM_ref4
115 ; CHECK-NEXT:.b8 63 // DW_AT_external
116 ; CHECK-NEXT:.b8 12 // DW_FORM_flag
117 ; CHECK-NEXT:.b8 58 // DW_AT_decl_file
118 ; CHECK-NEXT:.b8 11 // DW_FORM_data1
119 ; CHECK-NEXT:.b8 59 // DW_AT_decl_line
120 ; CHECK-NEXT:.b8 11 // DW_FORM_data1
121 ; CHECK-NEXT:.b8 51 // DW_AT_address_class
122 ; CHECK-NEXT:.b8 11 // DW_FORM_data1
123 ; CHECK-NEXT:.b8 2 // DW_AT_location
124 ; CHECK-NEXT:.b8 10 // DW_FORM_block1
125 ; CHECK-NEXT:.b8 0 // EOM(1)
126 ; CHECK-NEXT:.b8 0 // EOM(2)
127 ; CHECK-NEXT:.b8 3 // Abbreviation Code
128 ; CHECK-NEXT:.b8 36 // DW_TAG_base_type
129 ; CHECK-NEXT:.b8 0 // DW_CHILDREN_no
130 ; CHECK-NEXT:.b8 3 // DW_AT_name
131 ; CHECK-NEXT:.b8 8 // DW_FORM_string
132 ; CHECK-NEXT:.b8 62 // DW_AT_encoding
133 ; CHECK-NEXT:.b8 11 // DW_FORM_data1
134 ; CHECK-NEXT:.b8 11 // DW_AT_byte_size
135 ; CHECK-NEXT:.b8 11 // DW_FORM_data1
136 ; CHECK-NEXT:.b8 0 // EOM(1)
137 ; CHECK-NEXT:.b8 0 // EOM(2)
138 ; CHECK-NEXT:.b8 4 // Abbreviation Code
139 ; CHECK-NEXT:.b8 46 // DW_TAG_subprogram
140 ; CHECK-NEXT:.b8 1 // DW_CHILDREN_yes
141 ; CHECK-NEXT:.b8 17 // DW_AT_low_pc
142 ; CHECK-NEXT:.b8 1 // DW_FORM_addr
143 ; CHECK-NEXT:.b8 18 // DW_AT_high_pc
144 ; CHECK-NEXT:.b8 1 // DW_FORM_addr
145 ; CHECK-NEXT:.b8 64 // DW_AT_frame_base
146 ; CHECK-NEXT:.b8 10 // DW_FORM_block1
147 ; CHECK-NEXT:.b8 135 // DW_AT_MIPS_linkage_name
149 ; CHECK-NEXT:.b8 8 // DW_FORM_string
150 ; CHECK-NEXT:.b8 3 // DW_AT_name
151 ; CHECK-NEXT:.b8 8 // DW_FORM_string
152 ; CHECK-NEXT:.b8 58 // DW_AT_decl_file
153 ; CHECK-NEXT:.b8 11 // DW_FORM_data1
154 ; CHECK-NEXT:.b8 59 // DW_AT_decl_line
155 ; CHECK-NEXT:.b8 11 // DW_FORM_data1
156 ; CHECK-NEXT:.b8 63 // DW_AT_external
157 ; CHECK-NEXT:.b8 12 // DW_FORM_flag
158 ; CHECK-NEXT:.b8 0 // EOM(1)
159 ; CHECK-NEXT:.b8 0 // EOM(2)
160 ; CHECK-NEXT:.b8 5 // Abbreviation Code
161 ; CHECK-NEXT:.b8 5 // DW_TAG_formal_parameter
162 ; CHECK-NEXT:.b8 0 // DW_CHILDREN_no
163 ; CHECK-NEXT:.b8 3 // DW_AT_name
164 ; CHECK-NEXT:.b8 8 // DW_FORM_string
165 ; CHECK-NEXT:.b8 58 // DW_AT_decl_file
166 ; CHECK-NEXT:.b8 11 // DW_FORM_data1
167 ; CHECK-NEXT:.b8 59 // DW_AT_decl_line
168 ; CHECK-NEXT:.b8 11 // DW_FORM_data1
169 ; CHECK-NEXT:.b8 73 // DW_AT_type
170 ; CHECK-NEXT:.b8 19 // DW_FORM_ref4
171 ; CHECK-NEXT:.b8 0 // EOM(1)
172 ; CHECK-NEXT:.b8 0 // EOM(2)
173 ; CHECK-NEXT:.b8 6 // Abbreviation Code
174 ; CHECK-NEXT:.b8 15 // DW_TAG_pointer_type
175 ; CHECK-NEXT:.b8 0 // DW_CHILDREN_no
176 ; CHECK-NEXT:.b8 73 // DW_AT_type
177 ; CHECK-NEXT:.b8 19 // DW_FORM_ref4
178 ; CHECK-NEXT:.b8 0 // EOM(1)
179 ; CHECK-NEXT:.b8 0 // EOM(2)
180 ; CHECK-NEXT:.b8 0 // EOM(3)
182 ; CHECK-NEXT: .section .debug_info
184 ; CHECK-NEXT:.b32 240 // Length of Unit
185 ; CHECK-NEXT:.b8 2 // DWARF version number
187 ; CHECK-NEXT:.b32 .debug_abbrev // Offset Into Abbrev. Section
188 ; CHECK-NEXT:.b8 8 // Address Size (in bytes)
189 ; CHECK-NEXT:.b8 1 // Abbrev [1] 0xb:0xe9 DW_TAG_compile_unit
190 ; CHECK-NEXT:.b8 99 // DW_AT_producer
245 ; CHECK-NEXT:.b8 4 // DW_AT_language
247 ; CHECK-NEXT:.b8 110 // DW_AT_name
254 ; CHECK-NEXT:.b32 .debug_line // DW_AT_stmt_list
255 ; CHECK-NEXT:.b8 47 // DW_AT_comp_dir
260 ; CHECK-NEXT:.b64 $L__func_begin0 // DW_AT_low_pc
261 ; CHECK-NEXT:.b64 $L__func_end0 // DW_AT_high_pc
262 ; CHECK-NEXT:.b8 2 // Abbrev [2] 0x65:0x1a DW_TAG_variable
263 ; CHECK-NEXT:.b8 71 // DW_AT_name
270 ; CHECK-NEXT:.b32 127 // DW_AT_type
271 ; CHECK-NEXT:.b8 1 // DW_AT_external
272 ; CHECK-NEXT:.b8 1 // DW_AT_decl_file
273 ; CHECK-NEXT:.b8 3 // DW_AT_decl_line
274 ; CHECK-NEXT:.b8 5 // DW_AT_address_class
275 ; CHECK-NEXT:.b8 9 // DW_AT_location
277 ; CHECK-NEXT:.b64 GLOBAL
278 ; CHECK-NEXT:.b8 3 // Abbrev [3] 0x7f:0x7 DW_TAG_base_type
279 ; CHECK-NEXT:.b8 105 // DW_AT_name
283 ; CHECK-NEXT:.b8 5 // DW_AT_encoding
284 ; CHECK-NEXT:.b8 4 // DW_AT_byte_size
285 ; CHECK-NEXT:.b8 2 // Abbrev [2] 0x86:0x1a DW_TAG_variable
286 ; CHECK-NEXT:.b8 83 // DW_AT_name
293 ; CHECK-NEXT:.b32 127 // DW_AT_type
294 ; CHECK-NEXT:.b8 1 // DW_AT_external
295 ; CHECK-NEXT:.b8 1 // DW_AT_decl_file
296 ; CHECK-NEXT:.b8 4 // DW_AT_decl_line
297 ; CHECK-NEXT:.b8 8 // DW_AT_address_class
298 ; CHECK-NEXT:.b8 9 // DW_AT_location
300 ; CHECK-NEXT:.b64 SHARED
301 ; CHECK-NEXT:.b8 4 // Abbrev [4] 0xa0:0x45 DW_TAG_subprogram
302 ; CHECK-NEXT:.b64 $L__func_begin0 // DW_AT_low_pc
303 ; CHECK-NEXT:.b64 $L__func_end0 // DW_AT_high_pc
304 ; CHECK-NEXT:.b8 1 // DW_AT_frame_base
306 ; CHECK-NEXT:.b8 116 // DW_AT_MIPS_linkage_name
311 ; CHECK-NEXT:.b8 116 // DW_AT_name
316 ; CHECK-NEXT:.b8 1 // DW_AT_decl_file
317 ; CHECK-NEXT:.b8 6 // DW_AT_decl_line
318 ; CHECK-NEXT:.b8 1 // DW_AT_external
319 ; CHECK-NEXT:.b8 5 // Abbrev [5] 0xc0:0x9 DW_TAG_formal_parameter
320 ; CHECK-NEXT:.b8 97 // DW_AT_name
322 ; CHECK-NEXT:.b8 1 // DW_AT_decl_file
323 ; CHECK-NEXT:.b8 6 // DW_AT_decl_line
324 ; CHECK-NEXT:.b32 229 // DW_AT_type
325 ; CHECK-NEXT:.b8 5 // Abbrev [5] 0xc9:0x9 DW_TAG_formal_parameter
326 ; CHECK-NEXT:.b8 120 // DW_AT_name
328 ; CHECK-NEXT:.b8 1 // DW_AT_decl_file
329 ; CHECK-NEXT:.b8 6 // DW_AT_decl_line
330 ; CHECK-NEXT:.b32 238 // DW_AT_type
331 ; CHECK-NEXT:.b8 5 // Abbrev [5] 0xd2:0x9 DW_TAG_formal_parameter
332 ; CHECK-NEXT:.b8 121 // DW_AT_name
334 ; CHECK-NEXT:.b8 1 // DW_AT_decl_file
335 ; CHECK-NEXT:.b8 6 // DW_AT_decl_line
336 ; CHECK-NEXT:.b32 238 // DW_AT_type
337 ; CHECK-NEXT:.b8 5 // Abbrev [5] 0xdb:0x9 DW_TAG_formal_parameter
338 ; CHECK-NEXT:.b8 105 // DW_AT_name
340 ; CHECK-NEXT:.b8 1 // DW_AT_decl_file
341 ; CHECK-NEXT:.b8 6 // DW_AT_decl_line
342 ; CHECK-NEXT:.b32 127 // DW_AT_type
343 ; CHECK-NEXT:.b8 0 // End Of Children Mark
344 ; CHECK-NEXT:.b8 3 // Abbrev [3] 0xe5:0x9 DW_TAG_base_type
345 ; CHECK-NEXT:.b8 102 // DW_AT_name
351 ; CHECK-NEXT:.b8 4 // DW_AT_encoding
352 ; CHECK-NEXT:.b8 4 // DW_AT_byte_size
353 ; CHECK-NEXT:.b8 6 // Abbrev [6] 0xee:0x5 DW_TAG_pointer_type
354 ; CHECK-NEXT:.b32 229 // DW_AT_type
355 ; CHECK-NEXT:.b8 0 // End Of Children Mark
357 ; CHECK-NEXT: .section .debug_loc { }