Lines Matching refs:BinaryOperator
770 static Value *checkForNegativeOperand(BinaryOperator &I, in checkForNegativeOperand()
826 Instruction *InstCombiner::foldAddWithConstant(BinaryOperator &Add) { in foldAddWithConstant()
840 return BinaryOperator::CreateAdd(Builder.CreateNot(Y), X); in foldAddWithConstant()
849 return BinaryOperator::CreateSub(SubOne(Op1C), X); in foldAddWithConstant()
859 return BinaryOperator::CreateOr(Op0, Op1); in foldAddWithConstant()
863 return BinaryOperator::CreateXor(Op0, Op1); in foldAddWithConstant()
898 return BinaryOperator::CreateAnd(NotX, ConstantInt::get(Ty, 1)); in foldAddWithConstant()
980 Value *InstCombiner::SimplifyAddWithRemainder(BinaryOperator &I) { in SimplifyAddWithRemainder()
1017 static Instruction *canonicalizeLowbitMask(BinaryOperator &I, in canonicalizeLowbitMask()
1026 if (auto *BOp = dyn_cast<BinaryOperator>(NotMask)) { in canonicalizeLowbitMask()
1032 return BinaryOperator::CreateNot(NotMask, I.getName()); in canonicalizeLowbitMask()
1035 Instruction *InstCombiner::visitAdd(BinaryOperator &I) { in visitAdd()
1082 return BinaryOperator::CreateAShr(NewShl, ShAmt); in visitAdd()
1090 return BinaryOperator::CreateSub(ConstantExpr::getAdd(XorRHS, CI), in visitAdd()
1096 return BinaryOperator::CreateAdd(XorLHS, in visitAdd()
1102 return BinaryOperator::CreateXor(LHS, RHS); in visitAdd()
1106 auto *Shl = BinaryOperator::CreateShl(LHS, ConstantInt::get(Ty, 1)); in visitAdd()
1116 return BinaryOperator::CreateNeg(Builder.CreateAdd(A, B)); in visitAdd()
1119 return BinaryOperator::CreateSub(RHS, A); in visitAdd()
1124 return BinaryOperator::CreateSub(LHS, B); in visitAdd()
1132 return BinaryOperator::CreateSub(A, B); in visitAdd()
1139 return BinaryOperator::CreateOr(LHS, RHS); in visitAdd()
1164 return BinaryOperator::CreateAnd(NewAdd, C2); in visitAdd()
1201 return BinaryOperator::CreateOr(A, B); in visitAdd()
1232 static Instruction *factorizeFAddFSub(BinaryOperator &I, in factorizeFAddFSub()
1266 return IsFMul ? BinaryOperator::CreateFMulFMF(XY, Z, &I) in factorizeFAddFSub()
1267 : BinaryOperator::CreateFDivFMF(XY, Z, &I); in factorizeFAddFSub()
1270 Instruction *InstCombiner::visitFAdd(BinaryOperator &I) { in visitFAdd()
1289 return BinaryOperator::CreateFSubFMF(RHS, X, &I); in visitFAdd()
1292 return BinaryOperator::CreateFSubFMF(LHS, X, &I); in visitFAdd()
1452 Instruction *InstCombiner::visitSub(BinaryOperator &I) { in visitSub()
1468 BinaryOperator *Res = BinaryOperator::CreateAdd(Op0, V); in visitSub()
1470 if (const auto *BO = dyn_cast<BinaryOperator>(Op1)) { in visitSub()
1484 return BinaryOperator::CreateXor(Op0, Op1); in visitSub()
1488 return BinaryOperator::CreateNot(Op1); in visitSub()
1493 return BinaryOperator::CreateSub(Y, X); in visitSub()
1497 return BinaryOperator::CreateAdd(Builder.CreateNot(Op1), X); in visitSub()
1501 return BinaryOperator::CreateAdd(Builder.CreateNot(X), Op0); in visitSub()
1523 return BinaryOperator::CreateAdd(X, AddOne(C)); in visitSub()
1538 return BinaryOperator::CreateSub(ConstantExpr::getSub(C, C2), X); in visitSub()
1553 return BinaryOperator::CreateAShr(X, ShAmtOp); in visitSub()
1558 return BinaryOperator::CreateLShr(X, ShAmtOp); in visitSub()
1583 return BinaryOperator::CreateXor(Op1, Op0); in visitSub()
1591 return BinaryOperator::CreateNeg(Y); in visitSub()
1595 return BinaryOperator::CreateNeg(Y); in visitSub()
1603 return BinaryOperator::CreateAnd(A, B); in visitSub()
1610 return BinaryOperator::CreateAnd( in visitSub()
1620 return BinaryOperator::CreateAdd(Op0, in visitSub()
1625 return BinaryOperator::CreateAnd(Op0, in visitSub()
1631 return BinaryOperator::CreateSDiv(X, ConstantExpr::getNeg(C)); in visitSub()
1636 return BinaryOperator::CreateShl(XNeg, Y); in visitSub()
1644 BinaryOperator *Add = BinaryOperator::CreateAdd(Op0, Zext); in visitSub()
1653 return BinaryOperator::CreateAdd(Op0, Builder.CreateMul(A, B)); in visitSub()
1660 return BinaryOperator::CreateAdd(Op0, NewMul); in visitSub()
1690 return BinaryOperator::CreateSub(Not, A); in visitSub()
1692 return BinaryOperator::CreateSub(A, Not); in visitSub()
1748 Instruction *InstCombiner::visitFSub(BinaryOperator &I) { in visitFSub()
1761 return BinaryOperator::CreateFNegFMF(Op1, &I); in visitFSub()
1770 return BinaryOperator::CreateFMulFMF(X, ConstantExpr::getFNeg(C), &I); in visitFSub()
1773 return BinaryOperator::CreateFDivFMF(X, ConstantExpr::getFNeg(C), &I); in visitFSub()
1776 return BinaryOperator::CreateFDivFMF(ConstantExpr::getFNeg(C), X, &I); in visitFSub()
1787 return BinaryOperator::CreateFAddFMF(Op0, NewSub, &I); in visitFSub()
1800 return BinaryOperator::CreateFAddFMF(Op0, ConstantExpr::getFNeg(C), &I); in visitFSub()
1804 return BinaryOperator::CreateFAddFMF(Op0, Y, &I); in visitFSub()
1810 return BinaryOperator::CreateFAddFMF(Op0, Builder.CreateFPTrunc(Y, Ty), &I); in visitFSub()
1814 return BinaryOperator::CreateFAddFMF(Op0, Builder.CreateFPExt(Y, Ty), &I); in visitFSub()
1823 return BinaryOperator::CreateFNegFMF(X, &I); in visitFSub()
1828 return BinaryOperator::CreateFNegFMF(X, &I); in visitFSub()
1833 return BinaryOperator::CreateFMulFMF(Op1, CSubOne, &I); in visitFSub()
1838 return BinaryOperator::CreateFMulFMF(Op0, OneSubC, &I); in visitFSub()