reference, declarationdefinition
definition → references, declarations, derived classes, virtual overrides
reference to multiple definitions → definitions
unreferenced

References

lib/Transforms/InstCombine/InstCombineMulDivRem.cpp
  172   if (Value *V = SimplifyMulInst(I.getOperand(0), I.getOperand(1),
  172   if (Value *V = SimplifyMulInst(I.getOperand(0), I.getOperand(1),
  173                                  SQ.getWithInstruction(&I)))
  174     return replaceInstUsesWith(I, V);
  176   if (SimplifyAssociativeOrCommutative(I))
  177     return &I;
  179   if (Instruction *X = foldVectorBinop(I))
  182   if (Value *V = SimplifyUsingDistributiveLaws(I))
  183     return replaceInstUsesWith(I, V);
  186   Value *Op0 = I.getOperand(0), *Op1 = I.getOperand(1);
  186   Value *Op0 = I.getOperand(0), *Op1 = I.getOperand(1);
  188     BinaryOperator *BO = BinaryOperator::CreateNeg(Op0, I.getName());
  189     if (I.hasNoSignedWrap())
  199     if (match(&I, m_Mul(m_Shl(m_Value(NewOp), m_Constant(C2)),
  204       BinaryOperator *Mul = cast<BinaryOperator>(I.getOperand(0));
  206       if (I.hasNoUnsignedWrap() && Mul->hasNoUnsignedWrap())
  208       if (I.hasNoSignedWrap() && Mul->hasNoSignedWrap() &&
  214     if (match(&I, m_Mul(m_Value(NewOp), m_Constant(C1)))) {
  219         if (I.hasNoUnsignedWrap())
  221         if (I.hasNoSignedWrap()) {
  257   if (Instruction *FoldedMul = foldBinOpIntoSelectOrPhi(I))
  260   if (Value *FoldedMul = foldMulSelectToNegate(I, Builder))
  261     return replaceInstUsesWith(I, FoldedMul);
  286     if (I.hasNoSignedWrap() &&
  295   if (match(&I, m_c_Mul(m_OneUse(m_Neg(m_Value(X))), m_Value(Y))))
  318           return replaceInstUsesWith(I, X);
  332   if (I.getType()->isIntOrIntVectorTy(1))
  349       if (I.hasNoUnsignedWrap())
  351       if (I.hasNoSignedWrap() && ShlNSW)
  360     return SelectInst::Create(X, Op1, ConstantInt::get(I.getType(), 0));
  362     return SelectInst::Create(X, Op0, ConstantInt::get(I.getType(), 0));
  376   if (Instruction *Ext = narrowMathIfNoOverflow(I))
  380   if (!I.hasNoSignedWrap() && willNotOverflowSignedMul(Op0, Op1, I)) {
  380   if (!I.hasNoSignedWrap() && willNotOverflowSignedMul(Op0, Op1, I)) {
  382     I.setHasNoSignedWrap(true);
  385   if (!I.hasNoUnsignedWrap() && willNotOverflowUnsignedMul(Op0, Op1, I)) {
  385   if (!I.hasNoUnsignedWrap() && willNotOverflowUnsignedMul(Op0, Op1, I)) {
  387     I.setHasNoUnsignedWrap(true);
  390   return Changed ? &I : nullptr;