14ece5073SOCHyams; RUN: opt -passes=mem2reg -S %s -o - \ 20946e463SOCHyams; RUN: | FileCheck %s --implicit-check-not="call void @llvm.dbg" 3632f44e5SStephen Tozer; RUN: opt --try-experimental-debuginfo-iterators -passes=mem2reg -S %s -o - \ 4632f44e5SStephen Tozer; RUN: | FileCheck %s --implicit-check-not="call void @llvm.dbg" 50946e463SOCHyams 60946e463SOCHyams;; Test assignment tracking debug info when mem2reg promotes an alloca with 70946e463SOCHyams;; stores requiring insertion of a phi. Check the output when the stores are 80946e463SOCHyams;; tagged and also untagged (test manually updated for the latter by linking a 90946e463SOCHyams;; dbg.assgin for another variable "b" to the alloca). 100946e463SOCHyams 110946e463SOCHyams; CHECK: entry: 12*09457270SStephen Tozer; CHECK-NEXT: #dbg_value(i32 %a, ![[B:[0-9]+]] 13*09457270SStephen Tozer; CHECK-NEXT: #dbg_value(i32 %a, ![[A:[0-9]+]] 140946e463SOCHyams; CHECK: if.then: 150946e463SOCHyams; CHECK-NEXT: %add = 16*09457270SStephen Tozer; CHECK-NEXT: #dbg_value(i32 %add, ![[B]] 17*09457270SStephen Tozer; CHECK-NEXT: #dbg_value(i32 %add, ![[A]] 180946e463SOCHyams; CHECK: if.else: 19*09457270SStephen Tozer; CHECK-NEXT: #dbg_value(i32 -1, ![[B]] 20*09457270SStephen Tozer; CHECK-NEXT: #dbg_value(i32 -1, ![[A]] 210946e463SOCHyams; CHECK: if.end: 220946e463SOCHyams; CHECK-NEXT: %a.addr.0 = phi i32 23*09457270SStephen Tozer; CHECK-NEXT: #dbg_value(i32 %a.addr.0, ![[A]] 24*09457270SStephen Tozer; CHECK-NEXT: #dbg_value(i32 %a.addr.0, ![[B]] 250946e463SOCHyams 260946e463SOCHyams; CHECK-DAG: ![[A]] = !DILocalVariable(name: "a", 270946e463SOCHyams; CHECK-DAG: ![[B]] = !DILocalVariable(name: "b", 280946e463SOCHyams 290946e463SOCHyams;; $ cat test.cpp 300946e463SOCHyams;; int f(int a) { 310946e463SOCHyams;; if (a) 320946e463SOCHyams;; a += 1; 330946e463SOCHyams;; else 340946e463SOCHyams;; a = -1; 350946e463SOCHyams;; return a; 360946e463SOCHyams;; } 370946e463SOCHyams 380946e463SOCHyamsdefine dso_local noundef i32 @_Z1fi(i32 noundef %a) #0 !dbg !7 { 390946e463SOCHyamsentry: 400946e463SOCHyams %a.addr = alloca i32, align 4, !DIAssignID !13 4164bd607bSOCHyams call void @llvm.dbg.assign(metadata i1 undef, metadata !12, metadata !DIExpression(), metadata !13, metadata ptr %a.addr, metadata !DIExpression()), !dbg !14 4264bd607bSOCHyams call void @llvm.dbg.assign(metadata i1 undef, metadata !30, metadata !DIExpression(), metadata !13, metadata ptr %a.addr, metadata !DIExpression()), !dbg !14 4364bd607bSOCHyams store i32 %a, ptr %a.addr, align 4, !DIAssignID !19 4464bd607bSOCHyams call void @llvm.dbg.assign(metadata i32 %a, metadata !12, metadata !DIExpression(), metadata !19, metadata ptr %a.addr, metadata !DIExpression()), !dbg !14 4564bd607bSOCHyams %0 = load i32, ptr %a.addr, align 4, !dbg !20 460946e463SOCHyams %tobool = icmp ne i32 %0, 0, !dbg !20 470946e463SOCHyams br i1 %tobool, label %if.then, label %if.else, !dbg !22 480946e463SOCHyams 490946e463SOCHyamsif.then: ; preds = %entry 5064bd607bSOCHyams %1 = load i32, ptr %a.addr, align 4, !dbg !23 510946e463SOCHyams %add = add nsw i32 %1, 1, !dbg !23 5264bd607bSOCHyams store i32 %add, ptr %a.addr, align 4, !dbg !23, !DIAssignID !24 5364bd607bSOCHyams call void @llvm.dbg.assign(metadata i32 %add, metadata !12, metadata !DIExpression(), metadata !24, metadata ptr %a.addr, metadata !DIExpression()), !dbg !14 540946e463SOCHyams br label %if.end, !dbg !25 550946e463SOCHyams 560946e463SOCHyamsif.else: ; preds = %entry 5764bd607bSOCHyams store i32 -1, ptr %a.addr, align 4, !dbg !26, !DIAssignID !27 5864bd607bSOCHyams call void @llvm.dbg.assign(metadata i32 -1, metadata !12, metadata !DIExpression(), metadata !27, metadata ptr %a.addr, metadata !DIExpression()), !dbg !14 590946e463SOCHyams br label %if.end 600946e463SOCHyams 610946e463SOCHyamsif.end: ; preds = %if.else, %if.then 6264bd607bSOCHyams %2 = load i32, ptr %a.addr, align 4, !dbg !28 630946e463SOCHyams ret i32 %2, !dbg !29 640946e463SOCHyams} 650946e463SOCHyams 660946e463SOCHyamsdeclare void @llvm.dbg.assign(metadata, metadata, metadata, metadata, metadata, metadata) 670946e463SOCHyams 680946e463SOCHyams!llvm.dbg.cu = !{!0} 694ece5073SOCHyams!llvm.module.flags = !{!2, !3, !4, !5, !1000} 700946e463SOCHyams!llvm.ident = !{!6} 710946e463SOCHyams 720946e463SOCHyams!0 = distinct !DICompileUnit(language: DW_LANG_C_plus_plus_14, file: !1, producer: "clang version 14.0.0", isOptimized: true, runtimeVersion: 0, emissionKind: FullDebug, splitDebugInlining: false, nameTableKind: None) 730946e463SOCHyams!1 = !DIFile(filename: "test.cpp", directory: "/") 740946e463SOCHyams!2 = !{i32 7, !"Dwarf Version", i32 5} 750946e463SOCHyams!3 = !{i32 2, !"Debug Info Version", i32 3} 760946e463SOCHyams!4 = !{i32 1, !"wchar_size", i32 4} 770946e463SOCHyams!5 = !{i32 7, !"uwtable", i32 1} 780946e463SOCHyams!6 = !{!"clang version 14.0.0"} 790946e463SOCHyams!7 = distinct !DISubprogram(name: "f", linkageName: "_Z1fi", scope: !1, file: !1, line: 1, type: !8, scopeLine: 1, flags: DIFlagPrototyped | DIFlagAllCallsDescribed, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !0, retainedNodes: !11) 800946e463SOCHyams!8 = !DISubroutineType(types: !9) 810946e463SOCHyams!9 = !{!10, !10} 820946e463SOCHyams!10 = !DIBasicType(name: "int", size: 32, encoding: DW_ATE_signed) 830946e463SOCHyams!11 = !{!12} 840946e463SOCHyams!12 = !DILocalVariable(name: "a", arg: 1, scope: !7, file: !1, line: 1, type: !10) 850946e463SOCHyams!13 = distinct !DIAssignID() 860946e463SOCHyams!14 = !DILocation(line: 0, scope: !7) 870946e463SOCHyams!19 = distinct !DIAssignID() 880946e463SOCHyams!20 = !DILocation(line: 2, column: 7, scope: !21) 890946e463SOCHyams!21 = distinct !DILexicalBlock(scope: !7, file: !1, line: 2, column: 7) 900946e463SOCHyams!22 = !DILocation(line: 2, column: 7, scope: !7) 910946e463SOCHyams!23 = !DILocation(line: 3, column: 7, scope: !21) 920946e463SOCHyams!24 = distinct !DIAssignID() 930946e463SOCHyams!25 = !DILocation(line: 3, column: 5, scope: !21) 940946e463SOCHyams!26 = !DILocation(line: 5, column: 7, scope: !21) 950946e463SOCHyams!27 = distinct !DIAssignID() 960946e463SOCHyams!28 = !DILocation(line: 6, column: 10, scope: !7) 970946e463SOCHyams!29 = !DILocation(line: 6, column: 3, scope: !7) 980946e463SOCHyams!30 = !DILocalVariable(name: "b", arg: 2, scope: !7, file: !1, line: 1, type: !10) 994ece5073SOCHyams!1000 = !{i32 7, !"debug-info-assignment-tracking", i1 true} 100