[llvm] c1146f3 - [DebugInfo][RemoveDIs] Handle DPValues in LCSSA (#72996)
via llvm-commits
llvm-commits at lists.llvm.org
Wed Nov 22 07:11:00 PST 2023
Author: Jeremy Morse
Date: 2023-11-22T15:10:55Z
New Revision: c1146f306d2b924449d2b60943ec6fff1efa785d
URL: https://github.com/llvm/llvm-project/commit/c1146f306d2b924449d2b60943ec6fff1efa785d
DIFF: https://github.com/llvm/llvm-project/commit/c1146f306d2b924449d2b60943ec6fff1efa785d.diff
LOG: [DebugInfo][RemoveDIs] Handle DPValues in LCSSA (#72996)
LCSSA needs to manually update dbg.value intrinsic users of Values that
are having LCSSA PHIs inserted -- instrument it to do the same for
DPValues, the replacement for dbg.values.
This patch also contains an opportunistic fix replacing
instruction-insertion with iterator-insertion, necessary for
communicating debug-info in the future.
Added:
Modified:
llvm/lib/Transforms/Utils/LCSSA.cpp
llvm/test/Transforms/LCSSA/rewrite-existing-dbg-values.ll
Removed:
################################################################################
diff --git a/llvm/lib/Transforms/Utils/LCSSA.cpp b/llvm/lib/Transforms/Utils/LCSSA.cpp
index c36b0533580b97c..5e0c312fe149e73 100644
--- a/llvm/lib/Transforms/Utils/LCSSA.cpp
+++ b/llvm/lib/Transforms/Utils/LCSSA.cpp
@@ -160,7 +160,8 @@ bool llvm::formLCSSAForInstructions(SmallVectorImpl<Instruction *> &Worklist,
if (SSAUpdate.HasValueForBlock(ExitBB))
continue;
PHINode *PN = PHINode::Create(I->getType(), PredCache.size(ExitBB),
- I->getName() + ".lcssa", &ExitBB->front());
+ I->getName() + ".lcssa");
+ PN->insertBefore(ExitBB->begin());
if (InsertedPHIs)
InsertedPHIs->push_back(PN);
// Get the debug location from the original instruction.
@@ -241,7 +242,8 @@ bool llvm::formLCSSAForInstructions(SmallVectorImpl<Instruction *> &Worklist,
}
SmallVector<DbgValueInst *, 4> DbgValues;
- llvm::findDbgValues(DbgValues, I);
+ SmallVector<DPValue *, 4> DPValues;
+ llvm::findDbgValues(DbgValues, I, &DPValues);
// Update pre-existing debug value uses that reside outside the loop.
for (auto *DVI : DbgValues) {
@@ -257,6 +259,21 @@ bool llvm::formLCSSAForInstructions(SmallVectorImpl<Instruction *> &Worklist,
DVI->replaceVariableLocationOp(I, V);
}
+ // RemoveDIs: copy-paste of block above, using non-instruction debug-info
+ // records.
+ for (DPValue *DPV : DPValues) {
+ BasicBlock *UserBB = DPV->getMarker()->getParent();
+ if (InstBB == UserBB || L->contains(UserBB))
+ continue;
+ // We currently only handle debug values residing in blocks that were
+ // traversed while rewriting the uses. If we inserted just a single PHI,
+ // we will handle all relevant debug values.
+ Value *V = AddedPHIs.size() == 1 ? AddedPHIs[0]
+ : SSAUpdate.FindValueForBlock(UserBB);
+ if (V)
+ DPV->replaceVariableLocationOp(I, V);
+ }
+
// SSAUpdater might have inserted phi-nodes inside other loops. We'll need
// to post-process them to keep LCSSA form.
for (PHINode *InsertedPN : LocalInsertedPHIs) {
diff --git a/llvm/test/Transforms/LCSSA/rewrite-existing-dbg-values.ll b/llvm/test/Transforms/LCSSA/rewrite-existing-dbg-values.ll
index afd19ec0780f09d..f4b8fff5a0d738b 100644
--- a/llvm/test/Transforms/LCSSA/rewrite-existing-dbg-values.ll
+++ b/llvm/test/Transforms/LCSSA/rewrite-existing-dbg-values.ll
@@ -1,4 +1,5 @@
; RUN: opt -S -passes=lcssa < %s | FileCheck %s
+; RUN: opt -S -passes=lcssa < %s --try-experimental-debuginfo-iterators | FileCheck %s
; Reproducer for PR39019.
;
More information about the llvm-commits
mailing list