Lines Matching refs:BinaryOperator

753 static Value *checkForNegativeOperand(BinaryOperator &I,  in checkForNegativeOperand()
810 static Instruction *foldNoWrapAdd(BinaryOperator &Add, in foldNoWrapAdd()
837 return BinaryOperator::CreateAdd(WideX, NewC); in foldNoWrapAdd()
844 return BinaryOperator::CreateAdd(WideX, NewC); in foldNoWrapAdd()
850 Instruction *InstCombinerImpl::foldAddWithConstant(BinaryOperator &Add) { in foldAddWithConstant()
864 return BinaryOperator::CreateSub(ConstantExpr::getAdd(Op00C, Op1C), X); in foldAddWithConstant()
871 return BinaryOperator::CreateAdd(Builder.CreateNot(Y), X); in foldAddWithConstant()
884 return BinaryOperator::CreateSub(InstCombiner::SubOne(Op1C), X); in foldAddWithConstant()
894 return BinaryOperator::CreateAdd(X, ConstantExpr::getAdd(Op01C, Op1C)); in foldAddWithConstant()
899 return BinaryOperator::CreateXor(Op0, ConstantInt::get(Add.getType(), *C2)); in foldAddWithConstant()
905 return BinaryOperator::CreateOr(Op0, Op1); in foldAddWithConstant()
909 return BinaryOperator::CreateXor(Op0, Op1); in foldAddWithConstant()
922 return BinaryOperator::CreateAdd(X, ConstantInt::get(Ty, *C2 ^ *C)); in foldAddWithConstant()
929 return BinaryOperator::CreateSub(ConstantInt::get(Ty, *C2 + *C), X); in foldAddWithConstant()
947 return BinaryOperator::CreateAShr(NewShl, ShAmtC); in foldAddWithConstant()
968 return BinaryOperator::CreateAnd(NotX, ConstantInt::get(Ty, 1)); in foldAddWithConstant()
978 return BinaryOperator::CreateAnd(NewAdd, ConstantInt::get(Ty, *C2)); in foldAddWithConstant()
1059 Value *InstCombinerImpl::SimplifyAddWithRemainder(BinaryOperator &I) { in SimplifyAddWithRemainder()
1095 static Instruction *canonicalizeLowbitMask(BinaryOperator &I, in canonicalizeLowbitMask()
1104 if (auto *BOp = dyn_cast<BinaryOperator>(NotMask)) { in canonicalizeLowbitMask()
1110 return BinaryOperator::CreateNot(NotMask, I.getName()); in canonicalizeLowbitMask()
1113 static Instruction *foldToUnsignedSaturatedAdd(BinaryOperator &I) { in foldToUnsignedSaturatedAdd()
1137 BinaryOperator &I) { in canonicalizeCondSignextOfHighBitExtractToSignextHighBitExtract()
1226 auto *NewAShr = BinaryOperator::CreateAShr(X, LowBitsToSkip, in canonicalizeCondSignextOfHighBitExtractToSignextHighBitExtract()
1239 static Instruction *factorizeMathWithShlOps(BinaryOperator &I, in factorizeMathWithShlOps()
1245 auto *Op0 = dyn_cast<BinaryOperator>(I.getOperand(0)); in factorizeMathWithShlOps()
1246 auto *Op1 = dyn_cast<BinaryOperator>(I.getOperand(1)); in factorizeMathWithShlOps()
1263 if (auto *NewI = dyn_cast<BinaryOperator>(NewMath)) { in factorizeMathWithShlOps()
1267 auto *NewShl = BinaryOperator::CreateShl(NewMath, ShAmt); in factorizeMathWithShlOps()
1273 Instruction *InstCombinerImpl::visitAdd(BinaryOperator &I) { in visitAdd()
1304 return BinaryOperator::CreateXor(LHS, RHS); in visitAdd()
1308 auto *Shl = BinaryOperator::CreateShl(LHS, ConstantInt::get(Ty, 1)); in visitAdd()
1318 return BinaryOperator::CreateNeg(Builder.CreateAdd(A, B)); in visitAdd()
1321 return BinaryOperator::CreateSub(RHS, A); in visitAdd()
1326 return BinaryOperator::CreateSub(LHS, B); in visitAdd()
1337 return BinaryOperator::CreateSub(A, B); in visitAdd()
1341 return BinaryOperator::CreateAdd(A, Builder.CreateShl(RHS, 1, "reass.add")); in visitAdd()
1345 return BinaryOperator::CreateAdd(A, Builder.CreateShl(LHS, 1, "reass.add")); in visitAdd()
1354 return BinaryOperator::CreateAdd(Sub, ConstantExpr::getAdd(C1, C2)); in visitAdd()
1368 return BinaryOperator::CreateSRem(RHS, NewRHS); in visitAdd()
1376 return BinaryOperator::CreateAnd(A, NewMask); in visitAdd()
1381 return BinaryOperator::CreateOr(LHS, RHS); in visitAdd()
1415 return BinaryOperator::CreateOr(A, B); in visitAdd()
1470 static Instruction *factorizeLerp(BinaryOperator &I, in factorizeLerp()
1482 return BinaryOperator::CreateFAddFMF(Y, MulZ, &I); in factorizeLerp()
1486 static Instruction *factorizeFAddFSub(BinaryOperator &I, in factorizeFAddFSub()
1527 return IsFMul ? BinaryOperator::CreateFMulFMF(XY, Z, &I) in factorizeFAddFSub()
1528 : BinaryOperator::CreateFDivFMF(XY, Z, &I); in factorizeFAddFSub()
1531 Instruction *InstCombinerImpl::visitFAdd(BinaryOperator &I) { in visitFAdd()
1552 return BinaryOperator::CreateFSubFMF(Y, X, &I); in visitFAdd()
1560 return BinaryOperator::CreateFSubFMF(Z, XY, &I); in visitFAdd()
1569 return BinaryOperator::CreateFSubFMF(Z, XY, &I); in visitFAdd()
1665 return BinaryOperator::CreateFMulFMF(X, NewMulC, &I); in visitFAdd()
1754 static Instruction *foldSubOfMinMax(BinaryOperator &I, in foldSubOfMinMax()
1780 return BinaryOperator::CreateAdd(X, USub); in foldSubOfMinMax()
1784 return BinaryOperator::CreateAdd(X, USub); in foldSubOfMinMax()
1800 Instruction *InstCombinerImpl::visitSub(BinaryOperator &I) { in visitSub()
1817 BinaryOperator *Res = BinaryOperator::CreateAdd(Op0, V); in visitSub()
1819 if (const auto *BO = dyn_cast<BinaryOperator>(Op1)) { in visitSub()
1843 return BinaryOperator::CreateSub(ConstantExpr::getSub(C, C2), X); in visitSub()
1876 return BinaryOperator::CreateAdd(NegOp1, Op0); in visitSub()
1886 return BinaryOperator::CreateXor(Op0, Op1); in visitSub()
1890 return BinaryOperator::CreateNot(Op1); in visitSub()
1895 return BinaryOperator::CreateAdd(Builder.CreateNot(Op1), X); in visitSub()
1905 return BinaryOperator::CreateSub(XZ, YW); in visitSub()
1911 return BinaryOperator::CreateSub(X, Add); in visitSub()
1922 return BinaryOperator::CreateSub(NotOp1, NotOp0); in visitSub()
1950 return BinaryOperator::CreateAdd(X, InstCombiner::AddOne(C)); in visitSub()
1966 return BinaryOperator::CreateAdd(X, ConstantExpr::getSub(C, C2)); in visitSub()
1975 return BinaryOperator::CreateXor(Op1, Op0); in visitSub()
1982 return BinaryOperator::CreateNeg(Y); in visitSub()
1986 return BinaryOperator::CreateNeg(Y); in visitSub()
1994 return BinaryOperator::CreateXor(A, B); in visitSub()
2002 return BinaryOperator::CreateAnd(A, B); in visitSub()
2010 return BinaryOperator::CreateOr(A, B); in visitSub()
2019 return BinaryOperator::CreateNeg(Builder.CreateXor(A, B)); in visitSub()
2027 return BinaryOperator::CreateAnd(A, B); in visitSub()
2036 return BinaryOperator::CreateNeg(Builder.CreateAnd(A, B)); in visitSub()
2043 return BinaryOperator::CreateAnd( in visitSub()
2052 return BinaryOperator::CreateNeg(Builder.CreateAnd( in visitSub()
2061 return BinaryOperator::CreateNeg( in visitSub()
2121 return BinaryOperator::CreateAnd( in visitSub()
2135 return BinaryOperator::CreateSub(Not, X); in visitSub()
2141 return BinaryOperator::CreateSub(X, Not); in visitSub()
2192 return BinaryOperator::CreateAnd(Op0, ConstantInt::get(Ty, ~(*AndC))); in visitSub()
2220 return BinaryOperator::CreateNeg(USub); in visitSub()
2226 return BinaryOperator::CreateNeg(USub); in visitSub()
2255 return BinaryOperator::CreateFMulFMF(X, ConstantExpr::getFNeg(C), &I); in foldFNegIntoConstant()
2258 return BinaryOperator::CreateFDivFMF(X, ConstantExpr::getFNeg(C), &I); in foldFNegIntoConstant()
2262 BinaryOperator::CreateFDivFMF(ConstantExpr::getFNeg(C), X, &I); in foldFNegIntoConstant()
2276 return BinaryOperator::CreateFSubFMF(ConstantExpr::getFNeg(C), X, &I); in foldFNegIntoConstant()
2289 return BinaryOperator::CreateFMulFMF(Builder.CreateFNegFMF(X, &I), Y, &I); in hoistFNegAboveFMulFDiv()
2292 return BinaryOperator::CreateFDivFMF(Builder.CreateFNegFMF(X, &I), Y, &I); in hoistFNegAboveFMulFDiv()
2312 return BinaryOperator::CreateFSubFMF(Y, X, &I); in visitFNeg()
2350 Instruction *InstCombinerImpl::visitFSub(BinaryOperator &I) { in visitFSub()
2392 return BinaryOperator::CreateFAddFMF(Op0, NewSub, &I); in visitFSub()
2412 return BinaryOperator::CreateFAddFMF(Op0, ConstantExpr::getFNeg(C), &I); in visitFSub()
2416 return BinaryOperator::CreateFAddFMF(Op0, Y, &I); in visitFSub()
2422 return BinaryOperator::CreateFAddFMF(Op0, Builder.CreateFPTrunc(Y, Ty), &I); in visitFSub()
2426 return BinaryOperator::CreateFAddFMF(Op0, Builder.CreateFPExt(Y, Ty), &I); in visitFSub()
2433 return BinaryOperator::CreateFAddFMF(Op0, FMul, &I); in visitFSub()
2440 return BinaryOperator::CreateFAddFMF(Op0, FDiv, &I); in visitFSub()
2461 return BinaryOperator::CreateFMulFMF(Op1, CSubOne, &I); in visitFSub()
2467 return BinaryOperator::CreateFMulFMF(Op0, OneSubC, &I); in visitFSub()
2478 return BinaryOperator::CreateFSubFMF(XZ, YW, &I); in visitFSub()
2493 return BinaryOperator::CreateFSubFMF(Rdx, A1, &I); in visitFSub()
2509 return BinaryOperator::CreateFSubFMF(X, FAdd, &I); in visitFSub()