Lines Matching refs:BinaryOperator

67   BinaryOperator *I = dyn_cast<BinaryOperator>(V);
100 static Value *foldMulSelectToNegate(BinaryOperator &I,
142 static Value *foldMulShl1(BinaryOperator &Mul, bool CommuteOperands,
162 BinaryOperator *Shift;
189 Instruction *InstCombinerImpl::visitMul(BinaryOperator &I) {
215 return HasNSW ? BinaryOperator::CreateNSWNeg(Op0)
216 : BinaryOperator::CreateNeg(Op0);
231 BinaryOperator *Mul = cast<BinaryOperator>(I.getOperand(0));
232 BinaryOperator *BO = BinaryOperator::CreateMul(NewOp, Shl);
243 BinaryOperator *Shl = BinaryOperator::CreateShl(NewOp, NewCst);
285 return BinaryOperator::CreateShl(Z, ConstantInt::get(Ty, ShiftAmt));
306 auto *BOp0 = cast<BinaryOperator>(Op0);
310 auto *BO = BinaryOperator::CreateAdd(NewMul, NewC);
313 if (auto *NewMulBO = dyn_cast<BinaryOperator>(NewMul))
324 return BinaryOperator::CreateMul(X, X);
343 return BinaryOperator::CreateMul(X, ConstantExpr::getNeg(Op1C));
347 auto *NewMul = BinaryOperator::CreateMul(X, Y);
357 return BinaryOperator::CreateNeg(Builder.CreateMul(X, Y));
363 return BinaryOperator::CreateMul(NegOp0, X);
380 auto BOpc = cast<BinaryOperator>(Op0)->getOpcode();
381 return BinaryOperator::CreateExact(
383 Builder.CreateBinOp(BOpc, cast<BinaryOperator>(Op0)->getOperand(1),
392 BinaryOperator *Div = dyn_cast<BinaryOperator>(Op0);
396 Div = dyn_cast<BinaryOperator>(Op1);
409 return BinaryOperator::CreateNeg(X);
420 return BinaryOperator::CreateSub(XFreeze, Rem);
421 return BinaryOperator::CreateSub(Rem, XFreeze);
433 return BinaryOperator::CreateAnd(Op0, Op1);
533 BinaryOperator *Shl = BinaryOperator::CreateShl(Op1, Res);
539 BinaryOperator *Shl = BinaryOperator::CreateShl(Op0, Res);
559 Instruction *InstCombinerImpl::foldFPSignBitOps(BinaryOperator &I) {
560 BinaryOperator::BinaryOps Opcode = I.getOpcode();
570 return BinaryOperator::CreateWithCopiedFlags(Opcode, X, Y, &I);
575 return BinaryOperator::CreateWithCopiedFlags(Opcode, X, X, &I);
590 Instruction *InstCombinerImpl::foldPowiReassoc(BinaryOperator &I) {
591 auto createPowiExpr = [](BinaryOperator &I, InstCombinerImpl &IC, Value *X,
654 return BinaryOperator::CreateFDivFMF(NewPow, Z, &I);
749 Instruction *InstCombinerImpl::foldFMulReassoc(BinaryOperator &I) {
754 BinaryOperator *Op0BinOp;
768 return BinaryOperator::CreateFDivFMF(CC1, X, FMF);
776 return BinaryOperator::CreateFMulFMF(X, CDivC1, FMF);
783 return BinaryOperator::CreateFDivFMF(X, C1DivC, FMF);
794 return BinaryOperator::CreateFAddFMF(XC, CC1, FMF);
802 return BinaryOperator::CreateFSubFMF(CC1, XC, FMF);
811 BinaryOperator *DivOp = cast<BinaryOperator>(((Z == Op0) ? Op1 : Op0));
816 return BinaryOperator::CreateFDivFMF(NewFMul, Y, FMF);
839 return BinaryOperator::CreateFDivFMF(X, Y, &I);
843 return BinaryOperator::CreateFDivFMF(X, Y, &I);
852 return BinaryOperator::CreateFDivFMF(XX, Y, &I);
857 return BinaryOperator::CreateFDivFMF(Y, XX, &I);
916 return BinaryOperator::CreateFMulFMF(XX, Y, &I);
920 return BinaryOperator::CreateFMulFMF(XX, Y, &I);
926 Instruction *InstCombinerImpl::visitFMul(BinaryOperator &I) {
978 return BinaryOperator::CreateFMulFMF(X, NegC, &I);
1022 return BinaryOperator::CreateFSubFMF(LogXTimesY, Y, &I);
1040 BinaryOperator *Result = BinaryOperator::CreateFMulFMF(X, Y, &I);
1055 bool InstCombinerImpl::simplifyDivRemOfSelectWithZeroOp(BinaryOperator &I) {
1151 static Value *foldIDivShl(BinaryOperator &I, InstCombiner::BuilderTy &Builder) {
1232 Instruction *InstCombinerImpl::commonIDivRemTransforms(BinaryOperator &I) {
1279 Instruction *InstCombinerImpl::commonIDivTransforms(BinaryOperator &I) {
1297 return BinaryOperator::Create(I.getOpcode(), X,
1307 auto *NewDiv = BinaryOperator::Create(I.getOpcode(), X,
1315 auto *Mul = BinaryOperator::Create(Instruction::Mul, X,
1333 auto *BO = BinaryOperator::Create(I.getOpcode(), X,
1341 auto *Mul = BinaryOperator::Create(Instruction::Mul, X,
1358 return BinaryOperator::CreateNSWAdd(X, ConstantInt::get(Ty, Quotient));
1363 return BinaryOperator::CreateNUWAdd(X,
1400 return BinaryOperator::Create(I.getOpcode(), X, Op1);
1405 return BinaryOperator::CreateNSWShl(ConstantInt::get(Ty, 1), Y);
1407 return BinaryOperator::CreateNUWShl(ConstantInt::get(Ty, 1), Y);
1426 Instruction *NewDiv = BinaryOperator::CreateUDiv(
1444 NewDiv = BinaryOperator::CreateUDiv(X, Y);
1446 NewDiv = BinaryOperator::CreateSDiv(X, Y);
1467 return BinaryOperator::CreateSDiv(A, B);
1471 return BinaryOperator::CreateUDiv(A, B);
1473 return BinaryOperator::CreateUDiv(A, B);
1591 static Instruction *narrowUDivURem(BinaryOperator &I,
1633 Instruction *InstCombinerImpl::visitUDiv(BinaryOperator &I) {
1654 BinaryOperator *BO = BinaryOperator::CreateUDiv(
1684 Instruction *Lshr = BinaryOperator::CreateLShr(A, B);
1713 Instruction *InstCombinerImpl::visitSDiv(BinaryOperator &I) {
1732 return BinaryOperator::CreateNSWNeg(Op0);
1742 return BinaryOperator::CreateExactAShr(Op0, C);
1748 return BinaryOperator::CreateExactAShr(Op0, ShAmt);
1755 return BinaryOperator::CreateNSWNeg(Ashr);
1784 Instruction *BO = BinaryOperator::CreateSDiv(X, NegC);
1793 return BinaryOperator::CreateNSWNeg(
1817 auto *BO = BinaryOperator::CreateUDiv(Op0, Op1, I.getName());
1828 return BinaryOperator::CreateNeg(Shr);
1836 auto *BO = BinaryOperator::CreateUDiv(Op0, Op1, I.getName());
1853 Instruction *InstCombinerImpl::foldFDivConstantDivisor(BinaryOperator &I) {
1863 return BinaryOperator::CreateFDivFMF(X, NegC, &I);
1894 return BinaryOperator::CreateFMulFMF(I.getOperand(0), RecipC, &I);
1898 static Instruction *foldFDivConstantDividend(BinaryOperator &I) {
1908 return BinaryOperator::CreateFDivFMF(NegC, X, &I);
1929 return BinaryOperator::CreateFDivFMF(NewC, X, &I);
1933 static Instruction *foldFDivPowDivisor(BinaryOperator &I,
1964 return BinaryOperator::CreateFMulFMF(Op0, Pow, &I);
1974 return BinaryOperator::CreateFMulFMF(Op0, Pow, &I);
1979 static Instruction *foldFDivSqrtDivisor(BinaryOperator &I,
2002 return BinaryOperator::CreateFMulFMF(Op0, NewSqrt, &I);
2073 Instruction *InstCombinerImpl::visitFDiv(BinaryOperator &I) {
2131 return BinaryOperator::CreateFDivFMF(X, YZ, &I);
2137 return BinaryOperator::CreateFDivFMF(YZ, X, &I);
2146 return BinaryOperator::CreateFMulFMF(Y, Op0, &I);
2223 static Instruction *simplifyIRemMulShl(BinaryOperator &I,
2293 [&](const APInt &RemSimplificationC) -> BinaryOperator * {
2296 return ShiftByX ? BinaryOperator::CreateShl(RemSimplification, X)
2297 : BinaryOperator::CreateMul(X, RemSimplification);
2308 BinaryOperator *BO = CreateMulOrShift(Y);
2319 BinaryOperator *BO = CreateMulOrShift(RemYZ);
2332 Instruction *InstCombinerImpl::commonIRemTransforms(BinaryOperator &I) {
2368 Instruction *InstCombinerImpl::visitURem(BinaryOperator &I) {
2390 return BinaryOperator::CreateAnd(Op0, Add);
2440 Instruction *InstCombinerImpl::visitSRem(BinaryOperator &I) {
2463 return BinaryOperator::CreateNSWNeg(Builder.CreateSRem(X, Y));
2471 return BinaryOperator::CreateURem(Op0, Op1, I.getName());
2512 Instruction *InstCombinerImpl::visitFRem(BinaryOperator &I) {