mirror of
https://github.com/RPCSX/llvm.git
synced 2025-03-04 19:07:26 +00:00
[InstCombine] use local variable to reduce code duplication; NFCI
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@302438 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
3f38291e28
commit
811100c771
@ -2797,7 +2797,7 @@ Instruction *InstCombiner::foldICmpBinOp(ICmpInst &I) {
|
||||
if (!BO0 && !BO1)
|
||||
return nullptr;
|
||||
|
||||
CmpInst::Predicate Pred = I.getPredicate();
|
||||
const CmpInst::Predicate Pred = I.getPredicate();
|
||||
bool NoOp0WrapProblem = false, NoOp1WrapProblem = false;
|
||||
if (BO0 && isa<OverflowingBinaryOperator>(BO0))
|
||||
NoOp0WrapProblem =
|
||||
@ -3032,21 +3032,20 @@ Instruction *InstCombiner::foldICmpBinOp(ICmpInst &I) {
|
||||
case Instruction::Sub:
|
||||
case Instruction::Xor:
|
||||
if (I.isEquality()) // a+x icmp eq/ne b+x --> a icmp b
|
||||
return new ICmpInst(I.getPredicate(), BO0->getOperand(0),
|
||||
BO1->getOperand(0));
|
||||
return new ICmpInst(Pred, BO0->getOperand(0), BO1->getOperand(0));
|
||||
// icmp u/s (a ^ signmask), (b ^ signmask) --> icmp s/u a, b
|
||||
if (ConstantInt *CI = dyn_cast<ConstantInt>(BO0->getOperand(1))) {
|
||||
if (CI->getValue().isSignMask()) {
|
||||
ICmpInst::Predicate Pred =
|
||||
ICmpInst::Predicate NewPred =
|
||||
I.isSigned() ? I.getUnsignedPredicate() : I.getSignedPredicate();
|
||||
return new ICmpInst(Pred, BO0->getOperand(0), BO1->getOperand(0));
|
||||
return new ICmpInst(NewPred, BO0->getOperand(0), BO1->getOperand(0));
|
||||
}
|
||||
|
||||
if (BO0->getOpcode() == Instruction::Xor && CI->isMaxValue(true)) {
|
||||
ICmpInst::Predicate Pred =
|
||||
ICmpInst::Predicate NewPred =
|
||||
I.isSigned() ? I.getUnsignedPredicate() : I.getSignedPredicate();
|
||||
Pred = I.getSwappedPredicate(Pred);
|
||||
return new ICmpInst(Pred, BO0->getOperand(0), BO1->getOperand(0));
|
||||
NewPred = I.getSwappedPredicate(NewPred);
|
||||
return new ICmpInst(NewPred, BO0->getOperand(0), BO1->getOperand(0));
|
||||
}
|
||||
}
|
||||
break;
|
||||
@ -3065,7 +3064,7 @@ Instruction *InstCombiner::foldICmpBinOp(ICmpInst &I) {
|
||||
AP.getBitWidth() - AP.countTrailingZeros()));
|
||||
Value *And1 = Builder->CreateAnd(BO0->getOperand(0), Mask);
|
||||
Value *And2 = Builder->CreateAnd(BO1->getOperand(0), Mask);
|
||||
return new ICmpInst(I.getPredicate(), And1, And2);
|
||||
return new ICmpInst(Pred, And1, And2);
|
||||
}
|
||||
}
|
||||
break;
|
||||
@ -3078,8 +3077,7 @@ Instruction *InstCombiner::foldICmpBinOp(ICmpInst &I) {
|
||||
case Instruction::AShr:
|
||||
if (!BO0->isExact() || !BO1->isExact())
|
||||
break;
|
||||
return new ICmpInst(I.getPredicate(), BO0->getOperand(0),
|
||||
BO1->getOperand(0));
|
||||
return new ICmpInst(Pred, BO0->getOperand(0), BO1->getOperand(0));
|
||||
case Instruction::Shl: {
|
||||
bool NUW = BO0->hasNoUnsignedWrap() && BO1->hasNoUnsignedWrap();
|
||||
bool NSW = BO0->hasNoSignedWrap() && BO1->hasNoSignedWrap();
|
||||
@ -3087,8 +3085,7 @@ Instruction *InstCombiner::foldICmpBinOp(ICmpInst &I) {
|
||||
break;
|
||||
if (!NSW && I.isSigned())
|
||||
break;
|
||||
return new ICmpInst(I.getPredicate(), BO0->getOperand(0),
|
||||
BO1->getOperand(0));
|
||||
return new ICmpInst(Pred, BO0->getOperand(0), BO1->getOperand(0));
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -3099,7 +3096,7 @@ Instruction *InstCombiner::foldICmpBinOp(ICmpInst &I) {
|
||||
auto BitwiseAnd =
|
||||
m_CombineOr(m_And(m_Value(), LSubOne), m_And(LSubOne, m_Value()));
|
||||
|
||||
if (match(BO0, BitwiseAnd) && I.getPredicate() == ICmpInst::ICMP_ULT) {
|
||||
if (match(BO0, BitwiseAnd) && Pred == ICmpInst::ICMP_ULT) {
|
||||
auto *Zero = Constant::getNullValue(BO0->getType());
|
||||
return new ICmpInst(ICmpInst::ICMP_NE, Op1, Zero);
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user