diff --git a/lib/Analysis/ScalarEvolution.cpp b/lib/Analysis/ScalarEvolution.cpp index 364e1223ba4..7ce975e2247 100644 --- a/lib/Analysis/ScalarEvolution.cpp +++ b/lib/Analysis/ScalarEvolution.cpp @@ -124,7 +124,7 @@ ConstantRange SCEV::getValueRange() const { const Type *Ty = getType(); assert(Ty->isInteger() && "Can't get range for a non-integer SCEV!"); // Default to a full range if no better information is available. - return ConstantRange(getType()); + return ConstantRange(getBitWidth()); } uint32_t SCEV::getBitWidth() const { @@ -211,7 +211,7 @@ SCEVTruncateExpr::~SCEVTruncateExpr() { } ConstantRange SCEVTruncateExpr::getValueRange() const { - return getOperand()->getValueRange().truncate(getType()); + return getOperand()->getValueRange().truncate(getBitWidth()); } void SCEVTruncateExpr::print(std::ostream &OS) const { @@ -237,7 +237,7 @@ SCEVZeroExtendExpr::~SCEVZeroExtendExpr() { } ConstantRange SCEVZeroExtendExpr::getValueRange() const { - return getOperand()->getValueRange().zeroExtend(getType()); + return getOperand()->getValueRange().zeroExtend(getBitWidth()); } void SCEVZeroExtendExpr::print(std::ostream &OS) const { @@ -1572,7 +1572,8 @@ SCEVHandle ScalarEvolutionsImpl::ComputeIterationCount(const Loop *L) { ConstantExpr::getBitCast(CompVal, RealTy)); if (CompVal) { // Form the constant range. - ConstantRange CompRange(Cond, CompVal->getValue()); + ConstantRange CompRange( + ICmpInst::makeConstantRange(Cond, CompVal->getValue())); SCEVHandle Ret = AddRec->getNumIterationsInRange(CompRange, false /*Always treat as unsigned range*/); diff --git a/lib/Transforms/Scalar/CorrelatedExprs.cpp b/lib/Transforms/Scalar/CorrelatedExprs.cpp index 277a1284eac..d9843a52b52 100644 --- a/lib/Transforms/Scalar/CorrelatedExprs.cpp +++ b/lib/Transforms/Scalar/CorrelatedExprs.cpp @@ -113,7 +113,8 @@ namespace { Value *Replacement; public: ValueInfo(const Type *Ty) - : Bounds(Ty->isInteger() ? Ty : Type::Int32Ty), Replacement(0) {} + : Bounds(Ty->isInteger() ? cast(Ty)->getBitWidth() : 32), + Replacement(0) {} // getBounds() - Return the constant bounds of the value... const ConstantRange &getBounds() const { return Bounds; } @@ -1153,9 +1154,10 @@ Relation::KnownResult CEE::getCmpResult(CmpInst *CI, // if (ConstantInt *C = dyn_cast(Op1)) { // Check to see if we already know the result of this comparison... - ConstantRange R = ConstantRange(predicate, C->getValue()); + ICmpInst::Predicate ipred = ICmpInst::Predicate(predicate); + ConstantRange R = ICmpInst::makeConstantRange(ipred, C->getValue()); ConstantRange Int = R.intersectWith(Op0VI->getBounds(), - ICmpInst::isSignedPredicate(ICmpInst::Predicate(predicate))); + ICmpInst::isSignedPredicate(ipred)); // If the intersection of the two ranges is empty, then the condition // could never be true! @@ -1199,10 +1201,12 @@ bool Relation::contradicts(unsigned Op, // if (ConstantInt *C = dyn_cast(Val)) if (Op >= ICmpInst::FIRST_ICMP_PREDICATE && - Op <= ICmpInst::LAST_ICMP_PREDICATE) - if (ConstantRange(Op, C->getValue()).intersectWith(VI.getBounds(), - ICmpInst::isSignedPredicate(ICmpInst::Predicate(Op))).isEmptySet()) + Op <= ICmpInst::LAST_ICMP_PREDICATE) { + ICmpInst::Predicate ipred = ICmpInst::Predicate(Op); + if (ICmpInst::makeConstantRange(ipred, C->getValue()).intersectWith( + VI.getBounds(), ICmpInst::isSignedPredicate(ipred)).isEmptySet()) return true; + } switch (Rel) { default: assert(0 && "Unknown Relationship code!"); @@ -1257,10 +1261,12 @@ bool Relation::incorporate(unsigned Op, ValueInfo &VI) { // if (ConstantInt *C = dyn_cast(Val)) if (Op >= ICmpInst::FIRST_ICMP_PREDICATE && - Op <= ICmpInst::LAST_ICMP_PREDICATE) + Op <= ICmpInst::LAST_ICMP_PREDICATE) { + ICmpInst::Predicate ipred = ICmpInst::Predicate(Op); VI.getBounds() = - ConstantRange(Op, C->getValue()).intersectWith(VI.getBounds(), - ICmpInst::isSignedPredicate(ICmpInst::Predicate(Op))); + ICmpInst::makeConstantRange(ipred, C->getValue()).intersectWith( + VI.getBounds(), ICmpInst::isSignedPredicate(ipred)); + } switch (Rel) { default: assert(0 && "Unknown prior value!");