diff options
Diffstat (limited to 'polly/lib/Support/ScopHelper.cpp')
| -rw-r--r-- | polly/lib/Support/ScopHelper.cpp | 43 |
1 files changed, 9 insertions, 34 deletions
diff --git a/polly/lib/Support/ScopHelper.cpp b/polly/lib/Support/ScopHelper.cpp index c97eedffcf1..8e7fb1edfff 100644 --- a/polly/lib/Support/ScopHelper.cpp +++ b/polly/lib/Support/ScopHelper.cpp @@ -246,27 +246,6 @@ private: const Region &R; ValueMapT *VMap; - const SCEV *visitGenericInst(const SCEVUnknown *E, Instruction *Inst, - Instruction *IP) { - if (!Inst || !R.contains(Inst)) - return E; - - assert(!Inst->mayThrow() && !Inst->mayReadOrWriteMemory() && - !isa<PHINode>(Inst)); - - auto *InstClone = Inst->clone(); - for (auto &Op : Inst->operands()) { - assert(SE.isSCEVable(Op->getType())); - auto *OpSCEV = SE.getSCEV(Op); - auto *OpClone = expandCodeFor(OpSCEV, Op->getType(), IP); - InstClone->replaceUsesOfWith(Op, OpClone); - } - - InstClone->setName(Name + Inst->getName()); - InstClone->insertBefore(IP); - return SE.getSCEV(InstClone); - } - const SCEV *visitUnknown(const SCEVUnknown *E) { // If a value mapping was given try if the underlying value is remapped. @@ -280,19 +259,15 @@ private: return visit(NewE); } - auto *EnteringBB = R.getEnteringBlock(); Instruction *Inst = dyn_cast<Instruction>(E->getValue()); - Instruction *IP; - if (Inst && !R.contains(Inst)) - IP = Inst; - else if (Inst && EnteringBB->getParent() == Inst->getFunction()) - IP = EnteringBB->getTerminator(); - else - IP = EnteringBB->getParent()->getEntryBlock().getTerminator(); - if (!Inst || (Inst->getOpcode() != Instruction::SRem && Inst->getOpcode() != Instruction::SDiv)) - return visitGenericInst(E, Inst, IP); + return E; + + if (!R.contains(Inst)) + return E; + + Instruction *StartIP = R.getEnteringBlock()->getTerminator(); const SCEV *LHSScev = SE.getSCEV(Inst->getOperand(0)); const SCEV *RHSScev = SE.getSCEV(Inst->getOperand(1)); @@ -300,11 +275,11 @@ private: if (!SE.isKnownNonZero(RHSScev)) RHSScev = SE.getUMaxExpr(RHSScev, SE.getConstant(E->getType(), 1)); - Value *LHS = expandCodeFor(LHSScev, E->getType(), IP); - Value *RHS = expandCodeFor(RHSScev, E->getType(), IP); + Value *LHS = expandCodeFor(LHSScev, E->getType(), StartIP); + Value *RHS = expandCodeFor(RHSScev, E->getType(), StartIP); Inst = BinaryOperator::Create((Instruction::BinaryOps)Inst->getOpcode(), - LHS, RHS, Inst->getName() + Name, IP); + LHS, RHS, Inst->getName() + Name, StartIP); return SE.getSCEV(Inst); } |

