xref: /llvm-project/llvm/test/DebugInfo/Generic/assignment-tracking/instcombine/storemerge.ll (revision 094572701dce4aaf36f4521d6cf750420d39f206)
14ece5073SOCHyams; RUN: opt %s -S -passes=instcombine -o - | FileCheck %s
2632f44e5SStephen Tozer; RUN: opt --try-experimental-debuginfo-iterators %s -S -passes=instcombine -o - | FileCheck %s
3fcd5098aSOCHyams
4fcd5098aSOCHyams;; $ cat test.cpp
5fcd5098aSOCHyams;; class a {
6fcd5098aSOCHyams;;   float b;
7fcd5098aSOCHyams;; };
8fcd5098aSOCHyams;; class c {
9fcd5098aSOCHyams;; public:
10fcd5098aSOCHyams;;   a d();
11fcd5098aSOCHyams;; };
12fcd5098aSOCHyams;; class e {
13fcd5098aSOCHyams;; public:
14fcd5098aSOCHyams;;   c &f();
15fcd5098aSOCHyams;; };
16fcd5098aSOCHyams;; class g {
17fcd5098aSOCHyams;; public:
18fcd5098aSOCHyams;;   void h(a &);
19fcd5098aSOCHyams;; };
20fcd5098aSOCHyams;; class j {
21fcd5098aSOCHyams;;   g k;
22fcd5098aSOCHyams;;   e l;
23fcd5098aSOCHyams;;   e m;
24fcd5098aSOCHyams;;   bool n;
25fcd5098aSOCHyams;;   void o();
26fcd5098aSOCHyams;; };
27fcd5098aSOCHyams;; void j::o() {
28fcd5098aSOCHyams;;   int i;
29fcd5098aSOCHyams;;   a p;
30fcd5098aSOCHyams;;   i = 0;
31fcd5098aSOCHyams;;   for (; i < 3; i++)
32fcd5098aSOCHyams;;     if (n)
33fcd5098aSOCHyams;;       p = l.f().d();
34fcd5098aSOCHyams;;     else
35fcd5098aSOCHyams;;       p = m.f().d();
36fcd5098aSOCHyams;;   k.h(p);
37fcd5098aSOCHyams;; }
38fcd5098aSOCHyams;;
39fcd5098aSOCHyams;; Generated by grabbing IR before instcombine in:
40fcd5098aSOCHyams;; $ clang++ -O2 -g -c test.cpp -Xclang -fexperimental-assignment-tracking
41fcd5098aSOCHyams
42fcd5098aSOCHyams;; Before instcombine runs we have an unrolled loop (3 iterations). Each
43fcd5098aSOCHyams;; unrolled section is an if-diamond with a store in if.then and if.else
44fcd5098aSOCHyams;; block. The "same" stores in each unrolled section have the same
45fcd5098aSOCHyams;; DIAssignID. Instcombine is going to sink the stores from if.then and if.else
46fcd5098aSOCHyams;; into if.end for each unrolled section. This involves merging the DIAssignID
47fcd5098aSOCHyams;; of the two stores. Check that each merge updates all linked instructions
48fcd5098aSOCHyams;; with the same DIAssignID attachments too.
49fcd5098aSOCHyams
50fcd5098aSOCHyams; CHECK: if.then:
51*09457270SStephen Tozer; CHECK: #dbg_assign(float %call2, ![[var:[0-9]+]], !DIExpression(), ![[id:[0-9]+]], ptr %p, !DIExpression(),
52fcd5098aSOCHyams; CHECK: br label %for.inc
53fcd5098aSOCHyams
54fcd5098aSOCHyams; CHECK: if.else:
55*09457270SStephen Tozer; CHECK: #dbg_assign(float %call5, ![[var]], !DIExpression(), ![[id]], ptr %p, !DIExpression(),
56fcd5098aSOCHyams; CHECK: br label %for.inc
57fcd5098aSOCHyams
58fcd5098aSOCHyams; CHECK: for.inc:
59fcd5098aSOCHyams; CHECK-NEXT: %storemerge = phi float [ %call2, %if.then ], [ %call5, %if.else ]
60fcd5098aSOCHyams; CHECK-NEXT: store float %storemerge, ptr %p, align 4{{.+}}!DIAssignID ![[id]]
61fcd5098aSOCHyams
62fcd5098aSOCHyams; CHECK: if.then.1:
63*09457270SStephen Tozer; CHECK: #dbg_assign(float %call2.1, ![[var]], !DIExpression(), ![[id]], ptr %p, !DIExpression(),
64fcd5098aSOCHyams; CHECK: br label %for.inc.1
65fcd5098aSOCHyams
66fcd5098aSOCHyams; CHECK: if.else.1:
67*09457270SStephen Tozer; CHECK: #dbg_assign(float %call5.1, ![[var]], !DIExpression(), ![[id]], ptr %p, !DIExpression(),
68fcd5098aSOCHyams; CHECK: br label %for.inc.1
69fcd5098aSOCHyams
70fcd5098aSOCHyams; CHECK: for.inc.1:
71fcd5098aSOCHyams; CHECK-NEXT: %storemerge1 = phi float [ %call2.1, %if.then.1 ], [ %call5.1, %if.else.1 ]
72fcd5098aSOCHyams; CHECK-NEXT: store float %storemerge1, ptr %p, align 4{{.+}}!DIAssignID ![[id]]
73fcd5098aSOCHyams
74fcd5098aSOCHyams; CHECK: if.then.2:
75*09457270SStephen Tozer; CHECK: #dbg_assign(float %call2.2, ![[var]], !DIExpression(), ![[id]], ptr %p, !DIExpression(),
76fcd5098aSOCHyams; CHECK: br label %for.inc.2
77fcd5098aSOCHyams
78fcd5098aSOCHyams; CHECK: if.else.2:
79*09457270SStephen Tozer; CHECK: #dbg_assign(float %call5.2, ![[var]], !DIExpression(), ![[id]], ptr %p, !DIExpression(),
80fcd5098aSOCHyams; CHECK:  br label %for.inc.2
81fcd5098aSOCHyams
82fcd5098aSOCHyams; CHECK: for.inc.2:
83fcd5098aSOCHyams; CHECK-NEXT: %storemerge2 = phi float [ %call2.2, %if.then.2 ], [ %call5.2, %if.else.2 ]
84fcd5098aSOCHyams; CHECK-NEXT: store float %storemerge2, ptr %p, align 4{{.+}}!DIAssignID ![[id]]
85fcd5098aSOCHyams
86fcd5098aSOCHyams%class.j = type { %class.g, %class.e, %class.e, i8 }
87fcd5098aSOCHyams%class.g = type { i8 }
88fcd5098aSOCHyams%class.e = type { i8 }
89fcd5098aSOCHyams%class.a = type { float }
90fcd5098aSOCHyams%class.c = type { i8 }
91fcd5098aSOCHyams
92fcd5098aSOCHyams; Function Attrs: uwtable
93fcd5098aSOCHyamsdefine dso_local void @_ZN1j1oEv(ptr %this) local_unnamed_addr #0 align 2 !dbg !7 {
94fcd5098aSOCHyamsentry:
95fcd5098aSOCHyams  %p = alloca %class.a, align 4, !DIAssignID !49
96fcd5098aSOCHyams  call void @llvm.dbg.assign(metadata i1 undef, metadata !48, metadata !DIExpression(), metadata !49, metadata ptr %p, metadata !DIExpression()), !dbg !50
97fcd5098aSOCHyams  %0 = bitcast ptr %p to ptr, !dbg !51
983a05e01dSFangrui Song  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %0) #4, !dbg !51
99fcd5098aSOCHyams  %n = getelementptr inbounds %class.j, ptr %this, i64 0, i32 3
100fcd5098aSOCHyams  %l = getelementptr inbounds %class.j, ptr %this, i64 0, i32 1
101fcd5098aSOCHyams  %ref.tmp.sroa.0.0..sroa_idx = getelementptr inbounds %class.a, ptr %p, i64 0, i32 0
102fcd5098aSOCHyams  %m = getelementptr inbounds %class.j, ptr %this, i64 0, i32 2
103fcd5098aSOCHyams  %1 = load i8, ptr %n, align 1, !dbg !52
104fcd5098aSOCHyams  %tobool.not = icmp eq i8 %1, 0, !dbg !52
105fcd5098aSOCHyams  br i1 %tobool.not, label %if.else, label %if.then, !dbg !64
106fcd5098aSOCHyams
107fcd5098aSOCHyamsif.then:                                          ; preds = %entry
108fcd5098aSOCHyams  %call = tail call nonnull align 1 dereferenceable(1) ptr @_ZN1e1fEv(ptr nonnull %l), !dbg !65
109fcd5098aSOCHyams  %call2 = tail call float @_ZN1c1dEv(ptr nonnull %call), !dbg !66
110fcd5098aSOCHyams  store float %call2, ptr %ref.tmp.sroa.0.0..sroa_idx, align 4, !dbg !67, !DIAssignID !71
111fcd5098aSOCHyams  call void @llvm.dbg.assign(metadata float %call2, metadata !48, metadata !DIExpression(), metadata !71, metadata ptr %ref.tmp.sroa.0.0..sroa_idx, metadata !DIExpression()), !dbg !50
112fcd5098aSOCHyams  br label %for.inc, !dbg !72
113fcd5098aSOCHyams
114fcd5098aSOCHyamsif.else:                                          ; preds = %entry
115fcd5098aSOCHyams  %call4 = tail call nonnull align 1 dereferenceable(1) ptr @_ZN1e1fEv(ptr nonnull %m), !dbg !73
116fcd5098aSOCHyams  %call5 = tail call float @_ZN1c1dEv(ptr nonnull %call4), !dbg !74
117fcd5098aSOCHyams  store float %call5, ptr %ref.tmp.sroa.0.0..sroa_idx, align 4, !dbg !75, !DIAssignID !76
118fcd5098aSOCHyams  call void @llvm.dbg.assign(metadata float %call5, metadata !48, metadata !DIExpression(), metadata !76, metadata ptr %ref.tmp.sroa.0.0..sroa_idx, metadata !DIExpression()), !dbg !50
119fcd5098aSOCHyams  br label %for.inc
120fcd5098aSOCHyams
121fcd5098aSOCHyamsfor.inc:                                          ; preds = %if.then, %if.else
122fcd5098aSOCHyams  %2 = load i8, ptr %n, align 1, !dbg !52
123fcd5098aSOCHyams  %tobool.not.1 = icmp eq i8 %2, 0, !dbg !52
124fcd5098aSOCHyams  br i1 %tobool.not.1, label %if.else.1, label %if.then.1, !dbg !64
125fcd5098aSOCHyams
126fcd5098aSOCHyamsif.then.1:                                        ; preds = %for.inc
127fcd5098aSOCHyams  %call.1 = tail call nonnull align 1 dereferenceable(1) ptr @_ZN1e1fEv(ptr nonnull %l), !dbg !65
128fcd5098aSOCHyams  %call2.1 = tail call float @_ZN1c1dEv(ptr nonnull %call.1), !dbg !66
129fcd5098aSOCHyams  store float %call2.1, ptr %ref.tmp.sroa.0.0..sroa_idx, align 4, !dbg !67, !DIAssignID !71
130fcd5098aSOCHyams  call void @llvm.dbg.assign(metadata float %call2.1, metadata !48, metadata !DIExpression(), metadata !71, metadata ptr %ref.tmp.sroa.0.0..sroa_idx, metadata !DIExpression()), !dbg !50
131fcd5098aSOCHyams  br label %for.inc.1, !dbg !72
132fcd5098aSOCHyams
133fcd5098aSOCHyamsif.else.1:                                        ; preds = %for.inc
134fcd5098aSOCHyams  %call4.1 = tail call nonnull align 1 dereferenceable(1) ptr @_ZN1e1fEv(ptr nonnull %m), !dbg !73
135fcd5098aSOCHyams  %call5.1 = tail call float @_ZN1c1dEv(ptr nonnull %call4.1), !dbg !74
136fcd5098aSOCHyams  store float %call5.1, ptr %ref.tmp.sroa.0.0..sroa_idx, align 4, !dbg !75, !DIAssignID !76
137fcd5098aSOCHyams  call void @llvm.dbg.assign(metadata float %call5.1, metadata !48, metadata !DIExpression(), metadata !76, metadata ptr %ref.tmp.sroa.0.0..sroa_idx, metadata !DIExpression()), !dbg !50
138fcd5098aSOCHyams  br label %for.inc.1
139fcd5098aSOCHyams
140fcd5098aSOCHyamsfor.inc.1:                                        ; preds = %if.else.1, %if.then.1
141fcd5098aSOCHyams  %3 = load i8, ptr %n, align 1, !dbg !52
142fcd5098aSOCHyams  %tobool.not.2 = icmp eq i8 %3, 0, !dbg !52
143fcd5098aSOCHyams  br i1 %tobool.not.2, label %if.else.2, label %if.then.2, !dbg !64
144fcd5098aSOCHyams
145fcd5098aSOCHyamsif.then.2:                                        ; preds = %for.inc.1
146fcd5098aSOCHyams  %call.2 = tail call nonnull align 1 dereferenceable(1) ptr @_ZN1e1fEv(ptr nonnull %l), !dbg !65
147fcd5098aSOCHyams  %call2.2 = tail call float @_ZN1c1dEv(ptr nonnull %call.2), !dbg !66
148fcd5098aSOCHyams  store float %call2.2, ptr %ref.tmp.sroa.0.0..sroa_idx, align 4, !dbg !67, !DIAssignID !71
149fcd5098aSOCHyams  call void @llvm.dbg.assign(metadata float %call2.2, metadata !48, metadata !DIExpression(), metadata !71, metadata ptr %ref.tmp.sroa.0.0..sroa_idx, metadata !DIExpression()), !dbg !50
150fcd5098aSOCHyams  br label %for.inc.2, !dbg !72
151fcd5098aSOCHyams
152fcd5098aSOCHyamsif.else.2:                                        ; preds = %for.inc.1
153fcd5098aSOCHyams  %call4.2 = tail call nonnull align 1 dereferenceable(1) ptr @_ZN1e1fEv(ptr nonnull %m), !dbg !73
154fcd5098aSOCHyams  %call5.2 = tail call float @_ZN1c1dEv(ptr nonnull %call4.2), !dbg !74
155fcd5098aSOCHyams  store float %call5.2, ptr %ref.tmp.sroa.0.0..sroa_idx, align 4, !dbg !75, !DIAssignID !76
156fcd5098aSOCHyams  call void @llvm.dbg.assign(metadata float %call5.2, metadata !48, metadata !DIExpression(), metadata !76, metadata ptr %ref.tmp.sroa.0.0..sroa_idx, metadata !DIExpression()), !dbg !50
157fcd5098aSOCHyams  br label %for.inc.2
158fcd5098aSOCHyams
159fcd5098aSOCHyamsfor.inc.2:                                        ; preds = %if.else.2, %if.then.2
160fcd5098aSOCHyams  %k = getelementptr inbounds %class.j, ptr %this, i64 0, i32 0, !dbg !77
161fcd5098aSOCHyams  call void @_ZN1g1hER1a(ptr %k, ptr nonnull align 4 dereferenceable(4) %p), !dbg !78
1623a05e01dSFangrui Song  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %0) #4, !dbg !79
163fcd5098aSOCHyams  ret void, !dbg !79
164fcd5098aSOCHyams}
165fcd5098aSOCHyams
166fcd5098aSOCHyams; Function Attrs: argmemonly nofree nosync nounwind willreturn
1673a05e01dSFangrui Songdeclare void @llvm.lifetime.start.p0(i64 immarg, ptr nocapture) #1
168fcd5098aSOCHyams
169fcd5098aSOCHyamsdeclare dso_local nonnull align 1 dereferenceable(1) ptr @_ZN1e1fEv(ptr) local_unnamed_addr #2
170fcd5098aSOCHyams
171fcd5098aSOCHyamsdeclare dso_local float @_ZN1c1dEv(ptr) local_unnamed_addr #2
172fcd5098aSOCHyams
173fcd5098aSOCHyams; Function Attrs: argmemonly nofree nosync nounwind willreturn
1743a05e01dSFangrui Songdeclare void @llvm.lifetime.end.p0(i64 immarg, ptr nocapture) #1
175fcd5098aSOCHyams
176fcd5098aSOCHyamsdeclare dso_local void @_ZN1g1hER1a(ptr, ptr nonnull align 4 dereferenceable(4)) local_unnamed_addr #2
177fcd5098aSOCHyams
178fcd5098aSOCHyams; Function Attrs: nofree nosync nounwind readnone speculatable willreturn
179fcd5098aSOCHyamsdeclare void @llvm.dbg.assign(metadata, metadata, metadata, metadata, metadata, metadata) #3
180fcd5098aSOCHyams
181fcd5098aSOCHyams!llvm.dbg.cu = !{!0}
1824ece5073SOCHyams!llvm.module.flags = !{!3, !4, !5, !1000}
183fcd5098aSOCHyams!llvm.ident = !{!6}
184fcd5098aSOCHyams
185fcd5098aSOCHyams!0 = distinct !DICompileUnit(language: DW_LANG_C_plus_plus, file: !1, producer: "clang version 12.0.0", isOptimized: true, runtimeVersion: 0, emissionKind: FullDebug, enums: !2, splitDebugInlining: false, nameTableKind: None)
186fcd5098aSOCHyams!1 = !DIFile(filename: "test.cpp", directory: "/")
187fcd5098aSOCHyams!2 = !{}
188fcd5098aSOCHyams!3 = !{i32 7, !"Dwarf Version", i32 4}
189fcd5098aSOCHyams!4 = !{i32 2, !"Debug Info Version", i32 3}
190fcd5098aSOCHyams!5 = !{i32 1, !"wchar_size", i32 4}
191fcd5098aSOCHyams!6 = !{!"clang version 12.0.0"}
192fcd5098aSOCHyams!7 = distinct !DISubprogram(name: "o", linkageName: "_ZN1j1oEv", scope: !8, file: !1, line: 23, type: !40, scopeLine: 23, flags: DIFlagPrototyped | DIFlagAllCallsDescribed, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !0, declaration: !39, retainedNodes: !43)
193fcd5098aSOCHyams!8 = distinct !DICompositeType(tag: DW_TAG_class_type, name: "j", file: !1, line: 16, size: 32, flags: DIFlagTypePassByValue, elements: !9, identifier: "_ZTS1j")
194fcd5098aSOCHyams!9 = !{!10, !22, !36, !37, !39}
195fcd5098aSOCHyams!10 = !DIDerivedType(tag: DW_TAG_member, name: "k", scope: !8, file: !1, line: 17, baseType: !11, size: 8)
196fcd5098aSOCHyams!11 = distinct !DICompositeType(tag: DW_TAG_class_type, name: "g", file: !1, line: 12, size: 8, flags: DIFlagTypePassByValue, elements: !12, identifier: "_ZTS1g")
197fcd5098aSOCHyams!12 = !{!13}
198fcd5098aSOCHyams!13 = !DISubprogram(name: "h", linkageName: "_ZN1g1hER1a", scope: !11, file: !1, line: 14, type: !14, scopeLine: 14, flags: DIFlagPublic | DIFlagPrototyped, spFlags: DISPFlagOptimized)
199fcd5098aSOCHyams!14 = !DISubroutineType(types: !15)
200fcd5098aSOCHyams!15 = !{null, !16, !17}
201fcd5098aSOCHyams!16 = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: !11, size: 64, flags: DIFlagArtificial | DIFlagObjectPointer)
202fcd5098aSOCHyams!17 = !DIDerivedType(tag: DW_TAG_reference_type, baseType: !18, size: 64)
203fcd5098aSOCHyams!18 = distinct !DICompositeType(tag: DW_TAG_class_type, name: "a", file: !1, line: 1, size: 32, flags: DIFlagTypePassByValue, elements: !19, identifier: "_ZTS1a")
204fcd5098aSOCHyams!19 = !{!20}
205fcd5098aSOCHyams!20 = !DIDerivedType(tag: DW_TAG_member, name: "b", scope: !18, file: !1, line: 2, baseType: !21, size: 32)
206fcd5098aSOCHyams!21 = !DIBasicType(name: "float", size: 32, encoding: DW_ATE_float)
207fcd5098aSOCHyams!22 = !DIDerivedType(tag: DW_TAG_member, name: "l", scope: !8, file: !1, line: 18, baseType: !23, size: 8, offset: 8)
208fcd5098aSOCHyams!23 = distinct !DICompositeType(tag: DW_TAG_class_type, name: "e", file: !1, line: 8, size: 8, flags: DIFlagTypePassByValue, elements: !24, identifier: "_ZTS1e")
209fcd5098aSOCHyams!24 = !{!25}
210fcd5098aSOCHyams!25 = !DISubprogram(name: "f", linkageName: "_ZN1e1fEv", scope: !23, file: !1, line: 10, type: !26, scopeLine: 10, flags: DIFlagPublic | DIFlagPrototyped, spFlags: DISPFlagOptimized)
211fcd5098aSOCHyams!26 = !DISubroutineType(types: !27)
212fcd5098aSOCHyams!27 = !{!28, !35}
213fcd5098aSOCHyams!28 = !DIDerivedType(tag: DW_TAG_reference_type, baseType: !29, size: 64)
214fcd5098aSOCHyams!29 = distinct !DICompositeType(tag: DW_TAG_class_type, name: "c", file: !1, line: 4, size: 8, flags: DIFlagTypePassByValue, elements: !30, identifier: "_ZTS1c")
215fcd5098aSOCHyams!30 = !{!31}
216fcd5098aSOCHyams!31 = !DISubprogram(name: "d", linkageName: "_ZN1c1dEv", scope: !29, file: !1, line: 6, type: !32, scopeLine: 6, flags: DIFlagPublic | DIFlagPrototyped, spFlags: DISPFlagOptimized)
217fcd5098aSOCHyams!32 = !DISubroutineType(types: !33)
218fcd5098aSOCHyams!33 = !{!18, !34}
219fcd5098aSOCHyams!34 = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: !29, size: 64, flags: DIFlagArtificial | DIFlagObjectPointer)
220fcd5098aSOCHyams!35 = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: !23, size: 64, flags: DIFlagArtificial | DIFlagObjectPointer)
221fcd5098aSOCHyams!36 = !DIDerivedType(tag: DW_TAG_member, name: "m", scope: !8, file: !1, line: 19, baseType: !23, size: 8, offset: 16)
222fcd5098aSOCHyams!37 = !DIDerivedType(tag: DW_TAG_member, name: "n", scope: !8, file: !1, line: 20, baseType: !38, size: 8, offset: 24)
223fcd5098aSOCHyams!38 = !DIBasicType(name: "bool", size: 8, encoding: DW_ATE_boolean)
224fcd5098aSOCHyams!39 = !DISubprogram(name: "o", linkageName: "_ZN1j1oEv", scope: !8, file: !1, line: 21, type: !40, scopeLine: 21, flags: DIFlagPrototyped, spFlags: DISPFlagOptimized)
225fcd5098aSOCHyams!40 = !DISubroutineType(types: !41)
226fcd5098aSOCHyams!41 = !{null, !42}
227fcd5098aSOCHyams!42 = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: !8, size: 64, flags: DIFlagArtificial | DIFlagObjectPointer)
228fcd5098aSOCHyams!43 = !{!44, !46, !48}
229fcd5098aSOCHyams!44 = !DILocalVariable(name: "this", arg: 1, scope: !7, type: !45, flags: DIFlagArtificial | DIFlagObjectPointer)
230fcd5098aSOCHyams!45 = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: !8, size: 64)
231fcd5098aSOCHyams!46 = !DILocalVariable(name: "i", scope: !7, file: !1, line: 24, type: !47)
232fcd5098aSOCHyams!47 = !DIBasicType(name: "int", size: 32, encoding: DW_ATE_signed)
233fcd5098aSOCHyams!48 = !DILocalVariable(name: "p", scope: !7, file: !1, line: 25, type: !18)
234fcd5098aSOCHyams!49 = distinct !DIAssignID()
235fcd5098aSOCHyams!50 = !DILocation(line: 0, scope: !7)
236fcd5098aSOCHyams!51 = !DILocation(line: 25, column: 3, scope: !7)
237fcd5098aSOCHyams!52 = !DILocation(line: 28, column: 9, scope: !53)
238fcd5098aSOCHyams!53 = distinct !DILexicalBlock(scope: !54, file: !1, line: 28, column: 9)
239fcd5098aSOCHyams!54 = distinct !DILexicalBlock(scope: !55, file: !1, line: 27, column: 3)
240fcd5098aSOCHyams!55 = distinct !DILexicalBlock(scope: !7, file: !1, line: 27, column: 3)
241fcd5098aSOCHyams!64 = !DILocation(line: 28, column: 9, scope: !54)
242fcd5098aSOCHyams!65 = !DILocation(line: 29, column: 13, scope: !53)
243fcd5098aSOCHyams!66 = !DILocation(line: 29, column: 17, scope: !53)
244fcd5098aSOCHyams!67 = !DILocation(line: 29, column: 9, scope: !53)
245fcd5098aSOCHyams!71 = distinct !DIAssignID()
246fcd5098aSOCHyams!72 = !DILocation(line: 29, column: 7, scope: !53)
247fcd5098aSOCHyams!73 = !DILocation(line: 31, column: 13, scope: !53)
248fcd5098aSOCHyams!74 = !DILocation(line: 31, column: 17, scope: !53)
249fcd5098aSOCHyams!75 = !DILocation(line: 31, column: 9, scope: !53)
250fcd5098aSOCHyams!76 = distinct !DIAssignID()
251fcd5098aSOCHyams!77 = !DILocation(line: 32, column: 3, scope: !7)
252fcd5098aSOCHyams!78 = !DILocation(line: 32, column: 5, scope: !7)
253fcd5098aSOCHyams!79 = !DILocation(line: 33, column: 1, scope: !7)
2544ece5073SOCHyams!1000 = !{i32 7, !"debug-info-assignment-tracking", i1 true}
255