diff options
author | Dan Gohman <gohman@apple.com> | 2011-03-02 01:34:10 +0000 |
---|---|---|
committer | Dan Gohman <gohman@apple.com> | 2011-03-02 01:34:10 +0000 |
commit | 0cbe91ba3bd84a5ef68a1d0de5df6e955690b0a4 (patch) | |
tree | 70b49aa1042c0fade036961d38957c37e3e26e66 | |
parent | f06e6c2ba717429936908254d53fa579bc941388 (diff) |
Don't re-use existing addrec expansions if they contain casts.
This fixes PR9259.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@126812 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r-- | lib/Analysis/ScalarEvolutionExpander.cpp | 3 | ||||
-rw-r--r-- | test/CodeGen/X86/lsr-quadratic-expand.ll | 22 |
2 files changed, 24 insertions, 1 deletions
diff --git a/lib/Analysis/ScalarEvolutionExpander.cpp b/lib/Analysis/ScalarEvolutionExpander.cpp index b7c110f28c..f2d23c4be7 100644 --- a/lib/Analysis/ScalarEvolutionExpander.cpp +++ b/lib/Analysis/ScalarEvolutionExpander.cpp @@ -858,7 +858,8 @@ SCEVExpander::getAddRecExprPHILiterally(const SCEVAddRecExpr *Normalized, // loop already visited by LSR for example, but it wouldn't have // to be. do { - if (IncV->getNumOperands() == 0 || isa<PHINode>(IncV)) { + if (IncV->getNumOperands() == 0 || isa<PHINode>(IncV) || + isa<CastInst>(IncV)) { IncV = 0; break; } diff --git a/test/CodeGen/X86/lsr-quadratic-expand.ll b/test/CodeGen/X86/lsr-quadratic-expand.ll new file mode 100644 index 0000000000..2bbb470929 --- /dev/null +++ b/test/CodeGen/X86/lsr-quadratic-expand.ll @@ -0,0 +1,22 @@ +; RUN: llc -march=x86-64 < %s + +define void @dw2102_i2c_transfer() nounwind { +entry: + br label %bb + +bb: ; preds = %bb, %entry + %z = phi i64 [ 0, %entry ], [ %z3, %bb ] + %z1 = phi i16 [ undef, %entry ], [ %z6, %bb ] + %z2 = phi i32 [ 0, %entry ], [ %z8, %bb ] + %z3 = add i64 %z, 1 + %z4 = zext i16 %z1 to i32 + %z5 = add nsw i32 %z4, %z2 + %z6 = trunc i32 %z5 to i16 + call fastcc void @dw210x_op_rw(i16 zeroext %z6) + %z7 = getelementptr i8* null, i64 %z + store i8 undef, i8* %z7, align 1 + %z8 = add nsw i32 %z2, 1 + br label %bb +} + +declare fastcc void @dw210x_op_rw(i16 zeroext) nounwind |