mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-07-25 13:24:46 +00:00
start using the new helper methods a bit.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@135251 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@@ -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();
|
||||
|
Reference in New Issue
Block a user