mirror of
https://github.com/RPCSX/llvm.git
synced 2024-12-12 06:06:19 +00:00
[SCEV] Introduce ScalarEvolution::getOne and getZero.
Summary: It is fairly common to call SE->getConstant(Ty, 0) or SE->getConstant(Ty, 1); this change makes such uses a little bit briefer. I've refactored the call sites I could find easily to use getZero / getOne. Reviewers: hfinkel, majnemer, reames Subscribers: sanjoy, llvm-commits Differential Revision: http://reviews.llvm.org/D12947 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@248362 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
1be7ea773a
commit
6d6e2b5a35
@ -679,6 +679,12 @@ namespace llvm {
|
||||
const SCEV *getUnknown(Value *V);
|
||||
const SCEV *getCouldNotCompute();
|
||||
|
||||
/// \brief Return a SCEV for the constant 0 of a specific type.
|
||||
const SCEV *getZero(Type *Ty) { return getConstant(Ty, 0); }
|
||||
|
||||
/// \brief Return a SCEV for the constant 1 of a specific type.
|
||||
const SCEV *getOne(Type *Ty) { return getConstant(Ty, 1); }
|
||||
|
||||
/// Return an expression for sizeof AllocTy that is type IntTy
|
||||
///
|
||||
const SCEV *getSizeOfExpr(Type *IntTy, Type *AllocTy);
|
||||
|
@ -372,7 +372,7 @@ void DependenceAnalysis::Constraint::setLine(const SCEV *AA,
|
||||
void DependenceAnalysis::Constraint::setDistance(const SCEV *D,
|
||||
const Loop *CurLoop) {
|
||||
Kind = Distance;
|
||||
A = SE->getConstant(D->getType(), 1);
|
||||
A = SE->getOne(D->getType());
|
||||
B = SE->getNegativeSCEV(A);
|
||||
C = SE->getNegativeSCEV(D);
|
||||
AssociatedLoop = CurLoop;
|
||||
@ -1257,11 +1257,9 @@ bool DependenceAnalysis::weakCrossingSIVtest(const SCEV *Coeff,
|
||||
assert(SE->isKnownPositive(ConstCoeff) && "ConstCoeff should be positive");
|
||||
|
||||
// compute SplitIter for use by DependenceAnalysis::getSplitIteration()
|
||||
SplitIter =
|
||||
SE->getUDivExpr(SE->getSMaxExpr(SE->getConstant(Delta->getType(), 0),
|
||||
Delta),
|
||||
SE->getMulExpr(SE->getConstant(Delta->getType(), 2),
|
||||
ConstCoeff));
|
||||
SplitIter = SE->getUDivExpr(
|
||||
SE->getSMaxExpr(SE->getZero(Delta->getType()), Delta),
|
||||
SE->getMulExpr(SE->getConstant(Delta->getType(), 2), ConstCoeff));
|
||||
DEBUG(dbgs() << "\t Split iter = " << *SplitIter << "\n");
|
||||
|
||||
const SCEVConstant *ConstDelta = dyn_cast<SCEVConstant>(Delta);
|
||||
@ -1303,7 +1301,7 @@ bool DependenceAnalysis::weakCrossingSIVtest(const SCEV *Coeff,
|
||||
return true;
|
||||
}
|
||||
Result.DV[Level].Splitable = false;
|
||||
Result.DV[Level].Distance = SE->getConstant(Delta->getType(), 0);
|
||||
Result.DV[Level].Distance = SE->getZero(Delta->getType());
|
||||
return false;
|
||||
}
|
||||
}
|
||||
@ -1666,8 +1664,8 @@ bool DependenceAnalysis::weakZeroSrcSIVtest(const SCEV *DstCoeff,
|
||||
Level--;
|
||||
Result.Consistent = false;
|
||||
const SCEV *Delta = SE->getMinusSCEV(SrcConst, DstConst);
|
||||
NewConstraint.setLine(SE->getConstant(Delta->getType(), 0),
|
||||
DstCoeff, Delta, CurLoop);
|
||||
NewConstraint.setLine(SE->getZero(Delta->getType()), DstCoeff, Delta,
|
||||
CurLoop);
|
||||
DEBUG(dbgs() << "\t Delta = " << *Delta << "\n");
|
||||
if (isKnownPredicate(CmpInst::ICMP_EQ, SrcConst, DstConst)) {
|
||||
if (Level < CommonLevels) {
|
||||
@ -1776,8 +1774,8 @@ bool DependenceAnalysis::weakZeroDstSIVtest(const SCEV *SrcCoeff,
|
||||
Level--;
|
||||
Result.Consistent = false;
|
||||
const SCEV *Delta = SE->getMinusSCEV(DstConst, SrcConst);
|
||||
NewConstraint.setLine(SrcCoeff, SE->getConstant(Delta->getType(), 0),
|
||||
Delta, CurLoop);
|
||||
NewConstraint.setLine(SrcCoeff, SE->getZero(Delta->getType()), Delta,
|
||||
CurLoop);
|
||||
DEBUG(dbgs() << "\t Delta = " << *Delta << "\n");
|
||||
if (isKnownPredicate(CmpInst::ICMP_EQ, DstConst, SrcConst)) {
|
||||
if (Level < CommonLevels) {
|
||||
@ -2729,10 +2727,10 @@ void DependenceAnalysis::findBoundsALL(CoefficientInfo *A,
|
||||
// If the difference is 0, we won't need to know the number of iterations.
|
||||
if (isKnownPredicate(CmpInst::ICMP_EQ, A[K].NegPart, B[K].PosPart))
|
||||
Bound[K].Lower[Dependence::DVEntry::ALL] =
|
||||
SE->getConstant(A[K].Coeff->getType(), 0);
|
||||
SE->getZero(A[K].Coeff->getType());
|
||||
if (isKnownPredicate(CmpInst::ICMP_EQ, A[K].PosPart, B[K].NegPart))
|
||||
Bound[K].Upper[Dependence::DVEntry::ALL] =
|
||||
SE->getConstant(A[K].Coeff->getType(), 0);
|
||||
SE->getZero(A[K].Coeff->getType());
|
||||
}
|
||||
}
|
||||
|
||||
@ -2801,9 +2799,8 @@ void DependenceAnalysis::findBoundsLT(CoefficientInfo *A,
|
||||
Bound[K].Lower[Dependence::DVEntry::LT] = nullptr; // Default value = -infinity.
|
||||
Bound[K].Upper[Dependence::DVEntry::LT] = nullptr; // Default value = +infinity.
|
||||
if (Bound[K].Iterations) {
|
||||
const SCEV *Iter_1 =
|
||||
SE->getMinusSCEV(Bound[K].Iterations,
|
||||
SE->getConstant(Bound[K].Iterations->getType(), 1));
|
||||
const SCEV *Iter_1 = SE->getMinusSCEV(
|
||||
Bound[K].Iterations, SE->getOne(Bound[K].Iterations->getType()));
|
||||
const SCEV *NegPart =
|
||||
getNegativePart(SE->getMinusSCEV(A[K].NegPart, B[K].Coeff));
|
||||
Bound[K].Lower[Dependence::DVEntry::LT] =
|
||||
@ -2848,9 +2845,8 @@ void DependenceAnalysis::findBoundsGT(CoefficientInfo *A,
|
||||
Bound[K].Lower[Dependence::DVEntry::GT] = nullptr; // Default value = -infinity.
|
||||
Bound[K].Upper[Dependence::DVEntry::GT] = nullptr; // Default value = +infinity.
|
||||
if (Bound[K].Iterations) {
|
||||
const SCEV *Iter_1 =
|
||||
SE->getMinusSCEV(Bound[K].Iterations,
|
||||
SE->getConstant(Bound[K].Iterations->getType(), 1));
|
||||
const SCEV *Iter_1 = SE->getMinusSCEV(
|
||||
Bound[K].Iterations, SE->getOne(Bound[K].Iterations->getType()));
|
||||
const SCEV *NegPart =
|
||||
getNegativePart(SE->getMinusSCEV(A[K].Coeff, B[K].PosPart));
|
||||
Bound[K].Lower[Dependence::DVEntry::GT] =
|
||||
@ -2875,13 +2871,13 @@ void DependenceAnalysis::findBoundsGT(CoefficientInfo *A,
|
||||
|
||||
// X^+ = max(X, 0)
|
||||
const SCEV *DependenceAnalysis::getPositivePart(const SCEV *X) const {
|
||||
return SE->getSMaxExpr(X, SE->getConstant(X->getType(), 0));
|
||||
return SE->getSMaxExpr(X, SE->getZero(X->getType()));
|
||||
}
|
||||
|
||||
|
||||
// X^- = min(X, 0)
|
||||
const SCEV *DependenceAnalysis::getNegativePart(const SCEV *X) const {
|
||||
return SE->getSMinExpr(X, SE->getConstant(X->getType(), 0));
|
||||
return SE->getSMinExpr(X, SE->getZero(X->getType()));
|
||||
}
|
||||
|
||||
|
||||
@ -2892,7 +2888,7 @@ DependenceAnalysis::CoefficientInfo *
|
||||
DependenceAnalysis::collectCoeffInfo(const SCEV *Subscript,
|
||||
bool SrcFlag,
|
||||
const SCEV *&Constant) const {
|
||||
const SCEV *Zero = SE->getConstant(Subscript->getType(), 0);
|
||||
const SCEV *Zero = SE->getZero(Subscript->getType());
|
||||
CoefficientInfo *CI = new CoefficientInfo[MaxLevels + 1];
|
||||
for (unsigned K = 1; K <= MaxLevels; ++K) {
|
||||
CI[K].Coeff = Zero;
|
||||
@ -2976,7 +2972,7 @@ const SCEV *DependenceAnalysis::findCoefficient(const SCEV *Expr,
|
||||
const Loop *TargetLoop) const {
|
||||
const SCEVAddRecExpr *AddRec = dyn_cast<SCEVAddRecExpr>(Expr);
|
||||
if (!AddRec)
|
||||
return SE->getConstant(Expr->getType(), 0);
|
||||
return SE->getZero(Expr->getType());
|
||||
if (AddRec->getLoop() == TargetLoop)
|
||||
return AddRec->getStepRecurrence(*SE);
|
||||
return findCoefficient(AddRec->getStart(), TargetLoop);
|
||||
|
@ -898,8 +898,8 @@ private:
|
||||
SCEVDivision(ScalarEvolution &S, const SCEV *Numerator,
|
||||
const SCEV *Denominator)
|
||||
: SE(S), Denominator(Denominator) {
|
||||
Zero = SE.getConstant(Denominator->getType(), 0);
|
||||
One = SE.getConstant(Denominator->getType(), 1);
|
||||
Zero = SE.getZero(Denominator->getType());
|
||||
One = SE.getOne(Denominator->getType());
|
||||
|
||||
// We generally do not know how to divide Expr by Denominator. We
|
||||
// initialize the division to a "cannot divide" state to simplify the rest
|
||||
@ -1743,8 +1743,8 @@ const SCEV *ScalarEvolution::getSignExtendExpr(const SCEV *Op,
|
||||
if (C1.isStrictlyPositive() && C2.isStrictlyPositive() && C2.ugt(C1) &&
|
||||
C2.isPowerOf2()) {
|
||||
Start = getSignExtendExpr(Start, Ty);
|
||||
const SCEV *NewAR = getAddRecExpr(getConstant(AR->getType(), 0), Step,
|
||||
L, AR->getNoWrapFlags());
|
||||
const SCEV *NewAR = getAddRecExpr(getZero(AR->getType()), Step, L,
|
||||
AR->getNoWrapFlags());
|
||||
return getAddExpr(Start, getSignExtendExpr(NewAR, Ty));
|
||||
}
|
||||
}
|
||||
@ -2120,7 +2120,7 @@ const SCEV *ScalarEvolution::getAddExpr(SmallVectorImpl<const SCEV *> &Ops,
|
||||
Ops.push_back(getMulExpr(getConstant(I->first),
|
||||
getAddExpr(I->second)));
|
||||
if (Ops.empty())
|
||||
return getConstant(Ty, 0);
|
||||
return getZero(Ty);
|
||||
if (Ops.size() == 1)
|
||||
return Ops[0];
|
||||
return getAddExpr(Ops);
|
||||
@ -2148,7 +2148,7 @@ const SCEV *ScalarEvolution::getAddExpr(SmallVectorImpl<const SCEV *> &Ops,
|
||||
MulOps.append(Mul->op_begin()+MulOp+1, Mul->op_end());
|
||||
InnerMul = getMulExpr(MulOps);
|
||||
}
|
||||
const SCEV *One = getConstant(Ty, 1);
|
||||
const SCEV *One = getOne(Ty);
|
||||
const SCEV *AddOne = getAddExpr(One, InnerMul);
|
||||
const SCEV *OuterMul = getMulExpr(AddOne, MulOpSCEV);
|
||||
if (Ops.size() == 2) return OuterMul;
|
||||
@ -2540,7 +2540,7 @@ const SCEV *ScalarEvolution::getMulExpr(SmallVectorImpl<const SCEV *> &Ops,
|
||||
SmallVector<const SCEV*, 7> AddRecOps;
|
||||
for (int x = 0, xe = AddRec->getNumOperands() +
|
||||
OtherAddRec->getNumOperands() - 1; x != xe && !Overflow; ++x) {
|
||||
const SCEV *Term = getConstant(Ty, 0);
|
||||
const SCEV *Term = getZero(Ty);
|
||||
for (int y = x, ye = 2*x+1; y != ye && !Overflow; ++y) {
|
||||
uint64_t Coeff1 = Choose(x, 2*x - y, Overflow);
|
||||
for (int z = std::max(y-x, y-(int)AddRec->getNumOperands()+1),
|
||||
@ -2920,7 +2920,7 @@ ScalarEvolution::getGEPExpr(Type *PointeeType, const SCEV *BaseExpr,
|
||||
// adds.
|
||||
SCEV::NoWrapFlags Wrap = InBounds ? SCEV::FlagNSW : SCEV::FlagAnyWrap;
|
||||
|
||||
const SCEV *TotalOffset = getConstant(IntPtrTy, 0);
|
||||
const SCEV *TotalOffset = getZero(IntPtrTy);
|
||||
// The address space is unimportant. The first thing we do on CurTy is getting
|
||||
// its element type.
|
||||
Type *CurTy = PointerType::getUnqual(PointeeType);
|
||||
@ -3349,7 +3349,7 @@ const SCEV *ScalarEvolution::getMinusSCEV(const SCEV *LHS, const SCEV *RHS,
|
||||
SCEV::NoWrapFlags Flags) {
|
||||
// Fast path: X - X --> 0.
|
||||
if (LHS == RHS)
|
||||
return getConstant(LHS->getType(), 0);
|
||||
return getZero(LHS->getType());
|
||||
|
||||
// We represent LHS - RHS as LHS + (-1)*RHS. This transformation
|
||||
// makes it so that we cannot make much use of NUW.
|
||||
@ -4177,7 +4177,7 @@ const SCEV *ScalarEvolution::createSCEV(Value *V) {
|
||||
else if (ConstantInt *CI = dyn_cast<ConstantInt>(V))
|
||||
return getConstant(CI);
|
||||
else if (isa<ConstantPointerNull>(V))
|
||||
return getConstant(V->getType(), 0);
|
||||
return getZero(V->getType());
|
||||
else if (GlobalAlias *GA = dyn_cast<GlobalAlias>(V))
|
||||
return GA->mayBeOverridden() ? getUnknown(V) : getSCEV(GA->getAliasee());
|
||||
else
|
||||
@ -4529,7 +4529,7 @@ const SCEV *ScalarEvolution::createSCEV(Value *V) {
|
||||
if (getTypeSizeInBits(LHS->getType()) <=
|
||||
getTypeSizeInBits(U->getType()) &&
|
||||
isa<ConstantInt>(RHS) && cast<ConstantInt>(RHS)->isZero()) {
|
||||
const SCEV *One = getConstant(U->getType(), 1);
|
||||
const SCEV *One = getOne(U->getType());
|
||||
const SCEV *LS = getNoopOrZeroExtend(getSCEV(LHS), U->getType());
|
||||
const SCEV *LA = getSCEV(U->getOperand(1));
|
||||
const SCEV *RA = getSCEV(U->getOperand(2));
|
||||
@ -4544,7 +4544,7 @@ const SCEV *ScalarEvolution::createSCEV(Value *V) {
|
||||
if (getTypeSizeInBits(LHS->getType()) <=
|
||||
getTypeSizeInBits(U->getType()) &&
|
||||
isa<ConstantInt>(RHS) && cast<ConstantInt>(RHS)->isZero()) {
|
||||
const SCEV *One = getConstant(U->getType(), 1);
|
||||
const SCEV *One = getOne(U->getType());
|
||||
const SCEV *LS = getNoopOrZeroExtend(getSCEV(LHS), U->getType());
|
||||
const SCEV *LA = getSCEV(U->getOperand(1));
|
||||
const SCEV *RA = getSCEV(U->getOperand(2));
|
||||
@ -4641,8 +4641,7 @@ ScalarEvolution::getSmallConstantTripMultiple(Loop *L,
|
||||
return 1;
|
||||
|
||||
// Get the trip count from the BE count by adding 1.
|
||||
const SCEV *TCMul = getAddExpr(ExitCount,
|
||||
getConstant(ExitCount->getType(), 1));
|
||||
const SCEV *TCMul = getAddExpr(ExitCount, getOne(ExitCount->getType()));
|
||||
// FIXME: SCEV distributes multiplication as V1*C1 + V2*C1. We could attempt
|
||||
// to factor simple cases.
|
||||
if (const SCEVMulExpr *Mul = dyn_cast<SCEVMulExpr>(TCMul))
|
||||
@ -5197,7 +5196,7 @@ ScalarEvolution::ComputeExitLimitFromCond(const Loop *L,
|
||||
return getCouldNotCompute();
|
||||
else
|
||||
// The backedge is never taken.
|
||||
return getConstant(CI->getType(), 0);
|
||||
return getZero(CI->getType());
|
||||
}
|
||||
|
||||
// If it's not an integer or pointer comparison then compute it the hard way.
|
||||
@ -6372,7 +6371,7 @@ ScalarEvolution::HowFarToNonZero(const SCEV *V, const Loop *L) {
|
||||
// already. If so, the backedge will execute zero times.
|
||||
if (const SCEVConstant *C = dyn_cast<SCEVConstant>(V)) {
|
||||
if (!C->getValue()->isNullValue())
|
||||
return getConstant(C->getType(), 0);
|
||||
return getZero(C->getType());
|
||||
return getCouldNotCompute(); // Otherwise it will loop infinitely.
|
||||
}
|
||||
|
||||
@ -7510,7 +7509,7 @@ bool ScalarEvolution::doesIVOverflowOnLT(const SCEV *RHS, const SCEV *Stride,
|
||||
if (NoWrap) return false;
|
||||
|
||||
unsigned BitWidth = getTypeSizeInBits(RHS->getType());
|
||||
const SCEV *One = getConstant(Stride->getType(), 1);
|
||||
const SCEV *One = getOne(Stride->getType());
|
||||
|
||||
if (IsSigned) {
|
||||
APInt MaxRHS = getSignedRange(RHS).getSignedMax();
|
||||
@ -7539,7 +7538,7 @@ bool ScalarEvolution::doesIVOverflowOnGT(const SCEV *RHS, const SCEV *Stride,
|
||||
if (NoWrap) return false;
|
||||
|
||||
unsigned BitWidth = getTypeSizeInBits(RHS->getType());
|
||||
const SCEV *One = getConstant(Stride->getType(), 1);
|
||||
const SCEV *One = getOne(Stride->getType());
|
||||
|
||||
if (IsSigned) {
|
||||
APInt MinRHS = getSignedRange(RHS).getSignedMin();
|
||||
@ -7564,7 +7563,7 @@ bool ScalarEvolution::doesIVOverflowOnGT(const SCEV *RHS, const SCEV *Stride,
|
||||
// stride and presence of the equality in the comparison.
|
||||
const SCEV *ScalarEvolution::computeBECount(const SCEV *Delta, const SCEV *Step,
|
||||
bool Equality) {
|
||||
const SCEV *One = getConstant(Step->getType(), 1);
|
||||
const SCEV *One = getOne(Step->getType());
|
||||
Delta = Equality ? getAddExpr(Delta, Step)
|
||||
: getAddExpr(Delta, getMinusSCEV(Step, One));
|
||||
return getUDivExpr(Delta, Step);
|
||||
@ -7753,7 +7752,7 @@ const SCEV *SCEVAddRecExpr::getNumIterationsInRange(ConstantRange Range,
|
||||
if (const SCEVConstant *SC = dyn_cast<SCEVConstant>(getStart()))
|
||||
if (!SC->getValue()->isZero()) {
|
||||
SmallVector<const SCEV *, 4> Operands(op_begin(), op_end());
|
||||
Operands[0] = SE.getConstant(SC->getType(), 0);
|
||||
Operands[0] = SE.getZero(SC->getType());
|
||||
const SCEV *Shifted = SE.getAddRecExpr(Operands, getLoop(),
|
||||
getNoWrapFlags(FlagNW));
|
||||
if (const SCEVAddRecExpr *ShiftedAddRec =
|
||||
@ -7778,7 +7777,7 @@ const SCEV *SCEVAddRecExpr::getNumIterationsInRange(ConstantRange Range,
|
||||
// iteration exits.
|
||||
unsigned BitWidth = SE.getTypeSizeInBits(getType());
|
||||
if (!Range.contains(APInt(BitWidth, 0)))
|
||||
return SE.getConstant(getType(), 0);
|
||||
return SE.getZero(getType());
|
||||
|
||||
if (isAffine()) {
|
||||
// If this is an affine expression then we have this situation:
|
||||
|
@ -546,7 +546,7 @@ bool PPCCTRLoops::convertToCTRLoop(Loop *L) {
|
||||
if (!ExitCount->getType()->isPointerTy() &&
|
||||
ExitCount->getType() != CountType)
|
||||
ExitCount = SE->getZeroExtendExpr(ExitCount, CountType);
|
||||
ExitCount = SE->getAddExpr(ExitCount, SE->getConstant(CountType, 1));
|
||||
ExitCount = SE->getAddExpr(ExitCount, SE->getOne(CountType));
|
||||
Value *ECValue =
|
||||
SCEVE.expandCodeFor(ExitCount, CountType, Preheader->getTerminator());
|
||||
|
||||
|
@ -270,7 +270,7 @@ bool AlignmentFromAssumptions::extractAlignmentInfo(CallInst *I,
|
||||
OffSCEV = nullptr;
|
||||
if (PtrToIntInst *PToI = dyn_cast<PtrToIntInst>(AndLHS)) {
|
||||
AAPtr = PToI->getPointerOperand();
|
||||
OffSCEV = SE->getConstant(Int64Ty, 0);
|
||||
OffSCEV = SE->getZero(Int64Ty);
|
||||
} else if (const SCEVAddExpr* AndLHSAddSCEV =
|
||||
dyn_cast<SCEVAddExpr>(AndLHSSCEV)) {
|
||||
// Try to find the ptrtoint; subtract it and the rest is the offset.
|
||||
|
@ -1796,7 +1796,7 @@ LinearFunctionTestReplace(Loop *L,
|
||||
// This addition may overflow, which is valid as long as the comparison is
|
||||
// truncated to BackedgeTakenCount->getType().
|
||||
IVCount = SE->getAddExpr(BackedgeTakenCount,
|
||||
SE->getConstant(BackedgeTakenCount->getType(), 1));
|
||||
SE->getOne(BackedgeTakenCount->getType()));
|
||||
// The BackedgeTaken expression contains the number of times that the
|
||||
// backedge branches to the loop header. This is one less than the
|
||||
// number of times the loop executes, so use the incremented indvar.
|
||||
|
@ -531,7 +531,7 @@ bool LoopIdiomRecognize::processLoopStridedStore(
|
||||
BECount = SE->getTruncateOrZeroExtend(BECount, IntPtr);
|
||||
|
||||
const SCEV *NumBytesS =
|
||||
SE->getAddExpr(BECount, SE->getConstant(IntPtr, 1), SCEV::FlagNUW);
|
||||
SE->getAddExpr(BECount, SE->getOne(IntPtr), SCEV::FlagNUW);
|
||||
if (StoreSize != 1) {
|
||||
NumBytesS = SE->getMulExpr(NumBytesS, SE->getConstant(IntPtr, StoreSize),
|
||||
SCEV::FlagNUW);
|
||||
@ -635,7 +635,7 @@ bool LoopIdiomRecognize::processLoopStoreOfLoopLoad(
|
||||
BECount = SE->getTruncateOrZeroExtend(BECount, IntPtrTy);
|
||||
|
||||
const SCEV *NumBytesS =
|
||||
SE->getAddExpr(BECount, SE->getConstant(IntPtrTy, 1), SCEV::FlagNUW);
|
||||
SE->getAddExpr(BECount, SE->getOne(IntPtrTy), SCEV::FlagNUW);
|
||||
if (StoreSize != 1)
|
||||
NumBytesS = SE->getMulExpr(NumBytesS, SE->getConstant(IntPtrTy, StoreSize),
|
||||
SCEV::FlagNUW);
|
||||
|
@ -1487,8 +1487,7 @@ bool LoopReroll::runOnLoop(Loop *L, LPPassManager &LPM) {
|
||||
return Changed;
|
||||
|
||||
const SCEV *LIBETC = SE->getBackedgeTakenCount(L);
|
||||
const SCEV *IterCount =
|
||||
SE->getAddExpr(LIBETC, SE->getConstant(LIBETC->getType(), 1));
|
||||
const SCEV *IterCount = SE->getAddExpr(LIBETC, SE->getOne(LIBETC->getType()));
|
||||
DEBUG(dbgs() << "LRR: iteration count = " << *IterCount << "\n");
|
||||
|
||||
// First, we need to find the induction variable with respect to which we can
|
||||
|
@ -524,7 +524,7 @@ void StraightLineStrengthReduce::allocateCandidatesAndFindBasisForGEP(
|
||||
continue;
|
||||
|
||||
const SCEV *OrigIndexExpr = IndexExprs[I - 1];
|
||||
IndexExprs[I - 1] = SE->getConstant(OrigIndexExpr->getType(), 0);
|
||||
IndexExprs[I - 1] = SE->getZero(OrigIndexExpr->getType());
|
||||
|
||||
// The base of this candidate is GEP's base plus the offsets of all
|
||||
// indices except this current one.
|
||||
|
@ -253,8 +253,7 @@ void SimplifyIndvar::eliminateIVRemainder(BinaryOperator *Rem,
|
||||
Rem->replaceAllUsesWith(Rem->getOperand(0));
|
||||
else {
|
||||
// (i+1) % n --> (i+1)==n?0:(i+1) if i is in [0,n).
|
||||
const SCEV *LessOne =
|
||||
SE->getMinusSCEV(S, SE->getConstant(S->getType(), 1));
|
||||
const SCEV *LessOne = SE->getMinusSCEV(S, SE->getOne(S->getType()));
|
||||
if (IsSigned && !SE->isKnownNonNegative(LessOne))
|
||||
return;
|
||||
|
||||
|
@ -2625,9 +2625,8 @@ Value *InnerLoopVectorizer::getOrCreateTripCount(Loop *L) {
|
||||
BackedgeTakenCount = SE->getNoopOrZeroExtend(BackedgeTakenCount, IdxTy);
|
||||
|
||||
// Get the total trip count from the count by adding 1.
|
||||
const SCEV *ExitCount =
|
||||
SE->getAddExpr(BackedgeTakenCount,
|
||||
SE->getConstant(BackedgeTakenCount->getType(), 1));
|
||||
const SCEV *ExitCount = SE->getAddExpr(
|
||||
BackedgeTakenCount, SE->getOne(BackedgeTakenCount->getType()));
|
||||
|
||||
const DataLayout &DL = L->getHeader()->getModule()->getDataLayout();
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user