Replace getSCEV with getSCEVAtScope

llvm-svn: 271881
This commit is contained in:
Johannes Doerfert 2016-06-06 10:07:40 +00:00
parent ba91a58e42
commit f643785b14
2 changed files with 10 additions and 4 deletions

View File

@ -90,6 +90,9 @@ private:
/// @brief Target data for element size computing.
const llvm::DataLayout &TD;
/// @brief Return the loop for the current block if any.
llvm::Loop *getScope();
/// @brief Return a PWACtx for @p PWA that is always valid.
__isl_give PWACtx getPWACtxFromPWA(__isl_take isl_pw_aff *PWA);

View File

@ -135,6 +135,8 @@ SCEVAffinator::~SCEVAffinator() {
freePWACtx(CachedPair.second);
}
Loop *SCEVAffinator::getScope() { return BB ? LI.getLoopFor(BB) : nullptr; }
void SCEVAffinator::interpretAsUnsigned(__isl_keep PWACtx &PWAC,
unsigned Width) {
auto *PWA = PWAC.first;
@ -169,7 +171,7 @@ __isl_give PWACtx SCEVAffinator::getPwAff(const SCEV *Expr, BasicBlock *BB) {
} else
NumIterators = 0;
auto *Scope = LI.getLoopFor(BB);
auto *Scope = getScope();
S->addParams(getParamsInAffineExpr(&S->getRegion(), Scope, Expr, SE));
return visit(Expr);
@ -529,14 +531,15 @@ __isl_give PWACtx SCEVAffinator::visitUDivExpr(const SCEVUDivExpr *Expr) {
__isl_give PWACtx SCEVAffinator::visitSDivInstruction(Instruction *SDiv) {
assert(SDiv->getOpcode() == Instruction::SDiv && "Assumed SDiv instruction!");
auto *Scope = getScope();
auto *Divisor = SDiv->getOperand(1);
auto *DivisorSCEV = SE.getSCEV(Divisor);
auto *DivisorSCEV = SE.getSCEVAtScope(Divisor, Scope);
auto DivisorPWAC = visit(DivisorSCEV);
assert(isa<ConstantInt>(Divisor) &&
"SDiv is no parameter but has a non-constant RHS.");
auto *Dividend = SDiv->getOperand(0);
auto *DividendSCEV = SE.getSCEV(Dividend);
auto *DividendSCEV = SE.getSCEVAtScope(Dividend, Scope);
auto DividendPWAC = visit(DividendSCEV);
combine(DividendPWAC, DivisorPWAC, isl_pw_aff_tdiv_q);
return DividendPWAC;
@ -551,7 +554,7 @@ __isl_give PWACtx SCEVAffinator::visitSRemInstruction(Instruction *SRem) {
/* isSigned */ true);
auto *Dividend = SRem->getOperand(0);
auto *DividendSCEV = SE.getSCEV(Dividend);
auto *DividendSCEV = SE.getSCEVAtScope(Dividend, getScope());
auto DividendPWAC = visit(DividendSCEV);
DividendPWAC.first =