[llvm] [DebugInfo][RemoveDIs] Erase ranges of instructions individually (PR #81007)
via llvm-commits
llvm-commits at lists.llvm.org
Wed Feb 7 08:10:47 PST 2024
llvmbot wrote:
<!--LLVM PR SUMMARY COMMENT-->
@llvm/pr-subscribers-debuginfo
Author: Jeremy Morse (jmorse)
<details>
<summary>Changes</summary>
The BasicBlock::erase method simply removes a range of instructions from the instlist by unlinking them. However, now that we're attaching debug-info directly to instructions, some cleanup is required, so use eraseFromParent on each instruction instead.
This is less efficient, but rare, and seemingly only WASM EH Prepare uses this method of BasicBlock. Detected via a memory leak check in asan.
(asan is always the final boss for whatever I do).
---
Full diff: https://github.com/llvm/llvm-project/pull/81007.diff
1 Files Affected:
- (modified) llvm/lib/IR/BasicBlock.cpp (+3-1)
``````````diff
diff --git a/llvm/lib/IR/BasicBlock.cpp b/llvm/lib/IR/BasicBlock.cpp
index dca5283283847..0f89a8d8c8928 100644
--- a/llvm/lib/IR/BasicBlock.cpp
+++ b/llvm/lib/IR/BasicBlock.cpp
@@ -675,7 +675,9 @@ BasicBlock *BasicBlock::splitBasicBlockBefore(iterator I, const Twine &BBName) {
BasicBlock::iterator BasicBlock::erase(BasicBlock::iterator FromIt,
BasicBlock::iterator ToIt) {
- return InstList.erase(FromIt, ToIt);
+ for (Instruction &I : make_early_inc_range(make_range(FromIt, ToIt)))
+ I.eraseFromParent();
+ return ToIt;
}
void BasicBlock::replacePhiUsesWith(BasicBlock *Old, BasicBlock *New) {
``````````
</details>
https://github.com/llvm/llvm-project/pull/81007
More information about the llvm-commits
mailing list