[ValueTracking] Use m_APInt instead of m_ConstantInt, NFC

This change would add functionality if isImpliedCondition worked on
vector types; but since it bail out on vector predicates this change is
an NFC.

llvm-svn: 252672
This commit is contained in:
Sanjoy Das 2015-11-10 23:56:15 +00:00
parent 4353b30542
commit af1400f84b
1 changed files with 8 additions and 7 deletions

View File

@ -4103,6 +4103,7 @@ static bool isTruePredicate(CmpInst::Predicate Pred, Value *LHS, Value *RHS,
const DataLayout &DL, unsigned Depth, const DataLayout &DL, unsigned Depth,
AssumptionCache *AC, const Instruction *CxtI, AssumptionCache *AC, const Instruction *CxtI,
const DominatorTree *DT) { const DominatorTree *DT) {
assert(!LHS->getType()->isVectorTy() && "TODO: extend to handle vectors!");
if (ICmpInst::isTrueWhenEqual(Pred) && LHS == RHS) if (ICmpInst::isTrueWhenEqual(Pred) && LHS == RHS)
return true; return true;
@ -4112,27 +4113,27 @@ static bool isTruePredicate(CmpInst::Predicate Pred, Value *LHS, Value *RHS,
case CmpInst::ICMP_SLT: case CmpInst::ICMP_SLT:
case CmpInst::ICMP_SLE: { case CmpInst::ICMP_SLE: {
ConstantInt *CI; const APInt *C;
// LHS s< LHS +_{nsw} C if C > 0 // LHS s< LHS +_{nsw} C if C > 0
// LHS s<= LHS +_{nsw} C if C >= 0 // LHS s<= LHS +_{nsw} C if C >= 0
if (match(RHS, m_NSWAdd(m_Specific(LHS), m_ConstantInt(CI)))) { if (match(RHS, m_NSWAdd(m_Specific(LHS), m_APInt(C)))) {
if (Pred == CmpInst::ICMP_SLT) if (Pred == CmpInst::ICMP_SLT)
return CI->getValue().isStrictlyPositive(); return C->isStrictlyPositive();
return !CI->isNegative(); return !C->isNegative();
} }
return false; return false;
} }
case CmpInst::ICMP_ULT: case CmpInst::ICMP_ULT:
case CmpInst::ICMP_ULE: { case CmpInst::ICMP_ULE: {
ConstantInt *CI; const APInt *C;
// LHS u< LHS +_{nuw} C if C != 0 // LHS u< LHS +_{nuw} C if C != 0
// LHS u<= LHS +_{nuw} C // LHS u<= LHS +_{nuw} C
if (match(RHS, m_NUWAdd(m_Specific(LHS), m_ConstantInt(CI)))) { if (match(RHS, m_NUWAdd(m_Specific(LHS), m_APInt(C)))) {
if (Pred == CmpInst::ICMP_ULT) if (Pred == CmpInst::ICMP_ULT)
return !CI->isZero(); return C->isMinValue();
return true; return true;
} }
return false; return false;