Lines Matching refs:BinaryOperator

752 static Value *checkForNegativeOperand(BinaryOperator &I,  in checkForNegativeOperand()
809 static Instruction *foldNoWrapAdd(BinaryOperator &Add, in foldNoWrapAdd()
836 return BinaryOperator::CreateAdd(WideX, NewC); in foldNoWrapAdd()
843 return BinaryOperator::CreateAdd(WideX, NewC); in foldNoWrapAdd()
849 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()
887 BinaryOperator *Res = in foldAddWithConstant()
888 BinaryOperator::CreateSub(ConstantExpr::getSub(Op1C, COne), X); in foldAddWithConstant()
907 return BinaryOperator::CreateAdd(X, ConstantExpr::getAdd(Op01C, Op1C)); in foldAddWithConstant()
912 return BinaryOperator::CreateXor(Op0, ConstantInt::get(Add.getType(), *C2)); in foldAddWithConstant()
918 return BinaryOperator::CreateOr(Op0, Op1); in foldAddWithConstant()
922 return BinaryOperator::CreateXor(Op0, Op1); in foldAddWithConstant()
934 return BinaryOperator::CreateAdd(X, ConstantInt::get(Ty, *C2 ^ *C)); in foldAddWithConstant()
941 return BinaryOperator::CreateSub(ConstantInt::get(Ty, *C2 + *C), X); in foldAddWithConstant()
959 return BinaryOperator::CreateAShr(NewShl, ShAmtC); in foldAddWithConstant()
980 return BinaryOperator::CreateAnd(NotX, ConstantInt::get(Ty, 1)); in foldAddWithConstant()
1006 static bool matchesSquareSum(BinaryOperator &I, Mul2Rhs M2Rhs, Value *&A, in matchesSquareSum()
1039 Instruction *InstCombinerImpl::foldSquareSumInt(BinaryOperator &I) { in foldSquareSumInt()
1043 return BinaryOperator::CreateMul(AB, AB); in foldSquareSumInt()
1050 Instruction *InstCombinerImpl::foldSquareSumFP(BinaryOperator &I) { in foldSquareSumFP()
1055 return BinaryOperator::CreateFMulFMF(AB, AB, &I); in foldSquareSumFP()
1135 Value *InstCombinerImpl::SimplifyAddWithRemainder(BinaryOperator &I) { in SimplifyAddWithRemainder()
1171 static Instruction *canonicalizeLowbitMask(BinaryOperator &I, in canonicalizeLowbitMask()
1180 if (auto *BOp = dyn_cast<BinaryOperator>(NotMask)) { in canonicalizeLowbitMask()
1186 return BinaryOperator::CreateNot(NotMask, I.getName()); in canonicalizeLowbitMask()
1189 static Instruction *foldToUnsignedSaturatedAdd(BinaryOperator &I) { in foldToUnsignedSaturatedAdd()
1215 const BinaryOperator &I) { in combineAddSubWithShlAddSub()
1221 return BinaryOperator::CreateSub(A, NewShl); in combineAddSubWithShlAddSub()
1227 static Instruction *foldAddToAshr(BinaryOperator &Add) { in foldAddToAshr()
1261 return BinaryOperator::CreateAShr( in foldAddToAshr()
1267 BinaryOperator &I) { in canonicalizeCondSignextOfHighBitExtractToSignextHighBitExtract()
1356 auto *NewAShr = BinaryOperator::CreateAShr(X, LowBitsToSkip, in canonicalizeCondSignextOfHighBitExtractToSignextHighBitExtract()
1369 static Instruction *factorizeMathWithShlOps(BinaryOperator &I, in factorizeMathWithShlOps()
1375 auto *Op0 = dyn_cast<BinaryOperator>(I.getOperand(0)); in factorizeMathWithShlOps()
1376 auto *Op1 = dyn_cast<BinaryOperator>(I.getOperand(1)); in factorizeMathWithShlOps()
1393 if (auto *NewI = dyn_cast<BinaryOperator>(NewMath)) { in factorizeMathWithShlOps()
1397 auto *NewShl = BinaryOperator::CreateShl(NewMath, ShAmt); in factorizeMathWithShlOps()
1405 static Instruction *foldBoxMultiply(BinaryOperator &I) { in foldBoxMultiply()
1439 return BinaryOperator::CreateMul(X, Y); in foldBoxMultiply()
1444 Instruction *InstCombinerImpl::visitAdd(BinaryOperator &I) { in visitAdd()
1484 return BinaryOperator::CreateXor(LHS, RHS); in visitAdd()
1488 auto *Shl = BinaryOperator::CreateShl(LHS, ConstantInt::get(Ty, 1)); in visitAdd()
1498 return BinaryOperator::CreateNeg(Builder.CreateAdd(A, B)); in visitAdd()
1501 auto *Sub = BinaryOperator::CreateSub(RHS, A); in visitAdd()
1510 return BinaryOperator::CreateSub(LHS, B); in visitAdd()
1521 return BinaryOperator::CreateSub(A, B); in visitAdd()
1525 return BinaryOperator::CreateAdd(A, Builder.CreateShl(RHS, 1, "reass.add")); in visitAdd()
1529 return BinaryOperator::CreateAdd(A, Builder.CreateShl(LHS, 1, "reass.add")); in visitAdd()
1538 return BinaryOperator::CreateAdd(Sub, ConstantExpr::getAdd(C1, C2)); in visitAdd()
1546 return BinaryOperator::CreateAdd(Sub, C1); in visitAdd()
1560 return BinaryOperator::CreateSRem(RHS, NewRHS); in visitAdd()
1568 return BinaryOperator::CreateAnd(A, NewMask); in visitAdd()
1586 return BinaryOperator::CreateDisjointOr(LHS, RHS); in visitAdd()
1595 return BinaryOperator::CreateOr(A, B); in visitAdd()
1616 return BinaryOperator::CreateAnd(Add, A); in visitAdd()
1627 return BinaryOperator::CreateAnd(Dec, Not); in visitAdd()
1641 return BinaryOperator::CreateAdd(NewMul, ConstantInt::getAllOnesValue(Ty)); in visitAdd()
1650 return BinaryOperator::CreateSub(B, Shl); in visitAdd()
1663 return BinaryOperator::CreateOr(LHS, Zext); in visitAdd()
1681 return BinaryOperator::CreateSub( in visitAdd()
1766 static Instruction *factorizeLerp(BinaryOperator &I, in factorizeLerp()
1778 return BinaryOperator::CreateFAddFMF(Y, MulZ, &I); in factorizeLerp()
1782 static Instruction *factorizeFAddFSub(BinaryOperator &I, in factorizeFAddFSub()
1823 return IsFMul ? BinaryOperator::CreateFMulFMF(XY, Z, &I) in factorizeFAddFSub()
1824 : BinaryOperator::CreateFDivFMF(XY, Z, &I); in factorizeFAddFSub()
1827 Instruction *InstCombinerImpl::visitFAdd(BinaryOperator &I) { in visitFAdd()
1848 return BinaryOperator::CreateFSubFMF(Y, X, &I); in visitFAdd()
1856 return BinaryOperator::CreateFSubFMF(Z, XY, &I); in visitFAdd()
1865 return BinaryOperator::CreateFSubFMF(Z, XY, &I); in visitFAdd()
1965 return BinaryOperator::CreateFMulFMF(X, NewMulC, &I); in visitFAdd()
1971 return BinaryOperator::CreateFSubFMF(Z, Y, &I); in visitFAdd()
1982 BinaryOperator *Result = BinaryOperator::CreateFAddFMF(X, Y, &I); in visitFAdd()
2073 static Instruction *foldSubOfMinMax(BinaryOperator &I, in foldSubOfMinMax()
2099 return BinaryOperator::CreateAdd(X, USub); in foldSubOfMinMax()
2103 return BinaryOperator::CreateAdd(X, USub); in foldSubOfMinMax()
2119 Instruction *InstCombinerImpl::visitSub(BinaryOperator &I) { in visitSub()
2136 BinaryOperator *Res = BinaryOperator::CreateAdd(Op0, V); in visitSub()
2138 if (const auto *BO = dyn_cast<BinaryOperator>(Op1)) { in visitSub()
2165 BinaryOperator *Res = in visitSub()
2166 BinaryOperator::CreateSub(ConstantExpr::getSub(C, C2), X); in visitSub()
2208 return BinaryOperator::CreateAdd(NegOp1, Op0); in visitSub()
2218 return BinaryOperator::CreateXor(Op0, Op1); in visitSub()
2222 return BinaryOperator::CreateNot(Op1); in visitSub()
2227 return BinaryOperator::CreateAdd(Builder.CreateNot(Op1), X); in visitSub()
2237 return BinaryOperator::CreateSub(XZ, YW); in visitSub()
2247 BinaryOperator *Sub = BinaryOperator::CreateSub(X, Add); in visitSub()
2260 return BinaryOperator::CreateSub(X, Y); in visitSub()
2268 return BinaryOperator::CreateAdd(OpsSub, ConstsSub); in visitSub()
2284 return BinaryOperator::CreateSub(NotOp1, NotOp0); in visitSub()
2313 return BinaryOperator::CreateAdd(X, InstCombiner::AddOne(C)); in visitSub()
2329 return BinaryOperator::CreateAdd(X, ConstantExpr::getSub(C, C2)); in visitSub()
2339 return BinaryOperator::CreateXor(Op1, Op0); in visitSub()
2347 BinaryOperator *InnerSub; in visitSub()
2357 return BinaryOperator::CreateAdd( in visitSub()
2367 return BinaryOperator::CreateNeg(Y); in visitSub()
2371 return BinaryOperator::CreateNeg(Y); in visitSub()
2379 return BinaryOperator::CreateXor(A, B); in visitSub()
2387 return BinaryOperator::CreateAnd(A, B); in visitSub()
2395 return BinaryOperator::CreateOr(A, B); in visitSub()
2404 return BinaryOperator::CreateNeg(Builder.CreateXor(A, B)); in visitSub()
2412 return BinaryOperator::CreateAnd(A, B); in visitSub()
2421 return BinaryOperator::CreateNeg(Builder.CreateAnd(A, B)); in visitSub()
2428 return BinaryOperator::CreateAnd( in visitSub()
2437 return BinaryOperator::CreateNeg(Builder.CreateAnd( in visitSub()
2446 return BinaryOperator::CreateNeg( in visitSub()
2509 return BinaryOperator::CreateAnd( in visitSub()
2523 return BinaryOperator::CreateSub(Not, X); in visitSub()
2529 return BinaryOperator::CreateSub(X, Not); in visitSub()
2580 return BinaryOperator::CreateAnd(Op0, ConstantInt::get(Ty, ~(*AndC))); in visitSub()
2608 return BinaryOperator::CreateNeg(USub); in visitSub()
2614 return BinaryOperator::CreateNeg(USub); in visitSub()
2675 return BinaryOperator::CreateFMulFMF(X, NegC, &I); in foldFNegIntoConstant()
2679 return BinaryOperator::CreateFDivFMF(X, NegC, &I); in foldFNegIntoConstant()
2683 Instruction *FDiv = BinaryOperator::CreateFDivFMF(NegC, X, &I); in foldFNegIntoConstant()
2698 return BinaryOperator::CreateFSubFMF(NegC, X, &I); in foldFNegIntoConstant()
2749 return BinaryOperator::CreateFSubFMF(Y, X, &I); in visitFNeg()
2809 Instruction *InstCombinerImpl::visitFSub(BinaryOperator &I) { in visitFSub()
2848 return BinaryOperator::CreateFAddFMF(Op0, NewSub, &I); in visitFSub()
2869 return BinaryOperator::CreateFAddFMF(Op0, NegC, &I); in visitFSub()
2873 return BinaryOperator::CreateFAddFMF(Op0, Y, &I); in visitFSub()
2879 return BinaryOperator::CreateFAddFMF(Op0, Builder.CreateFPTrunc(Y, Ty), &I); in visitFSub()
2883 return BinaryOperator::CreateFAddFMF(Op0, Builder.CreateFPExt(Y, Ty), &I); in visitFSub()
2890 return BinaryOperator::CreateFAddFMF(Op0, FMul, &I); in visitFSub()
2897 return BinaryOperator::CreateFAddFMF(Op0, FDiv, &I); in visitFSub()
2918 return BinaryOperator::CreateFMulFMF(Op1, CSubOne, &I); in visitFSub()
2924 return BinaryOperator::CreateFMulFMF(Op0, OneSubC, &I); in visitFSub()
2935 return BinaryOperator::CreateFSubFMF(XZ, YW, &I); in visitFSub()
2950 return BinaryOperator::CreateFSubFMF(Rdx, A1, &I); in visitFSub()
2966 return BinaryOperator::CreateFSubFMF(X, FAdd, &I); in visitFSub()