Lines Matching defs:C2

762   const APInt *C1 = nullptr, *C2 = nullptr;
774 // X = XOR(Y, C1), Y = OR(Z, C2), C2 = NOT(C1) ==> X == NOT(AND(Z, C1))
776 if (match(Y, m_Or(m_Value(Z), m_APInt(C2))) && (*C2 == ~(*C1))) {
779 } else if (match(Y, m_And(m_Value(Z), m_APInt(C2))) && (*C1 == *C2)) {
780 // X = XOR(Y, C1), Y = AND(Z, C2), C2 == C1 ==> X == NOT(OR(Z, ~C1))
796 // C2 is ODD
797 // LHS = XOR(Y, C1), Y = AND(Z, C2), C1 == (C2 + 1) => LHS == NEG(OR(Z, ~C2))
798 // ADD(LHS, RHS) == SUB(RHS, OR(Z, ~C2))
801 if (match(Y, m_And(m_Value(Z), m_APInt(C2))) && *C1 == (*C2 + 1)) {
802 Value *NewOr = Builder.CreateOr(Z, ~(*C2));
818 // (zext (X +nuw C2)) + C1 --> zext (X + (C2 + trunc(C1)))
820 const APInt *C1, *C2;
822 match(Op0, m_ZExt(m_NUWAddLike(m_Value(X), m_APInt(C2)))) &&
823 C1->isNegative() && C1->sge(-C2->sext(C1->getBitWidth()))) {
824 APInt NewC = *C2 + C1->trunc(C2->getBitWidth());
869 // add (sub C1, X), C2 --> sub (add C1, C2), X
922 // (X | C2) + C --> (X | C2) ^ C2 iff (C2 == -C)
923 const APInt *C2;
924 if (match(Op0, m_Or(m_Value(), m_APInt(C2))) && *C2 == -*C)
925 return BinaryOperator::CreateXor(Op0, ConstantInt::get(Add.getType(), *C2));
940 if (match(Op0, m_ZExt(m_Xor(m_Value(X), m_APInt(C2)))) &&
941 C2->isMinSignedValue() && C2->sext(Ty->getScalarSizeInBits()) == *C)
944 if (match(Op0, m_Xor(m_Value(X), m_APInt(C2)))) {
946 if (C2->isSignMask())
947 return BinaryOperator::CreateAdd(X, ConstantInt::get(Ty, *C2 ^ *C));
951 if (C2->isMask()) {
953 if ((*C2 | LHSKnown.Zero).isAllOnes())
954 return BinaryOperator::CreateSub(ConstantInt::get(Ty, *C2 + *C), X);
961 if (Op0->hasOneUse() && *C2 == -(*C)) {
966 else if (C2->isPowerOf2())
967 ShAmt = BitWidth - C2->logBase2() - 1;
990 if (match(Op0, m_AShr(m_Shl(m_Value(X), m_APInt(C2)), m_APInt(C3))) &&
991 C2 == C3 && *C2 == Ty->getScalarSizeInBits() - 1) {
1148 // Simplifies (X / C0) * C1 + (X % C0) * C2 to
1149 // (X / C0) * (C1 - C2 * C0) + X * C2
1177 // Match I = (X / C0) * C1 + (X % C0) * C2
1179 APInt C1, C2;
1182 if (!RHS->hasOneUse() || !MatchMul(RHS, Rem, C2))
1183 Rem = RHS, C2 = APInt(I.getType()->getScalarSizeInBits(), 1);
1186 std::swap(C1, C2);
1192 APInt NewC = C1 - C2 * C0;
1197 Value *MulXC2 = Builder.CreateMul(X, ConstantInt::get(X->getType(), C2));
1574 // (A + C1) + (C2 - B) --> (A - B) + (C1 + C2)
1575 Constant *C1, *C2;
1577 m_Sub(m_ImmConstant(C2), m_Value(B)))) &&
1580 return BinaryOperator::CreateAdd(Sub, ConstantExpr::getAdd(C1, C2));
1595 // ((X s/ C1) << C2) + X => X s% -C1 where -C1 is 1 << C2
1596 const APInt *C1, *C2;
1597 if (match(LHS, m_Shl(m_SDiv(m_Specific(RHS), m_APInt(C1)), m_APInt(C2)))) {
1598 APInt one(C2->getBitWidth(), 1);
1600 if (minusC1 == (one << *C2)) {
2151 Constant *C2;
2153 // C-(X+C2) --> (C-C2)-X
2154 if (match(Op1, m_Add(m_Value(X), m_ImmConstant(C2)))) {
2155 // C-C2 never overflow, and C-(X+C2), (X+C2) has NSW/NUW
2156 // => (C-C2)-X can have NSW/NUW
2157 bool WillNotSOV = willNotOverflowSignedSub(C, C2, I);
2159 BinaryOperator::CreateSub(ConstantExpr::getSub(C, C2), X);
2318 Constant *C2;
2320 // C-(C2-X) --> X+(C-C2)
2321 if (match(Op1, m_Sub(m_ImmConstant(C2), m_Value(X))))
2322 return BinaryOperator::CreateAdd(X, ConstantExpr::getSub(C, C2));
2337 // C - ((C3 -nuw X) & C2) --> (C - (C2 & C3)) + (X & C2) when:
2338 // (C3 - ((C2 & C3) - 1)) is pow2
2339 // ((C2 + C3) & ((C2 & C3) - 1)) == ((C2 & C3) - 1)
2340 // C2 is negative pow2 || sub nuw
2341 const APInt *C2, *C3;
2343 if (match(Op1, m_OneUse(m_And(m_BinOp(InnerSub), m_APInt(C2)))) &&
2345 (InnerSub->hasNoUnsignedWrap() || C2->isNegatedPowerOf2())) {
2346 APInt C2AndC3 = *C2 & *C3;
2348 APInt C2AddC3 = *C2 + *C3;
2351 Value *And = Builder.CreateAnd(X, ConstantInt::get(I.getType(), *C2));