Lines Matching refs:BinaryOperator

752 static Value *checkForNegativeOperand(BinaryOperator &I,  in checkForNegativeOperand()
809 static Instruction *foldNoWrapAdd(BinaryOperator &Add, in foldNoWrapAdd()
843 return BinaryOperator::CreateAdd(WideX, NewC); in foldNoWrapAdd()
851 return BinaryOperator::CreateAdd(WideX, NewC); in foldNoWrapAdd()
856 Instruction *InstCombinerImpl::foldAddWithConstant(BinaryOperator &Add) { in foldAddWithConstant()
871 return BinaryOperator::CreateSub(ConstantExpr::getAdd(Op00C, Op1C), X); in foldAddWithConstant()
878 return BinaryOperator::CreateAdd(Builder.CreateNot(Y), X); in foldAddWithConstant()
894 BinaryOperator *Res = in foldAddWithConstant()
895 BinaryOperator::CreateSub(ConstantExpr::getSub(Op1C, COne), X); in foldAddWithConstant()
914 BinaryOperator *NewAdd = in foldAddWithConstant()
915 BinaryOperator::CreateAdd(X, ConstantExpr::getAdd(Op01C, Op1C)); in foldAddWithConstant()
925 return BinaryOperator::CreateXor(Op0, ConstantInt::get(Add.getType(), *C2)); in foldAddWithConstant()
931 return BinaryOperator::CreateOr(Op0, Op1); in foldAddWithConstant()
935 return BinaryOperator::CreateXor(Op0, Op1); in foldAddWithConstant()
947 return BinaryOperator::CreateAdd(X, ConstantInt::get(Ty, *C2 ^ *C)); in foldAddWithConstant()
954 return BinaryOperator::CreateSub(ConstantInt::get(Ty, *C2 + *C), X); in foldAddWithConstant()
972 return BinaryOperator::CreateAShr(NewShl, ShAmtC); in foldAddWithConstant()
993 return BinaryOperator::CreateAnd(NotX, ConstantInt::get(Ty, 1)); in foldAddWithConstant()
1019 static bool matchesSquareSum(BinaryOperator &I, Mul2Rhs M2Rhs, Value *&A, in matchesSquareSum()
1052 Instruction *InstCombinerImpl::foldSquareSumInt(BinaryOperator &I) { in foldSquareSumInt()
1056 return BinaryOperator::CreateMul(AB, AB); in foldSquareSumInt()
1063 Instruction *InstCombinerImpl::foldSquareSumFP(BinaryOperator &I) { in foldSquareSumFP()
1068 return BinaryOperator::CreateFMulFMF(AB, AB, &I); in foldSquareSumFP()
1150 Value *InstCombinerImpl::SimplifyAddWithRemainder(BinaryOperator &I) { in SimplifyAddWithRemainder()
1213 static Instruction *canonicalizeLowbitMask(BinaryOperator &I, in canonicalizeLowbitMask()
1222 if (auto *BOp = dyn_cast<BinaryOperator>(NotMask)) { in canonicalizeLowbitMask()
1228 return BinaryOperator::CreateNot(NotMask, I.getName()); in canonicalizeLowbitMask()
1231 static Instruction *foldToUnsignedSaturatedAdd(BinaryOperator &I) { in foldToUnsignedSaturatedAdd()
1257 const BinaryOperator &I) { in combineAddSubWithShlAddSub()
1263 return BinaryOperator::CreateSub(A, NewShl); in combineAddSubWithShlAddSub()
1269 static Instruction *foldAddToAshr(BinaryOperator &Add) { in foldAddToAshr()
1303 return BinaryOperator::CreateAShr( in foldAddToAshr()
1309 BinaryOperator &I) { in canonicalizeCondSignextOfHighBitExtractToSignextHighBitExtract()
1398 auto *NewAShr = BinaryOperator::CreateAShr(X, LowBitsToSkip, in canonicalizeCondSignextOfHighBitExtractToSignextHighBitExtract()
1411 static Instruction *factorizeMathWithShlOps(BinaryOperator &I, in factorizeMathWithShlOps()
1417 auto *Op0 = dyn_cast<BinaryOperator>(I.getOperand(0)); in factorizeMathWithShlOps()
1418 auto *Op1 = dyn_cast<BinaryOperator>(I.getOperand(1)); in factorizeMathWithShlOps()
1435 if (auto *NewI = dyn_cast<BinaryOperator>(NewMath)) { in factorizeMathWithShlOps()
1439 auto *NewShl = BinaryOperator::CreateShl(NewMath, ShAmt); in factorizeMathWithShlOps()
1447 static Instruction *foldBoxMultiply(BinaryOperator &I) { in foldBoxMultiply()
1481 return BinaryOperator::CreateMul(X, Y); in foldBoxMultiply()
1486 Instruction *InstCombinerImpl::visitAdd(BinaryOperator &I) { in visitAdd()
1526 return BinaryOperator::CreateXor(LHS, RHS); in visitAdd()
1530 auto *Shl = BinaryOperator::CreateShl(LHS, ConstantInt::get(Ty, 1)); in visitAdd()
1540 return BinaryOperator::CreateNeg(Builder.CreateAdd(A, B)); in visitAdd()
1543 auto *Sub = BinaryOperator::CreateSub(RHS, A); in visitAdd()
1552 return BinaryOperator::CreateSub(LHS, B); in visitAdd()
1563 return BinaryOperator::CreateSub(A, B); in visitAdd()
1567 return BinaryOperator::CreateAdd(A, Builder.CreateShl(RHS, 1, "reass.add")); in visitAdd()
1571 return BinaryOperator::CreateAdd(A, Builder.CreateShl(LHS, 1, "reass.add")); in visitAdd()
1580 return BinaryOperator::CreateAdd(Sub, ConstantExpr::getAdd(C1, C2)); in visitAdd()
1588 return BinaryOperator::CreateAdd(Sub, C1); in visitAdd()
1602 return BinaryOperator::CreateSRem(RHS, NewRHS); in visitAdd()
1610 return BinaryOperator::CreateAnd(A, NewMask); in visitAdd()
1628 return BinaryOperator::CreateDisjointOr(LHS, RHS); in visitAdd()
1637 return BinaryOperator::CreateOr(A, B); in visitAdd()
1658 return BinaryOperator::CreateAnd(Add, A); in visitAdd()
1669 return BinaryOperator::CreateAnd(Dec, Not); in visitAdd()
1683 return BinaryOperator::CreateAdd(NewMul, ConstantInt::getAllOnesValue(Ty)); in visitAdd()
1692 return BinaryOperator::CreateSub(B, Shl); in visitAdd()
1705 return BinaryOperator::CreateOr(LHS, Zext); in visitAdd()
1741 return BinaryOperator::CreateSub( in visitAdd()
1826 static Instruction *factorizeLerp(BinaryOperator &I, in factorizeLerp()
1838 return BinaryOperator::CreateFAddFMF(Y, MulZ, &I); in factorizeLerp()
1842 static Instruction *factorizeFAddFSub(BinaryOperator &I, in factorizeFAddFSub()
1883 return IsFMul ? BinaryOperator::CreateFMulFMF(XY, Z, &I) in factorizeFAddFSub()
1884 : BinaryOperator::CreateFDivFMF(XY, Z, &I); in factorizeFAddFSub()
1887 Instruction *InstCombinerImpl::visitFAdd(BinaryOperator &I) { in visitFAdd()
1908 return BinaryOperator::CreateFSubFMF(Y, X, &I); in visitFAdd()
1916 return BinaryOperator::CreateFSubFMF(Z, XY, &I); in visitFAdd()
1925 return BinaryOperator::CreateFSubFMF(Z, XY, &I); in visitFAdd()
1971 return BinaryOperator::CreateFMulFMF(X, NewMulC, &I); in visitFAdd()
1977 return BinaryOperator::CreateFSubFMF(Z, Y, &I); in visitFAdd()
1988 BinaryOperator *Result = BinaryOperator::CreateFAddFMF(X, Y, &I); in visitFAdd()
2066 static Instruction *foldSubOfMinMax(BinaryOperator &I, in foldSubOfMinMax()
2092 return BinaryOperator::CreateAdd(X, USub); in foldSubOfMinMax()
2096 return BinaryOperator::CreateAdd(X, USub); in foldSubOfMinMax()
2112 Instruction *InstCombinerImpl::visitSub(BinaryOperator &I) { in visitSub()
2129 BinaryOperator *Res = BinaryOperator::CreateAdd(Op0, V); in visitSub()
2131 if (const auto *BO = dyn_cast<BinaryOperator>(Op1)) { in visitSub()
2158 BinaryOperator *Res = in visitSub()
2159 BinaryOperator::CreateSub(ConstantExpr::getSub(C, C2), X); in visitSub()
2201 return BinaryOperator::CreateAdd(NegOp1, Op0); in visitSub()
2211 return BinaryOperator::CreateXor(Op0, Op1); in visitSub()
2215 return BinaryOperator::CreateNot(Op1); in visitSub()
2220 return BinaryOperator::CreateAdd(Builder.CreateNot(Op1), X); in visitSub()
2230 return BinaryOperator::CreateSub(XZ, YW); in visitSub()
2240 BinaryOperator *Sub = BinaryOperator::CreateSub(X, Add); in visitSub()
2253 return BinaryOperator::CreateSub(X, Y); in visitSub()
2261 return BinaryOperator::CreateAdd(OpsSub, ConstsSub); in visitSub()
2277 return BinaryOperator::CreateSub(NotOp1, NotOp0); in visitSub()
2306 return BinaryOperator::CreateAdd(X, InstCombiner::AddOne(C)); in visitSub()
2322 return BinaryOperator::CreateAdd(X, ConstantExpr::getSub(C, C2)); in visitSub()
2334 return BinaryOperator::CreateXor(Op1, Op0); in visitSub()
2342 BinaryOperator *InnerSub; in visitSub()
2352 return BinaryOperator::CreateAdd( in visitSub()
2362 return BinaryOperator::CreateNeg(Y); in visitSub()
2366 return BinaryOperator::CreateNeg(Y); in visitSub()
2374 return BinaryOperator::CreateXor(A, B); in visitSub()
2382 return BinaryOperator::CreateAnd(A, B); in visitSub()
2390 return BinaryOperator::CreateOr(A, B); in visitSub()
2399 return BinaryOperator::CreateNeg(Builder.CreateXor(A, B)); in visitSub()
2407 return BinaryOperator::CreateAnd(A, B); in visitSub()
2416 return BinaryOperator::CreateNeg(Builder.CreateAnd(A, B)); in visitSub()
2423 return BinaryOperator::CreateAnd( in visitSub()
2432 return BinaryOperator::CreateNeg(Builder.CreateAnd( in visitSub()
2441 return BinaryOperator::CreateNeg( in visitSub()
2519 return BinaryOperator::CreateAnd( in visitSub()
2533 return BinaryOperator::CreateSub(Not, X); in visitSub()
2539 return BinaryOperator::CreateSub(X, Not); in visitSub()
2591 return BinaryOperator::CreateAnd(Op0, ConstantInt::get(Ty, ~(*AndC))); in visitSub()
2619 return BinaryOperator::CreateNeg(USub); in visitSub()
2625 return BinaryOperator::CreateNeg(USub); in visitSub()
2686 return BinaryOperator::CreateFMulFMF(X, NegC, &I); in foldFNegIntoConstant()
2690 return BinaryOperator::CreateFDivFMF(X, NegC, &I); in foldFNegIntoConstant()
2694 Instruction *FDiv = BinaryOperator::CreateFDivFMF(NegC, X, &I); in foldFNegIntoConstant()
2709 return BinaryOperator::CreateFSubFMF(NegC, X, &I); in foldFNegIntoConstant()
2760 return BinaryOperator::CreateFSubFMF(Y, X, &I); in visitFNeg()
2830 Instruction *InstCombinerImpl::visitFSub(BinaryOperator &I) { in visitFSub()
2873 return BinaryOperator::CreateFAddFMF(Op0, NewSub, &I); in visitFSub()
2894 return BinaryOperator::CreateFAddFMF(Op0, NegC, &I); in visitFSub()
2898 return BinaryOperator::CreateFAddFMF(Op0, Y, &I); in visitFSub()
2904 return BinaryOperator::CreateFAddFMF(Op0, Builder.CreateFPTrunc(Y, Ty), &I); in visitFSub()
2908 return BinaryOperator::CreateFAddFMF(Op0, Builder.CreateFPExt(Y, Ty), &I); in visitFSub()
2915 return BinaryOperator::CreateFAddFMF(Op0, FMul, &I); in visitFSub()
2922 return BinaryOperator::CreateFAddFMF(Op0, FDiv, &I); in visitFSub()
2943 return BinaryOperator::CreateFMulFMF(Op1, CSubOne, &I); in visitFSub()
2949 return BinaryOperator::CreateFMulFMF(Op0, OneSubC, &I); in visitFSub()
2960 return BinaryOperator::CreateFSubFMF(XZ, YW, &I); in visitFSub()
2975 return BinaryOperator::CreateFSubFMF(Rdx, A1, &I); in visitFSub()
2991 return BinaryOperator::CreateFSubFMF(X, FAdd, &I); in visitFSub()