Lines Matching defs:MulC
2203 const APInt *MulC;
2204 if (!match(Mul->getOperand(1), m_APInt(MulC)))
2209 // (X * +MulC) < 0 --> X < 0
2210 // (X * -MulC) < 0 --> X > 0
2212 if (MulC->isNegative())
2217 if (MulC->isZero())
2223 // (mul nsw X, MulC) eq/ne C --> X eq/ne C /s MulC
2224 if (Mul->hasNoSignedWrap() && C.srem(*MulC).isZero()) {
2225 Constant *NewC = ConstantInt::get(MulTy, C.sdiv(*MulC));
2229 // C % MulC == 0 is weaker than we could use if MulC is odd because it
2230 // correct to transform if MulC * N == C including overflow. I.e with i8
2233 if (C.urem(*MulC).isZero()) {
2234 // (mul nuw X, MulC) eq/ne C --> X eq/ne C /u MulC
2236 if ((*MulC & 1).isOne() || Mul->hasNoUnsignedWrap()) {
2237 Constant *NewC = ConstantInt::get(MulTy, C.udiv(*MulC));
2244 // (X * MulC) < C --> X < (C / MulC)
2245 // (X * MulC) > C --> X > (C / MulC)
2250 if (C.isMinSignedValue() && MulC->isAllOnes())
2252 if (MulC->isNegative())
2257 MulTy, APIntOps::RoundingSDiv(C, *MulC, APInt::Rounding::UP));
2262 MulTy, APIntOps::RoundingSDiv(C, *MulC, APInt::Rounding::DOWN));
2267 MulTy, APIntOps::RoundingUDiv(C, *MulC, APInt::Rounding::UP));
2272 MulTy, APIntOps::RoundingUDiv(C, *MulC, APInt::Rounding::DOWN));