summaryrefslogtreecommitdiffstats
path: root/polly/lib/Support/ScopHelper.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'polly/lib/Support/ScopHelper.cpp')
-rw-r--r--polly/lib/Support/ScopHelper.cpp43
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);
}
OpenPOWER on IntegriCloud