forked from OSchip/llvm-project
[Reassociate] Removing instructions mutates the IR.
Fixes PR 30784. Discussed with Justin, who pointed out that in the new PassManager infrastructure we can have more fine-grained control on which analyses we want to preserve, but this is the best we can do with the current infrastructure. llvm-svn: 285380
This commit is contained in:
parent
02563cd3a6
commit
631cd27f29
|
@ -2198,8 +2198,10 @@ PreservedAnalyses ReassociatePass::run(Function &F, FunctionAnalysisManager &) {
|
|||
// trivially dead instructions have been removed.
|
||||
while (!ToRedo.empty()) {
|
||||
Instruction *I = ToRedo.pop_back_val();
|
||||
if (isInstructionTriviallyDead(I))
|
||||
if (isInstructionTriviallyDead(I)) {
|
||||
RecursivelyEraseDeadInsts(I, ToRedo);
|
||||
MadeChange = true;
|
||||
}
|
||||
}
|
||||
|
||||
// Now that we have removed dead instructions, we can reoptimize the
|
||||
|
|
|
@ -0,0 +1,16 @@
|
|||
; RUN: opt -inline -functionattrs -reassociate %s -S | FileCheck %s
|
||||
|
||||
; CHECK-NOT: func1
|
||||
; CHECK-LABEL: main
|
||||
; CHECK-NEXT: ret void
|
||||
|
||||
define internal i16 @func1() noinline #0 {
|
||||
ret i16 0
|
||||
}
|
||||
|
||||
define void @main(i16 %argc, i16** %argv) #0 {
|
||||
%_tmp0 = call i16 @func1()
|
||||
%_tmp2 = zext i16 %_tmp0 to i32
|
||||
ret void
|
||||
}
|
||||
attributes #0 = { minsize nounwind optsize }
|
Loading…
Reference in New Issue