[PATCH] D55333: VirtRegMap: Preserve LiveDebugVariables
Matt Arsenault via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Mon May 3 11:56:13 PDT 2021
arsenm updated this revision to Diff 342487.
arsenm added a comment.
Herald added a subscriber: kerbowa.
Add comment and test for double emission
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D55333/new/
https://reviews.llvm.org/D55333
Files:
llvm/lib/CodeGen/VirtRegMap.cpp
llvm/test/CodeGen/AMDGPU/debug-value.ll
Index: llvm/test/CodeGen/AMDGPU/debug-value.ll
===================================================================
--- llvm/test/CodeGen/AMDGPU/debug-value.ll
+++ llvm/test/CodeGen/AMDGPU/debug-value.ll
@@ -71,7 +71,10 @@
%tmp56 = fmul float %tmp55, %tmp50
%tmp57 = fmul float %tmp54, %tmp56
%tmp58 = fdiv float %tmp57, 0.000000e+00
+ ; Make sure this isn't double emitted
+ ; CHECK-NOT: ;DEBUG_VALUE:
; CHECK: ;DEBUG_VALUE: foo:var <- [DW_OP_constu 1, DW_OP_swap, DW_OP_xderef]
+ ; CHECK-NOT: ;DEBUG_VALUE:
call void @llvm.dbg.value(metadata <4 x float> %tmp29, metadata !3, metadata !DIExpression(DW_OP_constu, 1, DW_OP_swap, DW_OP_xderef)) #2, !dbg !5
%tmp59 = bitcast i64 %tmp35 to <2 x float>
%tmp60 = insertelement <2 x float> undef, float %tmp58, i32 0
Index: llvm/lib/CodeGen/VirtRegMap.cpp
===================================================================
--- llvm/lib/CodeGen/VirtRegMap.cpp
+++ llvm/lib/CodeGen/VirtRegMap.cpp
@@ -181,6 +181,7 @@
SlotIndexes *Indexes;
LiveIntervals *LIS;
VirtRegMap *VRM;
+ LiveDebugVariables *DebugVars;
DenseSet<Register> RewriteRegs;
bool ClearVirtRegs;
@@ -238,6 +239,10 @@
AU.addRequired<LiveStacks>();
AU.addPreserved<LiveStacks>();
AU.addRequired<VirtRegMap>();
+
+ if (!ClearVirtRegs)
+ AU.addPreserved<LiveDebugVariables>();
+
MachineFunctionPass::getAnalysisUsage(AU);
}
@@ -249,6 +254,7 @@
Indexes = &getAnalysis<SlotIndexes>();
LIS = &getAnalysis<LiveIntervals>();
VRM = &getAnalysis<VirtRegMap>();
+ DebugVars = getAnalysisIfAvailable<LiveDebugVariables>();
LLVM_DEBUG(dbgs() << "********** REWRITE VIRTUAL REGISTERS **********\n"
<< "********** Function: " << MF->getName() << '\n');
LLVM_DEBUG(VRM->dump());
@@ -262,10 +268,13 @@
// Rewrite virtual registers.
rewrite();
- // Write out new DBG_VALUE instructions.
- getAnalysis<LiveDebugVariables>().emitDebugValues(VRM);
+ if (DebugVars && ClearVirtRegs) {
+ // Write out new DBG_VALUE instructions.
+
+ // We only do this if ClearVirtRegs is specified since this should be the
+ // final run of the pass and we don't want to emit them multiple times.
+ DebugVars->emitDebugValues(VRM);
- if (ClearVirtRegs) {
// All machine operands and other references to virtual registers have been
// replaced. Remove the virtual registers and release all the transient data.
VRM->clearAllVirt();
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D55333.342487.patch
Type: text/x-patch
Size: 2436 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20210503/d72d2acc/attachment.bin>
More information about the llvm-commits
mailing list