Skip to content

Commit 95cb833

Browse files
committed
fix #147511
1 parent 2599a9a commit 95cb833

File tree

2 files changed

+44
-0
lines changed

2 files changed

+44
-0
lines changed

llvm/lib/Transforms/Scalar/NewGVN.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4076,6 +4076,7 @@ bool NewGVN::eliminateInstructions(Function &F) {
40764076
if (!match(DefI, m_Intrinsic<Intrinsic::ssa_copy>()))
40774077
patchReplacementInstruction(DefI, DominatingLeader);
40784078

4079+
salvageDebugInfo(*DefI);
40794080
markInstructionForDeletion(DefI);
40804081
}
40814082
}
Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
; RUN: opt -S -passes=newgvn %s | FileCheck %s
2+
3+
; Check that eliminateInstruction() salvages the debug value of `Def` (`DefI`)
4+
; which is marked for deletion.
5+
6+
7+
define void @binop(i32 %x, i32 %y) !dbg !5 {
8+
; CHECK: #dbg_value(!DIArgList(i32 %y, i32 %x), [[META11:![0-9]+]], !DIExpression(DW_OP_LLVM_arg, 0, DW_OP_LLVM_arg, 1, DW_OP_plus, DW_OP_stack_value), [[META13:![0-9]+]])
9+
;
10+
%add1 = add i32 %x, %y, !dbg !12
11+
#dbg_value(i32 %add1, !9, !DIExpression(), !12)
12+
%add2 = add i32 %y, %x, !dbg !13
13+
#dbg_value(i32 %add2, !11, !DIExpression(), !13)
14+
call void @use(i32 %add1, i32 %add2), !dbg !14
15+
ret void, !dbg !15
16+
}
17+
18+
declare void @use(i32, i32)
19+
20+
!llvm.dbg.cu = !{!0}
21+
!llvm.debugify = !{!2, !3}
22+
!llvm.module.flags = !{!4}
23+
24+
!0 = distinct !DICompileUnit(language: DW_LANG_C, file: !1, producer: "debugify", isOptimized: true, runtimeVersion: 0, emissionKind: FullDebug)
25+
!1 = !DIFile(filename: "/app/example.ll", directory: "/")
26+
!2 = !{i32 4}
27+
!3 = !{i32 2}
28+
!4 = !{i32 2, !"Debug Info Version", i32 3}
29+
!5 = distinct !DISubprogram(name: "binop", linkageName: "binop", scope: null, file: !1, line: 1, type: !6, scopeLine: 1, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !0, retainedNodes: !8)
30+
!6 = !DISubroutineType(types: !7)
31+
!7 = !{}
32+
!8 = !{!9, !11}
33+
!9 = !DILocalVariable(name: "1", scope: !5, file: !1, line: 1, type: !10)
34+
!10 = !DIBasicType(name: "ty32", size: 32, encoding: DW_ATE_unsigned)
35+
!11 = !DILocalVariable(name: "2", scope: !5, file: !1, line: 2, type: !10)
36+
!12 = !DILocation(line: 1, column: 1, scope: !5)
37+
!13 = !DILocation(line: 2, column: 1, scope: !5)
38+
!14 = !DILocation(line: 3, column: 1, scope: !5)
39+
!15 = !DILocation(line: 4, column: 1, scope: !5)
40+
;.
41+
; CHECK: [[META11]] = !DILocalVariable(name: "2",
42+
; CHECK: [[META13]] = !DILocation(line: 2,
43+
;.

0 commit comments

Comments
 (0)