[llvm] 9232ca4 - Improve the effectiveness of BDCE's debug info salvaging
Adrian Prantl via llvm-commits
llvm-commits at lists.llvm.org
Thu Sep 30 09:29:16 PDT 2021
Author: Adrian Prantl
Date: 2021-09-30T09:28:49-07:00
New Revision: 9232ca4712cf3f3a99a8cd095165241daf0ddc4e
URL: https://github.com/llvm/llvm-project/commit/9232ca4712cf3f3a99a8cd095165241daf0ddc4e
DIFF: https://github.com/llvm/llvm-project/commit/9232ca4712cf3f3a99a8cd095165241daf0ddc4e.diff
LOG: Improve the effectiveness of BDCE's debug info salvaging
This patch improves the effectiveness of BDCE's debug info salvaging
by processing the instructions in reverse order and delaying
dropAllReferences until after debug info salvaging. This allows
salvaging of entire chains of deleted instructions!
Previously we would remove all references from an instruction, which
would make it impossible to use that instruction to salvage a later
instruction in the instruction stream, because its operands were
already removed.
This reapplies the previous patch with a fix for a use-after-free.
Differential Revision: https://reviews.llvm.org/D110568
Added:
Modified:
llvm/lib/Transforms/Scalar/BDCE.cpp
llvm/test/Transforms/Util/salvage-debuginfo.ll
Removed:
################################################################################
diff --git a/llvm/lib/Transforms/Scalar/BDCE.cpp b/llvm/lib/Transforms/Scalar/BDCE.cpp
index c06125788f37e..23ab17ffdde60 100644
--- a/llvm/lib/Transforms/Scalar/BDCE.cpp
+++ b/llvm/lib/Transforms/Scalar/BDCE.cpp
@@ -106,9 +106,7 @@ static bool bitTrackingDCE(Function &F, DemandedBits &DB) {
(I.getType()->isIntOrIntVectorTy() &&
DB.getDemandedBits(&I).isNullValue() &&
wouldInstructionBeTriviallyDead(&I))) {
- salvageDebugInfo(I);
Worklist.push_back(&I);
- I.dropAllReferences();
Changed = true;
continue;
}
@@ -155,6 +153,11 @@ static bool bitTrackingDCE(Function &F, DemandedBits &DB) {
}
}
+ for (Instruction *&I : llvm::reverse(Worklist)) {
+ salvageDebugInfo(*I);
+ I->dropAllReferences();
+ }
+
for (Instruction *&I : Worklist) {
++NumRemoved;
I->eraseFromParent();
diff --git a/llvm/test/Transforms/Util/salvage-debuginfo.ll b/llvm/test/Transforms/Util/salvage-debuginfo.ll
index ed1baa56017af..d72b239e31644 100644
--- a/llvm/test/Transforms/Util/salvage-debuginfo.ll
+++ b/llvm/test/Transforms/Util/salvage-debuginfo.ll
@@ -1,4 +1,5 @@
; RUN: opt -adce %s -S -o - | FileCheck %s
+; RUN: opt -bdce %s -S -o - | FileCheck %s
target datalayout = "e-m:o-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128"
target triple = "x86_64-apple-macosx"
define void @f(i32) !dbg !8 {
More information about the llvm-commits
mailing list