[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:
Davide Italiano 2016-10-28 02:47:09 +00:00
parent 02563cd3a6
commit 631cd27f29
2 changed files with 19 additions and 1 deletions

View File

@ -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

View File

@ -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 }