forked from OSchip/llvm-project
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
This commit is contained in:
parent
981b12fe89
commit
9232ca4712
|
@ -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();
|
||||
|
|
|
@ -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 {
|
||||
|
|
Loading…
Reference in New Issue