[llvm-branch-commits] [llvm] release/19.x: [RemoveDIs] Simplify spliceDebugInfo, fixing splice-to-end edge case (#105670) (PR #106690)
via llvm-branch-commits
llvm-branch-commits at lists.llvm.org
Fri Aug 30 02:00:17 PDT 2024
llvmbot wrote:
<!--LLVM PR SUMMARY COMMENT-->
@llvm/pr-subscribers-llvm-ir
Author: None (llvmbot)
<details>
<summary>Changes</summary>
Backport f5815534d180c544bffd46f09c28b6fc334260fb
Requested by: @<!-- -->OCHyams
---
Full diff: https://github.com/llvm/llvm-project/pull/106690.diff
2 Files Affected:
- (modified) llvm/lib/IR/BasicBlock.cpp (+10-14)
- (modified) llvm/unittests/IR/BasicBlockDbgInfoTest.cpp (+2-2)
``````````diff
diff --git a/llvm/lib/IR/BasicBlock.cpp b/llvm/lib/IR/BasicBlock.cpp
index bf19934da047c4..0a9498f051cb59 100644
--- a/llvm/lib/IR/BasicBlock.cpp
+++ b/llvm/lib/IR/BasicBlock.cpp
@@ -961,9 +961,13 @@ void BasicBlock::spliceDebugInfoImpl(BasicBlock::iterator Dest, BasicBlock *Src,
// Detach the marker at Dest -- this lets us move the "====" DbgRecords
// around.
DbgMarker *DestMarker = nullptr;
- if (Dest != end()) {
- if ((DestMarker = getMarker(Dest)))
+ if ((DestMarker = getMarker(Dest))) {
+ if (Dest == end()) {
+ assert(DestMarker == getTrailingDbgRecords());
+ deleteTrailingDbgRecords();
+ } else {
DestMarker->removeFromParent();
+ }
}
// If we're moving the tail range of DbgRecords (":::"), absorb them into the
@@ -1005,22 +1009,14 @@ void BasicBlock::spliceDebugInfoImpl(BasicBlock::iterator Dest, BasicBlock *Src,
} else {
// Insert them right at the start of the range we moved, ahead of First
// and the "++++" DbgRecords.
+ // This also covers the rare circumstance where we insert at end(), and we
+ // did not generate the iterator with begin() / getFirstInsertionPt(),
+ // meaning any trailing debug-info at the end of the block would
+ // "normally" have been pushed in front of "First". We move it there now.
DbgMarker *FirstMarker = createMarker(First);
FirstMarker->absorbDebugValues(*DestMarker, true);
}
DestMarker->eraseFromParent();
- } else if (Dest == end() && !InsertAtHead) {
- // In the rare circumstance where we insert at end(), and we did not
- // generate the iterator with begin() / getFirstInsertionPt(), it means
- // any trailing debug-info at the end of the block would "normally" have
- // been pushed in front of "First". Move it there now.
- DbgMarker *TrailingDbgRecords = getTrailingDbgRecords();
- if (TrailingDbgRecords) {
- DbgMarker *FirstMarker = createMarker(First);
- FirstMarker->absorbDebugValues(*TrailingDbgRecords, true);
- TrailingDbgRecords->eraseFromParent();
- deleteTrailingDbgRecords();
- }
}
}
diff --git a/llvm/unittests/IR/BasicBlockDbgInfoTest.cpp b/llvm/unittests/IR/BasicBlockDbgInfoTest.cpp
index 91a0745a0cc76e..835780e63aaf4f 100644
--- a/llvm/unittests/IR/BasicBlockDbgInfoTest.cpp
+++ b/llvm/unittests/IR/BasicBlockDbgInfoTest.cpp
@@ -141,11 +141,11 @@ TEST(BasicBlockDbgInfoTest, SplitBasicBlockBefore) {
Function *F = M->getFunction("func");
BasicBlock &BB = F->getEntryBlock();
- auto I = std::prev(BB.end(), 2);
+ auto I = std::prev(BB.end(), 2); // store i32 2, ptr %1.
BB.splitBasicBlockBefore(I, "before");
BasicBlock &BBBefore = F->getEntryBlock();
- auto I2 = std::prev(BBBefore.end(), 2);
+ auto I2 = std::prev(BBBefore.end()); // br label %1 (new).
ASSERT_TRUE(I2->hasDbgRecords());
}
``````````
</details>
https://github.com/llvm/llvm-project/pull/106690
More information about the llvm-branch-commits
mailing list