forked from OSchip/llvm-project
[NFC][SCEV] Refactor getAbsExpr() out of createSCEV()
This commit is contained in:
parent
be1678bdb9
commit
130cc662b5
|
@ -572,6 +572,7 @@ public:
|
|||
/// \p IndexExprs The expressions for the indices.
|
||||
const SCEV *getGEPExpr(GEPOperator *GEP,
|
||||
const SmallVectorImpl<const SCEV *> &IndexExprs);
|
||||
const SCEV *getAbsExpr(const SCEV *Op, bool IsNSW);
|
||||
const SCEV *getMinMaxExpr(unsigned Kind,
|
||||
SmallVectorImpl<const SCEV *> &Operands);
|
||||
const SCEV *getSMaxExpr(const SCEV *LHS, const SCEV *RHS);
|
||||
|
|
|
@ -3334,6 +3334,11 @@ ScalarEvolution::findExistingSCEVInCache(int SCEVType,
|
|||
UniqueSCEVs.FindNodeOrInsertPos(ID, IP), std::move(ID), IP);
|
||||
}
|
||||
|
||||
const SCEV *ScalarEvolution::getAbsExpr(const SCEV *Op, bool IsNSW) {
|
||||
SCEV::NoWrapFlags Flags = IsNSW ? SCEV::FlagNSW : SCEV::FlagAnyWrap;
|
||||
return getSMaxExpr(Op, getNegativeSCEV(Op, Flags));
|
||||
}
|
||||
|
||||
const SCEV *ScalarEvolution::getMinMaxExpr(unsigned Kind,
|
||||
SmallVectorImpl<const SCEV *> &Ops) {
|
||||
assert(!Ops.empty() && "Cannot get empty (u|s)(min|max)!");
|
||||
|
@ -6340,14 +6345,10 @@ const SCEV *ScalarEvolution::createSCEV(Value *V) {
|
|||
|
||||
if (auto *II = dyn_cast<IntrinsicInst>(U)) {
|
||||
switch (II->getIntrinsicID()) {
|
||||
case Intrinsic::abs: {
|
||||
const SCEV *Op = getSCEV(II->getArgOperand(0));
|
||||
SCEV::NoWrapFlags Flags =
|
||||
cast<ConstantInt>(II->getArgOperand(1))->isOne()
|
||||
? SCEV::FlagNSW
|
||||
: SCEV::FlagAnyWrap;
|
||||
return getSMaxExpr(Op, getNegativeSCEV(Op, Flags));
|
||||
}
|
||||
case Intrinsic::abs:
|
||||
return getAbsExpr(
|
||||
getSCEV(II->getArgOperand(0)),
|
||||
/*IsNSW=*/cast<ConstantInt>(II->getArgOperand(1))->isOne());
|
||||
case Intrinsic::umax:
|
||||
return getUMaxExpr(getSCEV(II->getArgOperand(0)),
|
||||
getSCEV(II->getArgOperand(1)));
|
||||
|
|
Loading…
Reference in New Issue