mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-24 11:42:57 +01:00
Remove ICmpInst::isSignedPredicate which was a reimplementation
CmpInst::isSigned. llvm-svn: 85037
This commit is contained in:
parent
a16e115bd4
commit
cacdc4d65a
@ -718,6 +718,18 @@ public:
|
||||
/// @brief Determine if this is an equals/not equals predicate.
|
||||
bool isEquality();
|
||||
|
||||
/// @returns true if the comparison is signed, false otherwise.
|
||||
/// @brief Determine if this instruction is using a signed comparison.
|
||||
bool isSigned() const {
|
||||
return isSigned(getPredicate());
|
||||
}
|
||||
|
||||
/// @returns true if the comparison is unsigned, false otherwise.
|
||||
/// @brief Determine if this instruction is using an unsigned comparison.
|
||||
bool isUnsigned() const {
|
||||
return isUnsigned(getPredicate());
|
||||
}
|
||||
|
||||
/// This is just a convenience.
|
||||
/// @brief Determine if this is true when both operands are the same.
|
||||
bool isTrueWhenEqual() const {
|
||||
|
@ -693,14 +693,6 @@ public:
|
||||
return !isEquality(P);
|
||||
}
|
||||
|
||||
/// @returns true if the predicate of this ICmpInst is signed, false otherwise
|
||||
/// @brief Determine if this instruction's predicate is signed.
|
||||
bool isSignedPredicate() const { return isSignedPredicate(getPredicate()); }
|
||||
|
||||
/// @returns true if the predicate provided is signed, false otherwise
|
||||
/// @brief Determine if the predicate is signed.
|
||||
static bool isSignedPredicate(Predicate pred);
|
||||
|
||||
/// Initialize a set of values that all satisfy the predicate with C.
|
||||
/// @brief Make a ConstantRange for a relation with a constant value.
|
||||
static ConstantRange makeConstantRange(Predicate pred, const APInt &C);
|
||||
|
@ -1627,7 +1627,7 @@ void CWriter::writeOperandWithCast(Value* Operand, const ICmpInst &Cmp) {
|
||||
}
|
||||
|
||||
// Should this be a signed comparison? If so, convert to signed.
|
||||
bool castIsSigned = Cmp.isSignedPredicate();
|
||||
bool castIsSigned = Cmp.isSigned();
|
||||
|
||||
// If the operand was a pointer, convert to a large integer type.
|
||||
const Type* OpTy = Operand->getType();
|
||||
|
@ -3511,9 +3511,9 @@ static Value *getFCmpValue(bool isordered, unsigned code,
|
||||
/// PredicatesFoldable - Return true if both predicates match sign or if at
|
||||
/// least one of them is an equality comparison (which is signless).
|
||||
static bool PredicatesFoldable(ICmpInst::Predicate p1, ICmpInst::Predicate p2) {
|
||||
return (ICmpInst::isSignedPredicate(p1) == ICmpInst::isSignedPredicate(p2)) ||
|
||||
(ICmpInst::isSignedPredicate(p1) && ICmpInst::isEquality(p2)) ||
|
||||
(ICmpInst::isSignedPredicate(p2) && ICmpInst::isEquality(p1));
|
||||
return (CmpInst::isSigned(p1) == CmpInst::isSigned(p2)) ||
|
||||
(CmpInst::isSigned(p1) && ICmpInst::isEquality(p2)) ||
|
||||
(CmpInst::isSigned(p2) && ICmpInst::isEquality(p1));
|
||||
}
|
||||
|
||||
namespace {
|
||||
@ -3550,9 +3550,7 @@ struct FoldICmpLogical {
|
||||
default: llvm_unreachable("Illegal logical opcode!"); return 0;
|
||||
}
|
||||
|
||||
bool isSigned = ICmpInst::isSignedPredicate(RHSICI->getPredicate()) ||
|
||||
ICmpInst::isSignedPredicate(ICI->getPredicate());
|
||||
|
||||
bool isSigned = RHSICI->isSigned() || ICI->isSigned();
|
||||
Value *RV = getICmpValue(isSigned, Code, LHS, RHS, IC.getContext());
|
||||
if (Instruction *I = dyn_cast<Instruction>(RV))
|
||||
return I;
|
||||
@ -3849,9 +3847,9 @@ Instruction *InstCombiner::FoldAndOfICmps(Instruction &I,
|
||||
|
||||
// Ensure that the larger constant is on the RHS.
|
||||
bool ShouldSwap;
|
||||
if (ICmpInst::isSignedPredicate(LHSCC) ||
|
||||
if (CmpInst::isSigned(LHSCC) ||
|
||||
(ICmpInst::isEquality(LHSCC) &&
|
||||
ICmpInst::isSignedPredicate(RHSCC)))
|
||||
CmpInst::isSigned(RHSCC)))
|
||||
ShouldSwap = LHSCst->getValue().sgt(RHSCst->getValue());
|
||||
else
|
||||
ShouldSwap = LHSCst->getValue().ugt(RHSCst->getValue());
|
||||
@ -4537,9 +4535,9 @@ Instruction *InstCombiner::FoldOrOfICmps(Instruction &I,
|
||||
|
||||
// Ensure that the larger constant is on the RHS.
|
||||
bool ShouldSwap;
|
||||
if (ICmpInst::isSignedPredicate(LHSCC) ||
|
||||
if (CmpInst::isSigned(LHSCC) ||
|
||||
(ICmpInst::isEquality(LHSCC) &&
|
||||
ICmpInst::isSignedPredicate(RHSCC)))
|
||||
CmpInst::isSigned(RHSCC)))
|
||||
ShouldSwap = LHSCst->getValue().sgt(RHSCst->getValue());
|
||||
else
|
||||
ShouldSwap = LHSCst->getValue().ugt(RHSCst->getValue());
|
||||
@ -6088,7 +6086,7 @@ Instruction *InstCombiner::visitICmpInst(ICmpInst &I) {
|
||||
// EQ and NE we use unsigned values.
|
||||
APInt Op0Min(BitWidth, 0), Op0Max(BitWidth, 0);
|
||||
APInt Op1Min(BitWidth, 0), Op1Max(BitWidth, 0);
|
||||
if (ICmpInst::isSignedPredicate(I.getPredicate())) {
|
||||
if (I.isSigned()) {
|
||||
ComputeSignedMinMaxValuesFromKnownBits(Op0KnownZero, Op0KnownOne,
|
||||
Op0Min, Op0Max);
|
||||
ComputeSignedMinMaxValuesFromKnownBits(Op1KnownZero, Op1KnownOne,
|
||||
@ -6218,7 +6216,7 @@ Instruction *InstCombiner::visitICmpInst(ICmpInst &I) {
|
||||
|
||||
// Turn a signed comparison into an unsigned one if both operands
|
||||
// are known to have the same sign.
|
||||
if (I.isSignedPredicate() &&
|
||||
if (I.isSigned() &&
|
||||
((Op0KnownZero.isNegative() && Op1KnownZero.isNegative()) ||
|
||||
(Op0KnownOne.isNegative() && Op1KnownOne.isNegative())))
|
||||
return new ICmpInst(I.getUnsignedPredicate(), Op0, Op1);
|
||||
@ -6398,7 +6396,7 @@ Instruction *InstCombiner::visitICmpInst(ICmpInst &I) {
|
||||
// icmp u/s (a ^ signbit), (b ^ signbit) --> icmp s/u a, b
|
||||
if (ConstantInt *CI = dyn_cast<ConstantInt>(Op0I->getOperand(1))) {
|
||||
if (CI->getValue().isSignBit()) {
|
||||
ICmpInst::Predicate Pred = I.isSignedPredicate()
|
||||
ICmpInst::Predicate Pred = I.isSigned()
|
||||
? I.getUnsignedPredicate()
|
||||
: I.getSignedPredicate();
|
||||
return new ICmpInst(Pred, Op0I->getOperand(0),
|
||||
@ -6406,7 +6404,7 @@ Instruction *InstCombiner::visitICmpInst(ICmpInst &I) {
|
||||
}
|
||||
|
||||
if (CI->getValue().isMaxSignedValue()) {
|
||||
ICmpInst::Predicate Pred = I.isSignedPredicate()
|
||||
ICmpInst::Predicate Pred = I.isSigned()
|
||||
? I.getUnsignedPredicate()
|
||||
: I.getSignedPredicate();
|
||||
Pred = I.getSwappedPredicate(Pred);
|
||||
@ -6543,7 +6541,7 @@ Instruction *InstCombiner::FoldICmpDivCst(ICmpInst &ICI, BinaryOperator *DivI,
|
||||
// work. :( The if statement below tests that condition and bails
|
||||
// if it finds it.
|
||||
bool DivIsSigned = DivI->getOpcode() == Instruction::SDiv;
|
||||
if (!ICI.isEquality() && DivIsSigned != ICI.isSignedPredicate())
|
||||
if (!ICI.isEquality() && DivIsSigned != ICI.isSigned())
|
||||
return 0;
|
||||
if (DivRHS->isZero())
|
||||
return 0; // The ProdOV computation fails on divide by zero.
|
||||
@ -6742,7 +6740,7 @@ Instruction *InstCombiner::visitICmpInstWithInstAndIntCst(ICmpInst &ICI,
|
||||
// (icmp u/s (xor A SignBit), C) -> (icmp s/u A, (xor C SignBit))
|
||||
if (!ICI.isEquality() && XorCST->getValue().isSignBit()) {
|
||||
const APInt &SignBit = XorCST->getValue();
|
||||
ICmpInst::Predicate Pred = ICI.isSignedPredicate()
|
||||
ICmpInst::Predicate Pred = ICI.isSigned()
|
||||
? ICI.getUnsignedPredicate()
|
||||
: ICI.getSignedPredicate();
|
||||
return new ICmpInst(Pred, LHSI->getOperand(0),
|
||||
@ -6752,7 +6750,7 @@ Instruction *InstCombiner::visitICmpInstWithInstAndIntCst(ICmpInst &ICI,
|
||||
// (icmp u/s (xor A ~SignBit), C) -> (icmp s/u (xor C ~SignBit), A)
|
||||
if (!ICI.isEquality() && XorCST->getValue().isMaxSignedValue()) {
|
||||
const APInt &NotSignBit = XorCST->getValue();
|
||||
ICmpInst::Predicate Pred = ICI.isSignedPredicate()
|
||||
ICmpInst::Predicate Pred = ICI.isSigned()
|
||||
? ICI.getUnsignedPredicate()
|
||||
: ICI.getSignedPredicate();
|
||||
Pred = ICI.getSwappedPredicate(Pred);
|
||||
@ -7010,7 +7008,7 @@ Instruction *InstCombiner::visitICmpInstWithInstAndIntCst(ICmpInst &ICI,
|
||||
ConstantRange CR = ICI.makeConstantRange(ICI.getPredicate(), RHSV)
|
||||
.subtract(LHSV);
|
||||
|
||||
if (ICI.isSignedPredicate()) {
|
||||
if (ICI.isSigned()) {
|
||||
if (CR.getLower().isSignBit()) {
|
||||
return new ICmpInst(ICmpInst::ICMP_SLT, LHSI->getOperand(0),
|
||||
ConstantInt::get(*Context, CR.getUpper()));
|
||||
@ -7185,7 +7183,7 @@ Instruction *InstCombiner::visitICmpInstWithCastAndCast(ICmpInst &ICI) {
|
||||
return 0;
|
||||
|
||||
bool isSignedExt = LHSCI->getOpcode() == Instruction::SExt;
|
||||
bool isSignedCmp = ICI.isSignedPredicate();
|
||||
bool isSignedCmp = ICI.isSigned();
|
||||
|
||||
if (CastInst *CI = dyn_cast<CastInst>(ICI.getOperand(1))) {
|
||||
// Not an extension from the same type?
|
||||
|
@ -426,7 +426,7 @@ bool LoopIndexSplit::processOneIterationLoop() {
|
||||
// c1 = icmp uge i32 SplitValue, StartValue
|
||||
// c2 = icmp ult i32 SplitValue, ExitValue
|
||||
// and i32 c1, c2
|
||||
Instruction *C1 = new ICmpInst(BR, ExitCondition->isSignedPredicate() ?
|
||||
Instruction *C1 = new ICmpInst(BR, ExitCondition->isSigned() ?
|
||||
ICmpInst::ICMP_SGE : ICmpInst::ICMP_UGE,
|
||||
SplitValue, StartValue, "lisplit");
|
||||
|
||||
@ -478,7 +478,7 @@ bool LoopIndexSplit::processOneIterationLoop() {
|
||||
/// with a loop invariant value. Update loop's lower and upper bound based on
|
||||
/// the loop invariant value.
|
||||
bool LoopIndexSplit::restrictLoopBound(ICmpInst &Op) {
|
||||
bool Sign = Op.isSignedPredicate();
|
||||
bool Sign = Op.isSigned();
|
||||
Instruction *PHTerm = L->getLoopPreheader()->getTerminator();
|
||||
|
||||
if (IVisGT(*ExitCondition) || IVisGE(*ExitCondition)) {
|
||||
@ -933,7 +933,7 @@ bool LoopIndexSplit::splitLoop() {
|
||||
return false;
|
||||
|
||||
// If the predicate sign does not match then skip.
|
||||
if (ExitCondition->isSignedPredicate() != SplitCondition->isSignedPredicate())
|
||||
if (ExitCondition->isSigned() != SplitCondition->isSigned())
|
||||
return false;
|
||||
|
||||
unsigned EVOpNum = (ExitCondition->getOperand(1) == IVExitValue);
|
||||
@ -963,7 +963,7 @@ bool LoopIndexSplit::splitLoop() {
|
||||
//[*] Calculate new loop bounds.
|
||||
Value *AEV = SplitValue;
|
||||
Value *BSV = SplitValue;
|
||||
bool Sign = SplitCondition->isSignedPredicate();
|
||||
bool Sign = SplitCondition->isSigned();
|
||||
Instruction *PHTerm = L->getLoopPreheader()->getTerminator();
|
||||
|
||||
if (IVisLT(*ExitCondition)) {
|
||||
|
@ -1914,7 +1914,7 @@ ICmpInst *LoopStrengthReduce::ChangeCompareStride(Loop *L, ICmpInst *Cond,
|
||||
continue;
|
||||
|
||||
// Watch out for overflow.
|
||||
if (ICmpInst::isSignedPredicate(Predicate) &&
|
||||
if (ICmpInst::isSigned(Predicate) &&
|
||||
(CmpVal & SignBit) != (NewCmpVal & SignBit))
|
||||
continue;
|
||||
|
||||
@ -1956,7 +1956,7 @@ ICmpInst *LoopStrengthReduce::ChangeCompareStride(Loop *L, ICmpInst *Cond,
|
||||
// Check if it is possible to rewrite it using
|
||||
// an iv / stride of a smaller integer type.
|
||||
unsigned Bits = NewTyBits;
|
||||
if (ICmpInst::isSignedPredicate(Predicate))
|
||||
if (ICmpInst::isSigned(Predicate))
|
||||
--Bits;
|
||||
uint64_t Mask = (1ULL << Bits) - 1;
|
||||
if (((uint64_t)NewCmpVal & Mask) != (uint64_t)NewCmpVal)
|
||||
|
@ -2859,17 +2859,6 @@ ICmpInst::Predicate ICmpInst::getUnsignedPredicate(Predicate pred) {
|
||||
}
|
||||
}
|
||||
|
||||
bool ICmpInst::isSignedPredicate(Predicate pred) {
|
||||
switch (pred) {
|
||||
default: assert(! "Unknown icmp predicate!");
|
||||
case ICMP_SGT: case ICMP_SLT: case ICMP_SGE: case ICMP_SLE:
|
||||
return true;
|
||||
case ICMP_EQ: case ICMP_NE: case ICMP_UGT: case ICMP_ULT:
|
||||
case ICMP_UGE: case ICMP_ULE:
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
/// Initialize a set of values that all satisfy the condition with C.
|
||||
///
|
||||
ConstantRange
|
||||
|
Loading…
Reference in New Issue
Block a user