reference, declaration → definition definition → references, declarations, derived classes, virtual overrides reference to multiple definitions → definitions unreferenced |
394 if (Value *V = SimplifyFMulInst(I.getOperand(0), I.getOperand(1), 394 if (Value *V = SimplifyFMulInst(I.getOperand(0), I.getOperand(1), 395 I.getFastMathFlags(), 396 SQ.getWithInstruction(&I))) 397 return replaceInstUsesWith(I, V); 399 if (SimplifyAssociativeOrCommutative(I)) 400 return &I; 402 if (Instruction *X = foldVectorBinop(I)) 405 if (Instruction *FoldedMul = foldBinOpIntoSelectOrPhi(I)) 408 if (Value *FoldedMul = foldMulSelectToNegate(I, Builder)) 409 return replaceInstUsesWith(I, FoldedMul); 412 Value *Op0 = I.getOperand(0), *Op1 = I.getOperand(1); 412 Value *Op0 = I.getOperand(0), *Op1 = I.getOperand(1); 414 return BinaryOperator::CreateFNegFMF(Op0, &I); 419 return BinaryOperator::CreateFMulFMF(X, Y, &I); 424 return BinaryOperator::CreateFMulFMF(X, ConstantExpr::getFNeg(C), &I); 428 return BinaryOperator::CreateFMulFMF(X, X, &I); 431 if (Value *V = SimplifySelectsFeedingBinaryOp(I, Op0, Op1)) 432 return replaceInstUsesWith(I, V); 434 if (I.hasAllowReassoc()) { 443 return BinaryOperator::CreateFDivFMF(CC1, X, &I); 449 return BinaryOperator::CreateFMulFMF(X, CDivC1, &I); 455 return BinaryOperator::CreateFDivFMF(X, C1DivC, &I); 464 Value *XC = Builder.CreateFMulFMF(X, C, &I); 465 return BinaryOperator::CreateFAddFMF(XC, CC1, &I); 470 Value *XC = Builder.CreateFMulFMF(X, C, &I); 471 return BinaryOperator::CreateFSubFMF(CC1, XC, &I); 476 if (match(&I, m_c_FMul(m_OneUse(m_FDiv(m_Value(X), m_Value(Y))), 479 Value *NewFMul = Builder.CreateFMulFMF(X, Z, &I); 480 return BinaryOperator::CreateFDivFMF(NewFMul, Y, &I); 486 if (I.hasNoNaNs() && 489 Value *XY = Builder.CreateFMulFMF(X, Y, &I); 490 Value *Sqrt = Builder.CreateUnaryIntrinsic(Intrinsic::sqrt, XY, &I); 491 return replaceInstUsesWith(I, Sqrt); 496 if (I.hasNoNaNs() && I.hasNoSignedZeros() && Op0 == Op1 && 496 if (I.hasNoNaNs() && I.hasNoSignedZeros() && Op0 == Op1 && 502 Value *XX = Builder.CreateFMulFMF(X, X, &I); 503 return BinaryOperator::CreateFDivFMF(XX, Y, &I); 508 Value *XX = Builder.CreateFMulFMF(X, X, &I); 509 return BinaryOperator::CreateFDivFMF(Y, XX, &I); 518 Value *XY = Builder.CreateFAddFMF(X, Y, &I); 519 Value *Exp = Builder.CreateUnaryIntrinsic(Intrinsic::exp, XY, &I); 520 return replaceInstUsesWith(I, Exp); 528 Value *XY = Builder.CreateFAddFMF(X, Y, &I); 529 Value *Exp2 = Builder.CreateUnaryIntrinsic(Intrinsic::exp2, XY, &I); 530 return replaceInstUsesWith(I, Exp2); 542 Value *XX = Builder.CreateFMulFMF(Op1, Op1, &I); 543 return BinaryOperator::CreateFMulFMF(XX, Y, &I); 547 Value *XX = Builder.CreateFMulFMF(Op0, Op0, &I); 548 return BinaryOperator::CreateFMulFMF(XX, Y, &I); 553 if (I.isFast()) { 567 Log2->copyFastMathFlags(&I); 568 Value *LogXTimesY = Builder.CreateFMulFMF(Log2, Y, &I); 569 return BinaryOperator::CreateFSubFMF(LogXTimesY, Y, &I);