Home | History | Annotate | Download | only in InstCombine

Lines Matching full:pred

120 static bool isSignBitCheck(ICmpInst::Predicate pred, ConstantInt *RHS,
122 switch (pred) {
148 static bool isSignTest(ICmpInst::Predicate &pred, const ConstantInt *RHS) {
149 if (!ICmpInst::isSigned(pred))
153 return ICmpInst::isRelational(pred);
156 if (pred == ICmpInst::ICMP_SLT) {
157 pred = ICmpInst::ICMP_SLE;
161 if (pred == ICmpInst::ICMP_SGT) {
162 pred = ICmpInst::ICMP_SGE;
220 /// cmp pred (load (gep GV, ...)), cmpcst
810 /// FoldICmpAddOpCst - Fold "icmp pred (X+CI), X".
813 ICmpInst::Predicate Pred) {
821 if (Pred == ICmpInst::ICMP_ULT || Pred == ICmpInst::ICMP_ULE) {
830 if (Pred == ICmpInst::ICMP_UGT || Pred == ICmpInst::ICMP_UGE)
843 if (Pred == ICmpInst::ICMP_SLT || Pred == ICmpInst::ICMP_SLE)
853 assert(Pred == ICmpInst::ICMP_SGT || Pred == ICmpInst::ICMP_SGE);
858 /// FoldICmpDivCst - Fold "icmp pred, ([su]div X, DivRHS), CmpRHS" where DivRHS
899 ICmpInst::Predicate Pred = ICI.getPredicate();
968 Pred = ICmpInst::getSwappedPredicate(Pred);
972 switch (Pred) {
1002 return new ICmpInst(Pred, X, LoBound);
1009 if (Pred == ICmpInst::ICMP_UGT)
1115 auto getICmp = [&I](CmpInst::Predicate Pred, Value *LHS, Value *RHS) {
1117 Pred = CmpInst::getInversePredicate(Pred);
1118 return new ICmpInst(Pred, LHS, RHS);
1179 auto getICmp = [&I](CmpInst::Predicate Pred, Value *LHS, Value *RHS) {
1181 Pred = CmpInst::getInversePredicate(Pred);
1182 return new ICmpInst(Pred, LHS, RHS);
1247 case Instruction::Xor: // (icmp pred (xor X, XorCst), CI)
1281 ICmpInst::Predicate Pred = ICI.isSigned()
1284 return new ICmpInst(Pred, LHSI->getOperand(0),
1291 ICmpInst::Predicate Pred = ICI.isSigned()
1294 Pred = ICI.getSwappedPredicate(Pred);
1295 return new ICmpInst(Pred, LHSI->getOperand(0),
1313 case Instruction::And: // (icmp pred (and X, AndCst), RHS)
1456 // (icmp pred (and (or (lshr X, Y), X), 1), 0) -->
1457 // (icmp pred (and X, (or (shl 1, Y), 1), 0))
1459 // iff pred isn't signed
1579 case Instruction::Mul: { // (icmp pred (mul X, Val), CI)
1585 ICmpInst::Predicate pred = ICI.getPredicate();
1586 if (isSignTest(pred, RHS) && !Val->isZero() &&
1589 ICmpInst::getSwappedPredicate(pred) : pred,
1596 case Instruction::Shl: { // (icmp pred (shl X, ShAmt), CI)
1601 // (1 << X) pred P2 -> X pred Log2(P2)
1604 ICmpInst::Predicate Pred = ICI.getPredicate();
1611 if (Pred == ICmpInst::ICMP_ULT)
1612 Pred = ICmpInst::ICMP_ULE;
1613 else if (Pred == ICmpInst::ICMP_UGE)
1614 Pred = ICmpInst::ICMP_UGT;
1621 if (Pred == ICmpInst::ICMP_UGE)
1622 Pred = ICmpInst::ICMP_EQ;
1623 else if (Pred == ICmpInst::ICMP_ULT)
1624 Pred = ICmpInst::ICMP_NE;
1627 return new ICmpInst(Pred, X,
1632 if (Pred == ICmpInst::ICMP_SLE)
1637 if (Pred == ICmpInst::ICMP_SGT)
1643 if (Pred == ICmpInst::ICMP_SLT || Pred == ICmpInst::ICMP_SLE)
1649 if (Pred == ICmpInst::ICMP_SGT || Pred == ICmpInst::ICMP_SGE)
1656 Pred, X, ConstantInt::get(RHS->getType(), RHSV.logBase2()));
1707 ICmpInst::Predicate pred = ICI.getPredicate();
1708 if (isSignTest(pred, RHS) &&
1710 return new ICmpInst(pred,
1728 // Transform (icmp pred iM (shl iM %v, N), CI)
1729 // -> (icmp pred i(M-N) (trunc %v iM to i(M-N)), (trunc (CI>>N))
1750 case Instruction::LShr: // (icmp pred (shr X, ShAmt), CI)
1769 // Fold: icmp pred ([us]div X, C1), C2 -> range test
1806 // Fold: icmp pred (add X, C1), C2
1952 ICmpInst::Predicate pred = isICMP_NE ?
1954 return new ICmpInst(pred, X, Zero);
1961 ICmpInst::Predicate pred = isICMP_NE ?
1963 return new ICmpInst(pred, X, NegX);
3195 // icmp pred GEP (P, int 0, int 0, int 0), null -> icmp pred P, null
3258 // icmp pred inttoptr(X), null -> icmp pred X, 0
3343 CmpInst::Predicate Pred = I.getPredicate();
3346 NoOp0WrapProblem = ICmpInst::isEquality(Pred) ||
3347 (CmpInst::isUnsigned(Pred) && BO0->hasNoUnsignedWrap()) ||
3348 (CmpInst::isSigned(Pred) && BO0->hasNoSignedWrap());
3350 NoOp1WrapProblem = ICmpInst::isEquality(Pred) ||
3351 (CmpInst::isUnsigned(Pred) && BO1->hasNoUnsignedWrap()) ||
3352 (CmpInst::isSigned(Pred) && BO1->hasNoSignedWrap());
3363 if (NoOp0WrapProblem && ICmpInst::isSigned(Pred) && match(Op1, m_Zero()))
3366 return new ICmpInst(Pred, A, ConstantExpr::getNeg(RHSC));
3370 return new ICmpInst(Pred, A == Op1 ? B : A,
3375 return new ICmpInst(Pred, Constant::getNullValue(Op0->getType()),
3403 return new ICmpInst(Pred, Y, Z);
3407 if (A && NoOp0WrapProblem && Pred == CmpInst::ICMP_SLT &&
3412 if (A && NoOp0WrapProblem && Pred == CmpInst::ICMP_SGE &&
3417 if (A && NoOp0WrapProblem && Pred == CmpInst::ICMP_SLE &&
3422 if (A && NoOp0WrapProblem && Pred == CmpInst::ICMP_SGT &&
3427 if (C && NoOp1WrapProblem && Pred == CmpInst::ICMP_SGT &&
3432 if (C && NoOp1WrapProblem && Pred == CmpInst::ICMP_SLE &&
3437 if (C && NoOp1WrapProblem && Pred == CmpInst::ICMP_SGE &&
3442 if (C && NoOp1WrapProblem && Pred == CmpInst::ICMP_SLT &&
3465 return new ICmpInst(Pred, NewAdd, C);
3469 return new ICmpInst(Pred, A, NewAdd);
3485 return new ICmpInst(Pred, Constant::getNullValue(Op1->getType()), B);
3489 return new ICmpInst(Pred, D, Constant::getNullValue(Op0->getType()));
3495 return new ICmpInst(Pred, A, C);
3501 return new ICmpInst(Pred, D, B);
3504 if (NoOp0WrapProblem && ICmpInst::isSigned(Pred)) {
3525 switch (SRem == BO0 ? ICmpInst::getSwappedPredicate(Pred) : Pred) {
3556 ICmpInst::Predicate Pred = I.isSigned()
3559 return new ICmpInst(Pred, BO0->getOperand(0),
3564 ICmpInst::Predicate Pred = I.isSigned()
3567 Pred = I.getSwappedPredicate(Pred);
3568 return new ICmpInst(Pred, BO0->getOperand(0),
3758 ICmpInst::Predicate Pred = I.getPredicate() == ICmpInst::ICMP_NE
3763 return new ICmpInst(Pred, Xor, Builder->getInt(CmpVal));
3908 ICmpInst::Predicate Pred;
3913 Pred
3917 Pred = LHSUnsigned ? ICmpInst::ICMP_UGT : ICmpInst::ICMP_SGT;
3921 Pred = LHSUnsigned ? ICmpInst::ICMP_UGE : ICmpInst::ICMP_SGE;
3925 Pred = LHSUnsigned ? ICmpInst::ICMP_ULT : ICmpInst::ICMP_SLT;
3929 Pred = LHSUnsigned ? ICmpInst::ICMP_ULE : ICmpInst::ICMP_SLE;
3933 Pred = ICmpInst::ICMP_NE;
3954 if (Pred == ICmpInst::ICMP_NE || Pred == ICmpInst::ICMP_SLT ||
3955 Pred == ICmpInst::ICMP_SLE)
3966 if (Pred == ICmpInst::ICMP_NE || Pred == ICmpInst::ICMP_ULT ||
3967 Pred == ICmpInst::ICMP_ULE)
3979 if (Pred == ICmpInst::ICMP_NE || Pred == ICmpInst::ICMP_SGT ||
3980 Pred == ICmpInst::ICMP_SGE)
3990 if (Pred == ICmpInst::ICMP_NE || Pred == ICmpInst::ICMP_UGT ||
3991 Pred == ICmpInst::ICMP_UGE)
4012 switch (Pred) {
4028 Pred = ICmpInst::ICMP_SLT;
4035 Pred = ICmpInst::ICMP_ULE;
4041 Pred = ICmpInst::ICMP_SLE;
4053 Pred = ICmpInst::ICMP_SGE;
4060 Pred = ICmpInst::ICMP_UGT;
4066 Pred = ICmpInst::ICMP_SGT;
4074 return new ICmpInst(Pred, LHSI->getOperand(0), RHSInt);
4094 // Simplify 'fcmp pred X, X'
4189 // fcmp pred (fneg x), C -> fcmp swap(pred) x, -C
4249 // fcmp pred (fneg x), (fneg y) -> fcmp swap(pred) x, y