diff options
author | Andrew Trick <atrick@apple.com> | 2012-01-20 21:23:40 +0000 |
---|---|---|
committer | Andrew Trick <atrick@apple.com> | 2012-01-20 21:23:40 +0000 |
commit | b9c822ab0b096efca7955bff361ab64e91d0876c (patch) | |
tree | 326f305c71b4ea3c4c032f842cff1a57fa88e2d3 /llvm/lib/Transforms | |
parent | 16abc8a1e2dc1059e5168de3b9228af3eb7f3e95 (diff) | |
download | bcm5719-llvm-b9c822ab0b096efca7955bff361ab64e91d0876c.tar.gz bcm5719-llvm-b9c822ab0b096efca7955bff361ab64e91d0876c.zip |
Handle a corner case with IV chain collection with bailout instead of assert.
Fixes PR11783: bad cast to AddRecExpr.
llvm-svn: 148572
Diffstat (limited to 'llvm/lib/Transforms')
-rw-r--r-- | llvm/lib/Transforms/Scalar/LoopStrengthReduce.cpp | 8 |
1 files changed, 6 insertions, 2 deletions
diff --git a/llvm/lib/Transforms/Scalar/LoopStrengthReduce.cpp b/llvm/lib/Transforms/Scalar/LoopStrengthReduce.cpp index 42f45ae6273..5aee483332a 100644 --- a/llvm/lib/Transforms/Scalar/LoopStrengthReduce.cpp +++ b/llvm/lib/Transforms/Scalar/LoopStrengthReduce.cpp @@ -2484,11 +2484,15 @@ void LSRInstance::ChainInstruction(Instruction *UserInst, Instruction *IVOper, DEBUG(dbgs() << "IV Chain Limit\n"); return; } + LastIncExpr = SE.getSCEV(NextIV); + // IVUsers may have skipped over sign/zero extensions. We don't currently + // attempt to form chains involving extensions unless they can be hoisted + // into this loop's AddRec. + if (!isa<SCEVAddRecExpr>(LastIncExpr)) + return; ++NChains; IVChainVec.resize(NChains); ChainUsersVec.resize(NChains); - LastIncExpr = SE.getSCEV(NextIV); - assert(isa<SCEVAddRecExpr>(LastIncExpr) && "expect recurrence at IV user"); DEBUG(dbgs() << "IV Head: (" << *UserInst << ") IV=" << *LastIncExpr << "\n"); } |