Lines Matching defs:MulC
2153 const APInt *MulC;
2154 if (!match(Mul->getOperand(1), m_APInt(MulC)))
2159 // (X * +MulC) < 0 --> X < 0
2160 // (X * -MulC) < 0 --> X > 0
2162 if (MulC->isNegative())
2167 if (MulC->isZero())
2173 // (mul nsw X, MulC) eq/ne C --> X eq/ne C /s MulC
2174 if (Mul->hasNoSignedWrap() && C.srem(*MulC).isZero()) {
2175 Constant *NewC = ConstantInt::get(MulTy, C.sdiv(*MulC));
2179 // C % MulC == 0 is weaker than we could use if MulC is odd because it
2180 // correct to transform if MulC * N == C including overflow. I.e with i8
2183 if (C.urem(*MulC).isZero()) {
2184 // (mul nuw X, MulC) eq/ne C --> X eq/ne C /u MulC
2186 if ((*MulC & 1).isOne() || Mul->hasNoUnsignedWrap()) {
2187 Constant *NewC = ConstantInt::get(MulTy, C.udiv(*MulC));
2194 // (X * MulC) < C --> X < (C / MulC)
2195 // (X * MulC) > C --> X > (C / MulC)
2200 if (C.isMinSignedValue() && MulC->isAllOnes())
2202 if (MulC->isNegative())
2207 MulTy, APIntOps::RoundingSDiv(C, *MulC, APInt::Rounding::UP));
2212 MulTy, APIntOps::RoundingSDiv(C, *MulC, APInt::Rounding::DOWN));
2217 MulTy, APIntOps::RoundingUDiv(C, *MulC, APInt::Rounding::UP));
2222 MulTy, APIntOps::RoundingUDiv(C, *MulC, APInt::Rounding::DOWN));