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