diff options
author | Andrew Trick <atrick@apple.com> | 2011-10-15 06:19:55 +0000 |
---|---|---|
committer | Andrew Trick <atrick@apple.com> | 2011-10-15 06:19:55 +0000 |
commit | 365c9f1ff55bef134c6b9707f7df44d680ddabea (patch) | |
tree | edc2f1c2fa2fa67906158462fba8d4a8c96ccfab /lib/Analysis/ScalarEvolutionExpander.cpp | |
parent | 569c4a4767428d7b489db1e634ced5a3b36d8a1d (diff) |
Fix SCEVExpander assert during LSR: "argument of incompatible type".
Just because we're dealing with a GEP doesn't mean we can assert the
SCEV has a pointer type. The fix is simply to ignore the SCEV pointer
type, which we really didn't need.
Fixes PR11138 webkit crash.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@142058 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Analysis/ScalarEvolutionExpander.cpp')
-rw-r--r-- | lib/Analysis/ScalarEvolutionExpander.cpp | 11 |
1 files changed, 5 insertions, 6 deletions
diff --git a/lib/Analysis/ScalarEvolutionExpander.cpp b/lib/Analysis/ScalarEvolutionExpander.cpp index e76b6b10cf..47f0f32116 100644 --- a/lib/Analysis/ScalarEvolutionExpander.cpp +++ b/lib/Analysis/ScalarEvolutionExpander.cpp @@ -881,7 +881,7 @@ bool SCEVExpander::isNormalAddRecExprPHI(PHINode *PN, Instruction *IncV, /// should match any patterns generated by getAddRecExprPHILiterally and /// expandAddtoGEP. bool SCEVExpander::isExpandedAddRecExprPHI(PHINode *PN, Instruction *IncV, - const Loop *L, Type *ExpandTy) { + const Loop *L) { switch (IncV->getOpcode()) { // Check for a simple Add/Sub or GEP of a loop invariant step. case Instruction::Add: @@ -904,7 +904,7 @@ bool SCEVExpander::isExpandedAddRecExprPHI(PHINode *PN, Instruction *IncV, // i1* is used by the expander to represent an address-size element. if (IncV->getNumOperands() != 2) return false; - unsigned AS = cast<PointerType>(ExpandTy)->getAddressSpace(); + unsigned AS = cast<PointerType>(IncV->getType())->getAddressSpace(); if (IncV->getType() != Type::getInt1PtrTy(SE.getContext(), AS) && IncV->getType() != Type::getInt8PtrTy(SE.getContext(), AS)) return false; @@ -954,7 +954,7 @@ SCEVExpander::getAddRecExprPHILiterally(const SCEVAddRecExpr *Normalized, cast<Instruction>(PN->getIncomingValueForBlock(LatchBlock)); if (LSRMode) { - if (!isExpandedAddRecExprPHI(PN, IncV, L, ExpandTy)) + if (!isExpandedAddRecExprPHI(PN, IncV, L)) continue; } else { @@ -1547,9 +1547,8 @@ unsigned SCEVExpander::replaceCongruentIVs(Loop *L, const DominatorTree *DT, cast<Instruction>(Phi->getIncomingValueForBlock(LatchBlock)); // If this phi is more canonical, swap it with the original. - if (!isExpandedAddRecExprPHI(OrigPhiRef, OrigInc, L, - OrigPhiRef->getType()) - && isExpandedAddRecExprPHI(Phi, IsomorphicInc, L, Phi->getType())) { + if (!isExpandedAddRecExprPHI(OrigPhiRef, OrigInc, L) + && isExpandedAddRecExprPHI(Phi, IsomorphicInc, L)) { std::swap(OrigPhiRef, Phi); std::swap(OrigInc, IsomorphicInc); } |