Fixes PR9730: indvars: An asserting value handle still pointed to this value

Modified LinearFunctionTestReplace to push the condition on the dead
list instead of eagerly deleting it. This can cause unnecessary
IV rewrites, which should have no effect on codegen and will not be an
issue once we stop generating canonical IVs.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@130340 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Andrew Trick 2011-04-27 23:00:03 +00:00
parent e1cdf84ee5
commit 685f07fac2
2 changed files with 7 additions and 6 deletions

View File

@ -275,7 +275,7 @@ ICmpInst *IndVarSimplify::LinearFunctionTestReplace(Loop *L,
// update the branch to use the new comparison; in the common case this
// will make old comparison dead.
BI->setCondition(Cond);
RecursivelyDeleteTriviallyDeadInstructions(OrigCond);
DeadInsts.push_back(OrigCond);
++NumLFTR;
Changed = true;

View File

@ -1,4 +1,4 @@
; RUN: opt < %s -indvars -S | grep icmp | grep next
; RUN: opt < %s -indvars -S | FileCheck %s
; PR4086
declare void @foo()
@ -6,13 +6,14 @@ define void @test() {
entry:
br label %loop_body
loop_body:
%i = phi float [ %nexti, %loop_body ], [ 0.0, %entry ]
loop_body:
%i = phi float [ %nexti, %loop_body ], [ 0.0, %entry ]
tail call void @foo()
%nexti = fadd float %i, 1.0
%less = fcmp olt float %nexti, 2.0
; CHECK: icmp ne i32 %{{[a-zA-Z$._0-9]+}}, 2
%less = fcmp olt float %nexti, 2.0
br i1 %less, label %loop_body, label %done
done:
done:
ret void
}