forked from OSchip/llvm-project
[NFC][SCEV] Rename SCEVCastExpr into SCEVIntegralCastExpr
All existing SCEV cast types operate on integers. D89456 will add SCEVPtrToIntExpr cast expression type. I believe this is best for consistency. Reviewed By: mkazantsev Differential Revision: https://reviews.llvm.org/D89455
This commit is contained in:
parent
a71a0d6d21
commit
d083d55c2c
|
@ -72,13 +72,13 @@ class Type;
|
|||
}
|
||||
|
||||
/// This is the base class for unary cast operator classes.
|
||||
class SCEVCastExpr : public SCEV {
|
||||
class SCEVIntegralCastExpr : public SCEV {
|
||||
protected:
|
||||
std::array<const SCEV *, 1> Operands;
|
||||
Type *Ty;
|
||||
|
||||
SCEVCastExpr(const FoldingSetNodeIDRef ID,
|
||||
unsigned SCEVTy, const SCEV *op, Type *ty);
|
||||
SCEVIntegralCastExpr(const FoldingSetNodeIDRef ID, unsigned SCEVTy,
|
||||
const SCEV *op, Type *ty);
|
||||
|
||||
public:
|
||||
const SCEV *getOperand() const { return Operands[0]; }
|
||||
|
@ -105,7 +105,7 @@ class Type;
|
|||
|
||||
/// This class represents a truncation of an integer value to a
|
||||
/// smaller integer value.
|
||||
class SCEVTruncateExpr : public SCEVCastExpr {
|
||||
class SCEVTruncateExpr : public SCEVIntegralCastExpr {
|
||||
friend class ScalarEvolution;
|
||||
|
||||
SCEVTruncateExpr(const FoldingSetNodeIDRef ID,
|
||||
|
@ -120,7 +120,7 @@ class Type;
|
|||
|
||||
/// This class represents a zero extension of a small integer value
|
||||
/// to a larger integer value.
|
||||
class SCEVZeroExtendExpr : public SCEVCastExpr {
|
||||
class SCEVZeroExtendExpr : public SCEVIntegralCastExpr {
|
||||
friend class ScalarEvolution;
|
||||
|
||||
SCEVZeroExtendExpr(const FoldingSetNodeIDRef ID,
|
||||
|
@ -135,7 +135,7 @@ class Type;
|
|||
|
||||
/// This class represents a sign extension of a small integer value
|
||||
/// to a larger integer value.
|
||||
class SCEVSignExtendExpr : public SCEVCastExpr {
|
||||
class SCEVSignExtendExpr : public SCEVIntegralCastExpr {
|
||||
friend class ScalarEvolution;
|
||||
|
||||
SCEVSignExtendExpr(const FoldingSetNodeIDRef ID,
|
||||
|
@ -610,7 +610,7 @@ class Type;
|
|||
case scTruncate:
|
||||
case scZeroExtend:
|
||||
case scSignExtend:
|
||||
push(cast<SCEVCastExpr>(S)->getOperand());
|
||||
push(cast<SCEVIntegralCastExpr>(S)->getOperand());
|
||||
break;
|
||||
case scAddExpr:
|
||||
case scMulExpr:
|
||||
|
|
|
@ -871,8 +871,8 @@ void DependenceInfo::removeMatchingExtensions(Subscript *Pair) {
|
|||
const SCEV *Dst = Pair->Dst;
|
||||
if ((isa<SCEVZeroExtendExpr>(Src) && isa<SCEVZeroExtendExpr>(Dst)) ||
|
||||
(isa<SCEVSignExtendExpr>(Src) && isa<SCEVSignExtendExpr>(Dst))) {
|
||||
const SCEVCastExpr *SrcCast = cast<SCEVCastExpr>(Src);
|
||||
const SCEVCastExpr *DstCast = cast<SCEVCastExpr>(Dst);
|
||||
const SCEVIntegralCastExpr *SrcCast = cast<SCEVIntegralCastExpr>(Src);
|
||||
const SCEVIntegralCastExpr *DstCast = cast<SCEVIntegralCastExpr>(Dst);
|
||||
const SCEV *SrcCastOp = SrcCast->getOperand();
|
||||
const SCEV *DstCastOp = DstCast->getOperand();
|
||||
if (SrcCastOp->getType() == DstCastOp->getType()) {
|
||||
|
@ -969,8 +969,8 @@ bool DependenceInfo::isKnownPredicate(ICmpInst::Predicate Pred, const SCEV *X,
|
|||
isa<SCEVSignExtendExpr>(Y)) ||
|
||||
(isa<SCEVZeroExtendExpr>(X) &&
|
||||
isa<SCEVZeroExtendExpr>(Y))) {
|
||||
const SCEVCastExpr *CX = cast<SCEVCastExpr>(X);
|
||||
const SCEVCastExpr *CY = cast<SCEVCastExpr>(Y);
|
||||
const SCEVIntegralCastExpr *CX = cast<SCEVIntegralCastExpr>(X);
|
||||
const SCEVIntegralCastExpr *CY = cast<SCEVIntegralCastExpr>(Y);
|
||||
const SCEV *Xop = CX->getOperand();
|
||||
const SCEV *Yop = CY->getOperand();
|
||||
if (Xop->getType() == Yop->getType()) {
|
||||
|
|
|
@ -367,7 +367,7 @@ Type *SCEV::getType() const {
|
|||
case scTruncate:
|
||||
case scZeroExtend:
|
||||
case scSignExtend:
|
||||
return cast<SCEVCastExpr>(this)->getType();
|
||||
return cast<SCEVIntegralCastExpr>(this)->getType();
|
||||
case scAddRecExpr:
|
||||
case scMulExpr:
|
||||
case scUMaxExpr:
|
||||
|
@ -445,29 +445,30 @@ ScalarEvolution::getConstant(Type *Ty, uint64_t V, bool isSigned) {
|
|||
return getConstant(ConstantInt::get(ITy, V, isSigned));
|
||||
}
|
||||
|
||||
SCEVCastExpr::SCEVCastExpr(const FoldingSetNodeIDRef ID,
|
||||
unsigned SCEVTy, const SCEV *op, Type *ty)
|
||||
: SCEV(ID, SCEVTy, computeExpressionSize(op)), Ty(ty) {
|
||||
Operands[0] = op;
|
||||
SCEVIntegralCastExpr::SCEVIntegralCastExpr(const FoldingSetNodeIDRef ID,
|
||||
unsigned SCEVTy, const SCEV *op,
|
||||
Type *ty)
|
||||
: SCEV(ID, SCEVTy, computeExpressionSize(op)), Ty(ty) {
|
||||
Operands[0] = op;
|
||||
}
|
||||
|
||||
SCEVTruncateExpr::SCEVTruncateExpr(const FoldingSetNodeIDRef ID,
|
||||
const SCEV *op, Type *ty)
|
||||
: SCEVCastExpr(ID, scTruncate, op, ty) {
|
||||
SCEVTruncateExpr::SCEVTruncateExpr(const FoldingSetNodeIDRef ID, const SCEV *op,
|
||||
Type *ty)
|
||||
: SCEVIntegralCastExpr(ID, scTruncate, op, ty) {
|
||||
assert(getOperand()->getType()->isIntOrPtrTy() && Ty->isIntOrPtrTy() &&
|
||||
"Cannot truncate non-integer value!");
|
||||
}
|
||||
|
||||
SCEVZeroExtendExpr::SCEVZeroExtendExpr(const FoldingSetNodeIDRef ID,
|
||||
const SCEV *op, Type *ty)
|
||||
: SCEVCastExpr(ID, scZeroExtend, op, ty) {
|
||||
: SCEVIntegralCastExpr(ID, scZeroExtend, op, ty) {
|
||||
assert(getOperand()->getType()->isIntOrPtrTy() && Ty->isIntOrPtrTy() &&
|
||||
"Cannot zero extend non-integer value!");
|
||||
}
|
||||
|
||||
SCEVSignExtendExpr::SCEVSignExtendExpr(const FoldingSetNodeIDRef ID,
|
||||
const SCEV *op, Type *ty)
|
||||
: SCEVCastExpr(ID, scSignExtend, op, ty) {
|
||||
: SCEVIntegralCastExpr(ID, scSignExtend, op, ty) {
|
||||
assert(getOperand()->getType()->isIntOrPtrTy() && Ty->isIntOrPtrTy() &&
|
||||
"Cannot sign extend non-integer value!");
|
||||
}
|
||||
|
@ -781,8 +782,8 @@ static int CompareSCEVComplexity(
|
|||
case scTruncate:
|
||||
case scZeroExtend:
|
||||
case scSignExtend: {
|
||||
const SCEVCastExpr *LC = cast<SCEVCastExpr>(LHS);
|
||||
const SCEVCastExpr *RC = cast<SCEVCastExpr>(RHS);
|
||||
const SCEVIntegralCastExpr *LC = cast<SCEVIntegralCastExpr>(LHS);
|
||||
const SCEVIntegralCastExpr *RC = cast<SCEVIntegralCastExpr>(RHS);
|
||||
|
||||
// Compare cast expressions by operand.
|
||||
int X = CompareSCEVComplexity(EqCacheSCEV, EqCacheValue, LI,
|
||||
|
@ -1052,7 +1053,8 @@ const SCEV *ScalarEvolution::getTruncateExpr(const SCEV *Op, Type *Ty,
|
|||
for (unsigned i = 0, e = CommOp->getNumOperands(); i != e && numTruncs < 2;
|
||||
++i) {
|
||||
const SCEV *S = getTruncateExpr(CommOp->getOperand(i), Ty, Depth + 1);
|
||||
if (!isa<SCEVCastExpr>(CommOp->getOperand(i)) && isa<SCEVTruncateExpr>(S))
|
||||
if (!isa<SCEVIntegralCastExpr>(CommOp->getOperand(i)) &&
|
||||
isa<SCEVTruncateExpr>(S))
|
||||
numTruncs++;
|
||||
Operands.push_back(S);
|
||||
}
|
||||
|
@ -3964,7 +3966,7 @@ const SCEV *ScalarEvolution::getPointerBase(const SCEV *V) {
|
|||
return V;
|
||||
|
||||
while (true) {
|
||||
if (const SCEVCastExpr *Cast = dyn_cast<SCEVCastExpr>(V)) {
|
||||
if (const SCEVIntegralCastExpr *Cast = dyn_cast<SCEVIntegralCastExpr>(V)) {
|
||||
V = Cast->getOperand();
|
||||
} else if (const SCEVNAryExpr *NAry = dyn_cast<SCEVNAryExpr>(V)) {
|
||||
const SCEV *PtrOp = nullptr;
|
||||
|
@ -5721,7 +5723,7 @@ ConstantRange ScalarEvolution::getRangeViaFactoring(const SCEV *Start,
|
|||
}
|
||||
|
||||
// Peel off a cast operation
|
||||
if (auto *SCast = dyn_cast<SCEVCastExpr>(S)) {
|
||||
if (auto *SCast = dyn_cast<SCEVIntegralCastExpr>(S)) {
|
||||
CastOp = SCast->getSCEVType();
|
||||
S = SCast->getOperand();
|
||||
}
|
||||
|
@ -11795,7 +11797,7 @@ ScalarEvolution::computeLoopDisposition(const SCEV *S, const Loop *L) {
|
|||
case scTruncate:
|
||||
case scZeroExtend:
|
||||
case scSignExtend:
|
||||
return getLoopDisposition(cast<SCEVCastExpr>(S)->getOperand(), L);
|
||||
return getLoopDisposition(cast<SCEVIntegralCastExpr>(S)->getOperand(), L);
|
||||
case scAddRecExpr: {
|
||||
const SCEVAddRecExpr *AR = cast<SCEVAddRecExpr>(S);
|
||||
|
||||
|
@ -11902,7 +11904,7 @@ ScalarEvolution::computeBlockDisposition(const SCEV *S, const BasicBlock *BB) {
|
|||
case scTruncate:
|
||||
case scZeroExtend:
|
||||
case scSignExtend:
|
||||
return getBlockDisposition(cast<SCEVCastExpr>(S)->getOperand(), BB);
|
||||
return getBlockDisposition(cast<SCEVIntegralCastExpr>(S)->getOperand(), BB);
|
||||
case scAddRecExpr: {
|
||||
// This uses a "dominates" query instead of "properly dominates" query
|
||||
// to test for proper dominance too, because the instruction which
|
||||
|
|
|
@ -208,7 +208,7 @@ Value *llvm::getStrideFromPointer(Value *Ptr, ScalarEvolution *SE, Loop *Lp) {
|
|||
|
||||
if (Ptr != OrigPtr)
|
||||
// Strip off casts.
|
||||
while (const SCEVCastExpr *C = dyn_cast<SCEVCastExpr>(V))
|
||||
while (const SCEVIntegralCastExpr *C = dyn_cast<SCEVIntegralCastExpr>(V))
|
||||
V = C->getOperand();
|
||||
|
||||
const SCEVAddRecExpr *S = dyn_cast<SCEVAddRecExpr>(V);
|
||||
|
@ -241,7 +241,7 @@ Value *llvm::getStrideFromPointer(Value *Ptr, ScalarEvolution *SE, Loop *Lp) {
|
|||
|
||||
// Strip off casts.
|
||||
Type *StripedOffRecurrenceCast = nullptr;
|
||||
if (const SCEVCastExpr *C = dyn_cast<SCEVCastExpr>(V)) {
|
||||
if (const SCEVIntegralCastExpr *C = dyn_cast<SCEVIntegralCastExpr>(V)) {
|
||||
StripedOffRecurrenceCast = C->getType();
|
||||
V = C->getOperand();
|
||||
}
|
||||
|
|
|
@ -1212,7 +1212,7 @@ static unsigned getSetupCost(const SCEV *Reg, unsigned Depth) {
|
|||
return 0;
|
||||
if (const auto *S = dyn_cast<SCEVAddRecExpr>(Reg))
|
||||
return getSetupCost(S->getStart(), Depth - 1);
|
||||
if (auto S = dyn_cast<SCEVCastExpr>(Reg))
|
||||
if (auto S = dyn_cast<SCEVIntegralCastExpr>(Reg))
|
||||
return getSetupCost(S->getOperand(), Depth - 1);
|
||||
if (auto S = dyn_cast<SCEVNAryExpr>(Reg))
|
||||
return std::accumulate(S->op_begin(), S->op_end(), 0,
|
||||
|
@ -3403,7 +3403,7 @@ LSRInstance::CollectLoopInvariantFixupsAndFormulae() {
|
|||
|
||||
if (const SCEVNAryExpr *N = dyn_cast<SCEVNAryExpr>(S))
|
||||
Worklist.append(N->op_begin(), N->op_end());
|
||||
else if (const SCEVCastExpr *C = dyn_cast<SCEVCastExpr>(S))
|
||||
else if (const SCEVIntegralCastExpr *C = dyn_cast<SCEVIntegralCastExpr>(S))
|
||||
Worklist.push_back(C->getOperand());
|
||||
else if (const SCEVUDivExpr *D = dyn_cast<SCEVUDivExpr>(S)) {
|
||||
Worklist.push_back(D->getLHS());
|
||||
|
|
|
@ -663,7 +663,7 @@ const Loop *SCEVExpander::getRelevantLoop(const SCEV *S) {
|
|||
L = PickMostRelevantLoop(L, getRelevantLoop(Op), SE.DT);
|
||||
return RelevantLoops[N] = L;
|
||||
}
|
||||
if (const SCEVCastExpr *C = dyn_cast<SCEVCastExpr>(S)) {
|
||||
if (const SCEVIntegralCastExpr *C = dyn_cast<SCEVIntegralCastExpr>(S)) {
|
||||
const Loop *Result = getRelevantLoop(C->getOperand());
|
||||
return RelevantLoops[C] = Result;
|
||||
}
|
||||
|
@ -2364,9 +2364,9 @@ bool SCEVExpander::isHighCostExpansionHelper(
|
|||
TTI.getIntImmCostInst(WorkItem.ParentOpcode, WorkItem.OperandIdx,
|
||||
Imm, Ty, CostKind);
|
||||
return BudgetRemaining < 0;
|
||||
} else if (isa<SCEVCastExpr>(S)) {
|
||||
int Cost =
|
||||
costAndCollectOperands<SCEVCastExpr>(WorkItem, TTI, CostKind, Worklist);
|
||||
} else if (isa<SCEVIntegralCastExpr>(S)) {
|
||||
int Cost = costAndCollectOperands<SCEVIntegralCastExpr>(WorkItem, TTI,
|
||||
CostKind, Worklist);
|
||||
BudgetRemaining -= Cost;
|
||||
return false; // Will answer upon next entry into this function.
|
||||
} else if (isa<SCEVUDivExpr>(S)) {
|
||||
|
|
Loading…
Reference in New Issue