mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-23 03:02:36 +01:00
start using the new helper methods a bit.
llvm-svn: 135251
This commit is contained in:
parent
e99d93799f
commit
a3a07274c9
@ -42,13 +42,12 @@ static ConstantInt *ExtractElement(Constant *V, Constant *Idx) {
|
||||
static bool HasAddOverflow(ConstantInt *Result,
|
||||
ConstantInt *In1, ConstantInt *In2,
|
||||
bool IsSigned) {
|
||||
if (IsSigned)
|
||||
if (In2->getValue().isNegative())
|
||||
return Result->getValue().sgt(In1->getValue());
|
||||
else
|
||||
return Result->getValue().slt(In1->getValue());
|
||||
else
|
||||
if (!IsSigned)
|
||||
return Result->getValue().ult(In1->getValue());
|
||||
|
||||
if (In2->isNegative())
|
||||
return Result->getValue().sgt(In1->getValue());
|
||||
return Result->getValue().slt(In1->getValue());
|
||||
}
|
||||
|
||||
/// AddWithOverflow - Compute Result = In1+In2, returning true if the result
|
||||
@ -77,13 +76,13 @@ static bool AddWithOverflow(Constant *&Result, Constant *In1,
|
||||
static bool HasSubOverflow(ConstantInt *Result,
|
||||
ConstantInt *In1, ConstantInt *In2,
|
||||
bool IsSigned) {
|
||||
if (IsSigned)
|
||||
if (In2->getValue().isNegative())
|
||||
return Result->getValue().slt(In1->getValue());
|
||||
else
|
||||
return Result->getValue().sgt(In1->getValue());
|
||||
else
|
||||
if (!IsSigned)
|
||||
return Result->getValue().ugt(In1->getValue());
|
||||
|
||||
if (In2->isNegative())
|
||||
return Result->getValue().slt(In1->getValue());
|
||||
|
||||
return Result->getValue().sgt(In1->getValue());
|
||||
}
|
||||
|
||||
/// SubWithOverflow - Compute Result = In1-In2, returning true if the result
|
||||
@ -128,8 +127,7 @@ static bool isSignBitCheck(ICmpInst::Predicate pred, ConstantInt *RHS,
|
||||
case ICmpInst::ICMP_UGT:
|
||||
// True if LHS u> RHS and RHS == high-bit-mask - 1
|
||||
TrueIfSigned = true;
|
||||
return RHS->getValue() ==
|
||||
APInt::getSignedMaxValue(RHS->getType()->getPrimitiveSizeInBits());
|
||||
return RHS->isMaxValue(true);
|
||||
case ICmpInst::ICMP_UGE:
|
||||
// True if LHS u>= RHS and RHS == high-bit-mask (2^7, 2^15, 2^31, etc)
|
||||
TrueIfSigned = true;
|
||||
@ -827,7 +825,7 @@ Instruction *InstCombiner::FoldICmpDivCst(ICmpInst &ICI, BinaryOperator *DivI,
|
||||
LoOverflow = AddWithOverflow(LoBound, HiBound, DivNeg, true) ? -1 : 0;
|
||||
}
|
||||
}
|
||||
} else if (DivRHS->getValue().isNegative()) { // Divisor is < 0.
|
||||
} else if (DivRHS->isNegative()) { // Divisor is < 0.
|
||||
if (DivI->isExact())
|
||||
RangeSize = cast<ConstantInt>(ConstantExpr::getNeg(RangeSize));
|
||||
if (CmpRHSV == 0) { // (X / neg) op 0
|
||||
@ -1027,7 +1025,7 @@ Instruction *InstCombiner::visitICmpInstWithInstAndIntCst(ICmpInst &ICI,
|
||||
|
||||
// If the sign bit of the XorCST is not set, there is no change to
|
||||
// the operation, just stop using the Xor.
|
||||
if (!XorCST->getValue().isNegative()) {
|
||||
if (!XorCST->isNegative()) {
|
||||
ICI.setOperand(0, CompareVal);
|
||||
Worklist.Add(LHSI);
|
||||
return &ICI;
|
||||
@ -1060,7 +1058,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()) {
|
||||
if (!ICI.isEquality() && XorCST->isMaxValue(true)) {
|
||||
const APInt &NotSignBit = XorCST->getValue();
|
||||
ICmpInst::Predicate Pred = ICI.isSigned()
|
||||
? ICI.getUnsignedPredicate()
|
||||
@ -1087,7 +1085,7 @@ Instruction *InstCombiner::visitICmpInstWithInstAndIntCst(ICmpInst &ICI,
|
||||
// Extending a relational comparison when we're checking the sign
|
||||
// bit would not work.
|
||||
if (ICI.isEquality() ||
|
||||
(AndCST->getValue().isNonNegative() && RHSV.isNonNegative())) {
|
||||
(!AndCST->isNegative() && RHSV.isNonNegative())) {
|
||||
Value *NewAnd =
|
||||
Builder->CreateAnd(Cast->getOperand(0),
|
||||
ConstantExpr::getZExt(AndCST, Cast->getSrcTy()));
|
||||
@ -2387,7 +2385,7 @@ Instruction *InstCombiner::visitICmpInst(ICmpInst &I) {
|
||||
BO1->getOperand(0));
|
||||
}
|
||||
|
||||
if (CI->getValue().isMaxSignedValue()) {
|
||||
if (CI->isMaxValue(true)) {
|
||||
ICmpInst::Predicate Pred = I.isSigned()
|
||||
? I.getUnsignedPredicate()
|
||||
: I.getSignedPredicate();
|
||||
|
@ -691,14 +691,14 @@ Instruction *InstCombiner::visitSRem(BinaryOperator &I) {
|
||||
bool hasNegative = false;
|
||||
for (unsigned i = 0; !hasNegative && i != VWidth; ++i)
|
||||
if (ConstantInt *RHS = dyn_cast<ConstantInt>(RHSV->getOperand(i)))
|
||||
if (RHS->getValue().isNegative())
|
||||
if (RHS->isNegative())
|
||||
hasNegative = true;
|
||||
|
||||
if (hasNegative) {
|
||||
std::vector<Constant *> Elts(VWidth);
|
||||
for (unsigned i = 0; i != VWidth; ++i) {
|
||||
if (ConstantInt *RHS = dyn_cast<ConstantInt>(RHSV->getOperand(i))) {
|
||||
if (RHS->getValue().isNegative())
|
||||
if (RHS->isNegative())
|
||||
Elts[i] = cast<ConstantInt>(ConstantExpr::getNeg(RHS));
|
||||
else
|
||||
Elts[i] = RHS;
|
||||
|
@ -2767,7 +2767,7 @@ void LSRInstance::GenerateCrossUseConstantOffsets() {
|
||||
// value to the immediate would produce a value closer to zero than the
|
||||
// immediate itself, then the formula isn't worthwhile.
|
||||
if (const SCEVConstant *C = dyn_cast<SCEVConstant>(NewF.ScaledReg))
|
||||
if (C->getValue()->getValue().isNegative() !=
|
||||
if (C->getValue()->isNegative() !=
|
||||
(NewF.AM.BaseOffs < 0) &&
|
||||
(C->getValue()->getValue().abs() * APInt(BitWidth, F.AM.Scale))
|
||||
.ule(abs64(NewF.AM.BaseOffs)))
|
||||
|
@ -812,7 +812,7 @@ Value *Reassociate::OptimizeAdd(Instruction *I,
|
||||
// because we can percolate the negate out. Watch for minint, which
|
||||
// cannot be positivified.
|
||||
if (ConstantInt *CI = dyn_cast<ConstantInt>(Factor))
|
||||
if (CI->getValue().isNegative() && !CI->getValue().isMinSignedValue()) {
|
||||
if (CI->isNegative() && !CI->isMinValue(true)) {
|
||||
Factor = ConstantInt::get(CI->getContext(), -CI->getValue());
|
||||
assert(!Duplicates.count(Factor) &&
|
||||
"Shouldn't have two constant factors, missed a canonicalize");
|
||||
|
Loading…
Reference in New Issue
Block a user