Skip to content

Commit

Permalink
Improve the effectiveness of BDCE's debug info salvaging
Browse files Browse the repository at this point in the history
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
  • Loading branch information
adrian-prantl committed Sep 30, 2021
1 parent 981b12f commit 9232ca4
Show file tree
Hide file tree
Showing 2 changed files with 6 additions and 2 deletions.
7 changes: 5 additions & 2 deletions llvm/lib/Transforms/Scalar/BDCE.cpp
Expand Up @@ -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;
}
Expand Down Expand Up @@ -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();
Expand Down
1 change: 1 addition & 0 deletions 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 {
Expand Down

0 comments on commit 9232ca4

Please sign in to comment.