[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