xref: /llvm-project/llvm/test/CodeGen/SPIRV/debug-info/debug-type-basic.ll (revision 42633cf27bd2cfb44e9f332c33cfd6750b9d7be4)
1; RUN: llc --verify-machineinstrs --spv-emit-nonsemantic-debug-info --spirv-ext=+SPV_KHR_non_semantic_info --print-after=spirv-nonsemantic-debug-info -O0 -mtriple=spirv64-unknown-unknown %s -o - 2>&1 | FileCheck %s --check-prefix=CHECK-MIR
2; RUN: llc --verify-machineinstrs --spv-emit-nonsemantic-debug-info --spirv-ext=+SPV_KHR_non_semantic_info -O0 -mtriple=spirv64-unknown-unknown %s -o - | FileCheck %s --check-prefix=CHECK-SPIRV
3; RUN: llc --verify-machineinstrs -O0 -mtriple=spirv64-unknown-unknown --spirv-ext=+SPV_KHR_non_semantic_info %s -o - | FileCheck %s --check-prefix=CHECK-OPTION
4; RUN: %if spirv-tools %{ llc --verify-machineinstrs --spv-emit-nonsemantic-debug-info --spirv-ext=+SPV_KHR_non_semantic_info -O0 -mtriple=spirv64-unknown-unknown %s -o - -filetype=obj | spirv-val %}
5
6; CHECK-MIR-DAG: [[type_void:%[0-9]+\:type]] = OpTypeVoid
7; CHECK-MIR-DAG: [[type_i32:%[0-9]+\:type]] = OpTypeInt 32, 0
8; CHECK-MIR-DAG: [[encoding_signedchar:%[0-9]+\:iid\(s32\)]] = OpConstantI [[type_i32]], 5
9; CHECK-MIR-DAG: [[encoding_float:%[0-9]+\:iid\(s32\)]] = OpConstantI [[type_i32]], 3
10; CHECK-MIR-DAG: [[flag_zero:%[0-9]+\:iid\(s32\)]] = OpConstantI [[type_i32]], 0
11; CHECK-MIR-DAG: [[str_bool:%[0-9]+\:id\(s32\)]] = OpString 1819242338, 0
12; CHECK-MIR-DAG: [[size_8bits:%[0-9]+\:iid\(s32\)]] = OpConstantI [[type_i32]], 8
13; CHECK-MIR-DAG: [[encoding_boolean:%[0-9]+\:iid\(s32\)]] = OpConstantI [[type_i32]], 2
14; CHECK-MIR-DAG: OpExtInst [[type_void]], 3, 2, [[str_bool]], [[size_8bits]], [[encoding_boolean]], [[flag_zero]]
15; CHECK-MIR-DAG: [[str_int:%[0-9]+\:id\(s32\)]] = OpString 7630441
16; CHECK-MIR-DAG: [[size_32bits:%[0-9]+\:iid\(s32\)]] = OpConstantI [[type_i32]], 32
17; CHECK-MIR-DAG: [[encoding_signed:%[0-9]+\:iid\(s32\)]] = OpConstantI [[type_i32]], 4
18; CHECK-MIR-DAG: OpExtInst [[type_void]], 3, 2, [[str_int]], [[size_32bits]], [[encoding_signed]], [[flag_zero]]
19; CHECK-MIR-DAG: [[str_short:%[0-9]+\:id\(s32\)]] = OpString 1919903859, 116
20; CHECK-MIR-DAG: [[size_16bits:%[0-9]+\:iid\(s32\)]] = OpConstantI [[type_i32]], 16
21; CHECK-MIR-DAG: OpExtInst [[type_void]], 3, 2, [[str_short]], [[size_16bits]], [[encoding_signed]], [[flag_zero]]
22; CHECK-MIR-DAG: [[str_char:%[0-9]+\:id\(s32\)]] = OpString 1918986339, 0
23; CHECK-MIR-DAG: OpExtInst [[type_void]], 3, 2, [[str_char]], [[size_8bits]], [[encoding_signedchar]], [[flag_zero]]
24; CHECK-MIR-DAG: [[str_long:%[0-9]+\:id\(s32\)]] = OpString 1735290732, 0
25; CHECK-MIR-DAG: [[size_64bits:%[0-9]+\:iid\(s32\)]] = OpConstantI [[type_i32]], 64
26; CHECK-MIR-DAG: OpExtInst [[type_void]], 3, 2, [[str_long]], [[size_64bits]], [[encoding_signed]], [[flag_zero]]
27; CHECK-MIR-DAG: [[str_uint:%[0-9]+\:id\(s32\)]] = OpString 1769172597, 1684368999, 1953392928, 0
28; CHECK-MIR-DAG: [[encoding_unsigned:%[0-9]+\:iid\(s32\)]] = OpConstantI [[type_i32]], 6
29; CHECK-MIR-DAG: OpExtInst [[type_void]], 3, 2, [[str_uint]], [[size_32bits]], [[encoding_unsigned]], [[flag_zero]]
30; CHECK-MIR-DAG: [[str_ushort:%[0-9]+\:id\(s32\)]] = OpString 1769172597, 1684368999, 1869116192, 29810
31; CHECK-MIR-DAG: OpExtInst [[type_void]], 3, 2, [[str_ushort]], [[size_16bits]], [[encoding_unsigned]], [[flag_zero]]
32; CHECK-MIR-DAG: [[str_uchar:%[0-9]+\:id\(s32\)]] = OpString 1769172597, 1684368999, 1634231072, 114
33; CHECK-MIR-DAG: [[encoding_unsignedchar:%[0-9]+\:iid\(s32\)]] = OpConstantI [[type_i32]], 7
34; CHECK-MIR-DAG: OpExtInst [[type_void]], 3, 2, [[str_uchar]], [[size_8bits]], [[encoding_unsignedchar]], [[flag_zero]]
35; CHECK-MIR-DAG: [[str_ulong:%[0-9]+\:id\(s32\)]] = OpString 1769172597, 1684368999, 1852795936, 103
36; CHECK-MIR-DAG: OpExtInst [[type_void]], 3, 2, [[str_ulong]], [[size_64bits]], [[encoding_unsigned]], [[flag_zero]]
37; CHECK-MIR-DAG: [[str_float:%[0-9]+\:id\(s32\)]] = OpString 1634692198, 116
38; CHECK-MIR-DAG: OpExtInst [[type_void]], 3, 2, [[str_float]], [[size_32bits]], [[encoding_float]], [[flag_zero]]
39; CHECK-MIR-DAG: [[str_double:%[0-9]+\:id\(s32\)]] = OpString 1651863396, 25964
40; CHECK-MIR-DAG: OpExtInst [[type_void]], 3, 2, [[str_double]], [[size_64bits]], [[encoding_float]], [[flag_zero]]
41
42; CHECK-SPIRV: [[ext_inst_non_semantic:%[0-9]+]] = OpExtInstImport "NonSemantic.Shader.DebugInfo.100"
43; CHECK-SPIRV-DAG: [[str_bool:%[0-9]+]] = OpString "bool"
44; CHECK-SPIRV-DAG: [[str_int:%[0-9]+]] = OpString "int"
45; CHECK-SPIRV-DAG: [[str_short:%[0-9]+]] = OpString "short"
46; CHECK-SPIRV-DAG: [[str_char:%[0-9]+]] = OpString "char"
47; CHECK-SPIRV-DAG: [[str_long:%[0-9]+]] = OpString "long"
48; CHECK-SPIRV-DAG: [[str_uint:%[0-9]+]] = OpString "unsigned int"
49; CHECK-SPIRV-DAG: [[str_ushort:%[0-9]+]] = OpString "unsigned short"
50; CHECK-SPIRV-DAG: [[str_uchar:%[0-9]+]] = OpString "unsigned char"
51; CHECK-SPIRV-DAG: [[str_ulong:%[0-9]+]] = OpString "unsigned long"
52; CHECK-SPIRV-DAG: [[str_float:%[0-9]+]] = OpString "float"
53; CHECK-SPIRV-DAG: [[str_double:%[0-9]+]] = OpString "double"
54; CHECK-SPIRV-NOT: ----------------
55; CHECK-SPIRV-DAG: [[type_void:%[0-9]+]] = OpTypeVoid
56; CHECK-SPIRV-DAG: [[type_float64:%[0-9]+]] = OpTypeFloat 64
57; CHECK-SPIRV-DAG: [[type_float32:%[0-9]+]] = OpTypeFloat 32
58; CHECK-SPIRV-DAG: [[type_int64:%[0-9]+]] = OpTypeInt 64 0
59; CHECK-SPIRV-DAG: [[type_int8:%[0-9]+]] = OpTypeInt 8 0
60; CHECK-SPIRV-DAG: [[type_int16:%[0-9]+]] = OpTypeInt 16 0
61; CHECK-SPIRV-DAG: [[type_int32:%[0-9]+]] = OpTypeInt 32 0
62; CHECK-SPIRV-DAG: [[encoding_signedchar:%[0-9]+]] = OpConstant [[type_int32]] 5
63; CHECK-SPIRV-DAG: [[flag_zero:%[0-9]+]] = OpConstant [[type_int32]] 0
64; CHECK-SPIRV-DAG: [[encoding_float:%[0-9]+]] = OpConstant [[type_int32]] 3
65; CHECK-SPIRV-DAG: [[size_8bit:%[0-9]+]] = OpConstant [[type_int32]] 8
66; CHECK-SPIRV-DAG: [[encoding_boolean:%[0-9]+]] = OpConstant [[type_int32]] 2
67; CHECK-SPIRV-DAG: [[size_32bit:%[0-9]+]] = OpConstant [[type_int32]] 32
68; CHECK-SPIRV-DAG: [[encoding_signed:%[0-9]+]] = OpConstant [[type_int32]] 4
69; CHECK-SPIRV-DAG: [[size_16bit:%[0-9]+]] = OpConstant [[type_int32]] 16
70; CHECK-SPIRV-DAG: [[size_64bit:%[0-9]+]] = OpConstant [[type_int32]] 64
71; CHECK-SPIRV-DAG: [[encoding_unsigned:%[0-9]+]] = OpConstant [[type_int32]] 6
72; CHECK-SPIRV-DAG: [[encoding_unsignedchar:%[0-9]+]] = OpConstant [[type_int32]] 7
73; CHECK-SPIRV-DAG: OpExtInst [[type_void]] [[ext_inst_non_semantic]] DebugTypeBasic [[str_bool]] [[size_8bit]] [[encoding_boolean]] [[flag_zero]]
74; CHECK-SPIRV-DAG: OpExtInst [[type_void]] [[ext_inst_non_semantic]] DebugTypeBasic [[str_int]] [[size_32bit]] [[encoding_signed]] [[flag_zero]]
75; CHECK-SPIRV-DAG: OpExtInst [[type_void]] [[ext_inst_non_semantic]] DebugTypeBasic [[str_short]] [[size_16bit]] [[encoding_signed]] [[flag_zero]]
76; CHECK-SPIRV-DAG: OpExtInst [[type_void]] [[ext_inst_non_semantic]] DebugTypeBasic [[str_char]] [[size_8bit]] [[encoding_signedchar]] [[flag_zero]]
77; CHECK-SPIRV-DAG: OpExtInst [[type_void]] [[ext_inst_non_semantic]] DebugTypeBasic [[str_long]] [[size_64bit]] [[encoding_signed]] [[flag_zero]]
78; CHECK-SPIRV-DAG: OpExtInst [[type_void]] [[ext_inst_non_semantic]] DebugTypeBasic [[str_uint]] [[size_32bit]] [[encoding_unsigned]] [[flag_zero]]
79; CHECK-SPIRV-DAG: OpExtInst [[type_void]] [[ext_inst_non_semantic]] DebugTypeBasic [[str_ushort]] [[size_16bit]] [[encoding_unsigned]] [[flag_zero]]
80; CHECK-SPIRV-DAG: OpExtInst [[type_void]] [[ext_inst_non_semantic]] DebugTypeBasic [[str_uchar]] [[size_8bit]] [[encoding_unsignedchar]] [[flag_zero]]
81; CHECK-SPIRV-DAG: OpExtInst [[type_void]] [[ext_inst_non_semantic]] DebugTypeBasic [[str_ulong]] [[size_64bit]] [[encoding_unsigned]] [[flag_zero]]
82; CHECK-SPIRV-DAG: OpExtInst [[type_void]] [[ext_inst_non_semantic]] DebugTypeBasic [[str_float]] [[size_32bit]] [[encoding_float]] [[flag_zero]]
83; CHECK-SPIRV-DAG: OpExtInst [[type_void]] [[ext_inst_non_semantic]] DebugTypeBasic [[str_double]] [[size_64bit]] [[encoding_float]] [[flag_zero]]
84
85; CHECK-OPTION-NOT: DebugTypeBasic
86
87define spir_func void  @test1() !dbg !9 {
88entry:
89  %b0 = alloca i8, align 1
90  %a0 = alloca i32, align 4
91  %s0 = alloca i16, align 2
92  %c0 = alloca i8, align 1
93  %l0 = alloca i64, align 8
94  %ua0 = alloca i32, align 4
95  %us0 = alloca i16, align 2
96  %uc0 = alloca i8, align 1
97  %ul0 = alloca i64, align 8
98  %f0 = alloca float, align 4
99  %d0 = alloca double, align 8
100    #dbg_declare(ptr %b0, !14, !DIExpression(DW_OP_constu, 0, DW_OP_swap, DW_OP_xderef), !16)
101  store i8 0, ptr %b0, align 1, !dbg !16
102    #dbg_declare(ptr %a0, !17, !DIExpression(DW_OP_constu, 0, DW_OP_swap, DW_OP_xderef), !18)
103  store i32 1, ptr %a0, align 4, !dbg !18
104    #dbg_declare(ptr %s0, !19, !DIExpression(DW_OP_constu, 0, DW_OP_swap, DW_OP_xderef), !21)
105  store i16 2, ptr %s0, align 2, !dbg !21
106    #dbg_declare(ptr %c0, !22, !DIExpression(DW_OP_constu, 0, DW_OP_swap, DW_OP_xderef), !24)
107  store i8 3, ptr %c0, align 1, !dbg !24
108    #dbg_declare(ptr %l0, !25, !DIExpression(DW_OP_constu, 0, DW_OP_swap, DW_OP_xderef), !27)
109  store i64 4, ptr %l0, align 8, !dbg !27
110    #dbg_declare(ptr %ua0, !28, !DIExpression(DW_OP_constu, 0, DW_OP_swap, DW_OP_xderef), !30)
111  store i32 1, ptr %ua0, align 4, !dbg !30
112    #dbg_declare(ptr %us0, !31, !DIExpression(DW_OP_constu, 0, DW_OP_swap, DW_OP_xderef), !33)
113  store i16 2, ptr %us0, align 2, !dbg !33
114    #dbg_declare(ptr %uc0, !34, !DIExpression(DW_OP_constu, 0, DW_OP_swap, DW_OP_xderef), !36)
115  store i8 3, ptr %uc0, align 1, !dbg !36
116    #dbg_declare(ptr %ul0, !37, !DIExpression(DW_OP_constu, 0, DW_OP_swap, DW_OP_xderef), !39)
117  store i64 4, ptr %ul0, align 8, !dbg !39
118    #dbg_declare(ptr %f0, !40, !DIExpression(DW_OP_constu, 0, DW_OP_swap, DW_OP_xderef), !42)
119  store float 1.000000e+00, ptr %f0, align 4, !dbg !42
120    #dbg_declare(ptr %d0, !43, !DIExpression(DW_OP_constu, 0, DW_OP_swap, DW_OP_xderef), !45)
121  store double 2.000000e+00, ptr %d0, align 8, !dbg !45
122  ret void
123}
124
125define spir_func void @test2() !dbg !47 {
126entry:
127  %b1 = alloca i8, align 1
128  %a1 = alloca i32, align 4
129  %s1 = alloca i16, align 2
130  %c1 = alloca i8, align 1
131  %l1 = alloca i64, align 8
132  %ua1 = alloca i32, align 4
133  %us1 = alloca i16, align 2
134  %uc1 = alloca i8, align 1
135  %ul1 = alloca i64, align 8
136  %f1 = alloca float, align 4
137  %d1 = alloca double, align 8
138    #dbg_declare(ptr %b1, !48, !DIExpression(DW_OP_constu, 0, DW_OP_swap, DW_OP_xderef), !49)
139  store i8 0, ptr %b1, align 1, !dbg !49
140    #dbg_declare(ptr %a1, !50, !DIExpression(DW_OP_constu, 0, DW_OP_swap, DW_OP_xderef), !51)
141  store i32 1, ptr %a1, align 4, !dbg !51
142    #dbg_declare(ptr %s1, !52, !DIExpression(DW_OP_constu, 0, DW_OP_swap, DW_OP_xderef), !53)
143  store i16 2, ptr %s1, align 2, !dbg !53
144    #dbg_declare(ptr %c1, !54, !DIExpression(DW_OP_constu, 0, DW_OP_swap, DW_OP_xderef), !55)
145  store i8 3, ptr %c1, align 1, !dbg !55
146    #dbg_declare(ptr %l1, !56, !DIExpression(DW_OP_constu, 0, DW_OP_swap, DW_OP_xderef), !57)
147  store i64 4, ptr %l1, align 8, !dbg !57
148    #dbg_declare(ptr %ua1, !58, !DIExpression(DW_OP_constu, 0, DW_OP_swap, DW_OP_xderef), !59)
149  store i32 1, ptr %ua1, align 4, !dbg !59
150    #dbg_declare(ptr %us1, !60, !DIExpression(DW_OP_constu, 0, DW_OP_swap, DW_OP_xderef), !61)
151  store i16 2, ptr %us1, align 2, !dbg !61
152    #dbg_declare(ptr %uc1, !62, !DIExpression(DW_OP_constu, 0, DW_OP_swap, DW_OP_xderef), !63)
153  store i8 3, ptr %uc1, align 1, !dbg !63
154    #dbg_declare(ptr %ul1, !64, !DIExpression(DW_OP_constu, 0, DW_OP_swap, DW_OP_xderef), !65)
155  store i64 4, ptr %ul1, align 8, !dbg !65
156    #dbg_declare(ptr %f1, !66, !DIExpression(DW_OP_constu, 0, DW_OP_swap, DW_OP_xderef), !67)
157  store float 1.000000e+00, ptr %f1, align 4, !dbg !67
158    #dbg_declare(ptr %d1, !68, !DIExpression(DW_OP_constu, 0, DW_OP_swap, DW_OP_xderef), !69)
159  store double 2.000000e+00, ptr %d1, align 8, !dbg !69
160  ret void
161}
162
163!llvm.dbg.cu = !{!0}
164!llvm.module.flags = !{!2, !3, !4, !5}
165
166!0 = distinct !DICompileUnit(language: DW_LANG_Zig, file: !1, producer: "clang version XX.X.XXXX (FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF)", isOptimized: false, runtimeVersion: 0, emissionKind: FullDebug, splitDebugInlining: false, nameTableKind: None)
167!1 = !DIFile(filename: "example.cpp", directory: "/AAAAAAAAAA/BBBBBBBB/CCCCCCCCC", checksumkind: CSK_MD5, checksum: "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF")
168!2 = !{i32 7, !"Dwarf Version", i32 5}
169!3 = !{i32 2, !"Debug Info Version", i32 3}
170!4 = !{i32 1, !"wchar_size", i32 4}
171!5 = !{i32 7, !"frame-pointer", i32 2}
172!9 = distinct !DISubprogram(name: "test1", linkageName: "XXXX", scope: !1, file: !1, line: 1, type: !10, scopeLine: 1, flags: DIFlagPrototyped, spFlags: DISPFlagDefinition, unit: !0, retainedNodes: !13)
173!10 = !DISubroutineType(cc: DW_CC_LLVM_SpirFunction, types: !11)
174!11 = !{!12}
175!12 = !DIBasicType(name: "int", size: 32, encoding: DW_ATE_signed)
176!13 = !{}
177!14 = !DILocalVariable(name: "b0", scope: !9, file: !1, line: 2, type: !15)
178!15 = !DIBasicType(name: "bool", size: 8, encoding: DW_ATE_boolean)
179!16 = !DILocation(line: 2, column: 8, scope: !9)
180!17 = !DILocalVariable(name: "a0", scope: !9, file: !1, line: 3, type: !12)
181!18 = !DILocation(line: 3, column: 7, scope: !9)
182!19 = !DILocalVariable(name: "s0", scope: !9, file: !1, line: 4, type: !20)
183!20 = !DIBasicType(name: "short", size: 16, encoding: DW_ATE_signed)
184!21 = !DILocation(line: 4, column: 9, scope: !9)
185!22 = !DILocalVariable(name: "c0", scope: !9, file: !1, line: 5, type: !23)
186!23 = !DIBasicType(name: "char", size: 8, encoding: DW_ATE_signed_char)
187!24 = !DILocation(line: 5, column: 8, scope: !9)
188!25 = !DILocalVariable(name: "l0", scope: !9, file: !1, line: 6, type: !26)
189!26 = !DIBasicType(name: "long", size: 64, encoding: DW_ATE_signed)
190!27 = !DILocation(line: 6, column: 8, scope: !9)
191!28 = !DILocalVariable(name: "ua0", scope: !9, file: !1, line: 7, type: !29)
192!29 = !DIBasicType(name: "unsigned int", size: 32, encoding: DW_ATE_unsigned)
193!30 = !DILocation(line: 7, column: 16, scope: !9)
194!31 = !DILocalVariable(name: "us0", scope: !9, file: !1, line: 8, type: !32)
195!32 = !DIBasicType(name: "unsigned short", size: 16, encoding: DW_ATE_unsigned)
196!33 = !DILocation(line: 8, column: 18, scope: !9)
197!34 = !DILocalVariable(name: "uc0", scope: !9, file: !1, line: 9, type: !35)
198!35 = !DIBasicType(name: "unsigned char", size: 8, encoding: DW_ATE_unsigned_char)
199!36 = !DILocation(line: 9, column: 17, scope: !9)
200!37 = !DILocalVariable(name: "ul0", scope: !9, file: !1, line: 10, type: !38)
201!38 = !DIBasicType(name: "unsigned long", size: 64, encoding: DW_ATE_unsigned)
202!39 = !DILocation(line: 10, column: 17, scope: !9)
203!40 = !DILocalVariable(name: "f0", scope: !9, file: !1, line: 11, type: !41)
204!41 = !DIBasicType(name: "float", size: 32, encoding: DW_ATE_float)
205!42 = !DILocation(line: 11, column: 9, scope: !9)
206!43 = !DILocalVariable(name: "d0", scope: !9, file: !1, line: 12, type: !44)
207!44 = !DIBasicType(name: "double", size: 64, encoding: DW_ATE_float)
208!45 = !DILocation(line: 12, column: 10, scope: !9)
209!46 = !DILocation(line: 13, column: 3, scope: !9)
210!47 = distinct !DISubprogram(name: "test2", linkageName: "YYYY", scope: !1, file: !1, line: 16, type: !10, scopeLine: 16, flags: DIFlagPrototyped, spFlags: DISPFlagDefinition, unit: !0, retainedNodes: !13)
211!48 = !DILocalVariable(name: "b1", scope: !47, file: !1, line: 17, type: !15)
212!49 = !DILocation(line: 17, column: 8, scope: !47)
213!50 = !DILocalVariable(name: "a1", scope: !47, file: !1, line: 18, type: !12)
214!51 = !DILocation(line: 18, column: 7, scope: !47)
215!52 = !DILocalVariable(name: "s1", scope: !47, file: !1, line: 19, type: !20)
216!53 = !DILocation(line: 19, column: 9, scope: !47)
217!54 = !DILocalVariable(name: "c1", scope: !47, file: !1, line: 20, type: !23)
218!55 = !DILocation(line: 20, column: 8, scope: !47)
219!56 = !DILocalVariable(name: "l1", scope: !47, file: !1, line: 21, type: !26)
220!57 = !DILocation(line: 21, column: 8, scope: !47)
221!58 = !DILocalVariable(name: "ua1", scope: !47, file: !1, line: 22, type: !29)
222!59 = !DILocation(line: 22, column: 16, scope: !47)
223!60 = !DILocalVariable(name: "us1", scope: !47, file: !1, line: 23, type: !32)
224!61 = !DILocation(line: 23, column: 18, scope: !47)
225!62 = !DILocalVariable(name: "uc1", scope: !47, file: !1, line: 24, type: !35)
226!63 = !DILocation(line: 24, column: 17, scope: !47)
227!64 = !DILocalVariable(name: "ul1", scope: !47, file: !1, line: 25, type: !38)
228!65 = !DILocation(line: 25, column: 17, scope: !47)
229!66 = !DILocalVariable(name: "f1", scope: !47, file: !1, line: 26, type: !41)
230!67 = !DILocation(line: 26, column: 9, scope: !47)
231!68 = !DILocalVariable(name: "d1", scope: !47, file: !1, line: 27, type: !44)
232!69 = !DILocation(line: 27, column: 10, scope: !47)
233!70 = !DILocation(line: 28, column: 3, scope: !47)
234