[llvm] [DebugInfo][RemoveDIs] Handle DPValues in LCSSA (PR #72996)

via llvm-commits llvm-commits at lists.llvm.org
Tue Nov 21 06:38:09 PST 2023


llvmbot wrote:


<!--LLVM PR SUMMARY COMMENT-->

@llvm/pr-subscribers-debuginfo

Author: Jeremy Morse (jmorse)

<details>
<summary>Changes</summary>

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.

---
Full diff: https://github.com/llvm/llvm-project/pull/72996.diff


2 Files Affected:

- (modified) llvm/lib/Transforms/Utils/LCSSA.cpp (+19-2) 
- (modified) llvm/test/Transforms/LCSSA/rewrite-existing-dbg-values.ll (+1) 


``````````diff
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.
 ;

``````````

</details>


https://github.com/llvm/llvm-project/pull/72996


More information about the llvm-commits mailing list