Lines Matching refs:BinaryOperator

767 static Value *checkForNegativeOperand(BinaryOperator &I,
824 static Instruction *foldNoWrapAdd(BinaryOperator &Add,
851 return BinaryOperator::CreateAdd(WideX, NewC);
858 return BinaryOperator::CreateAdd(WideX, NewC);
864 Instruction *InstCombinerImpl::foldAddWithConstant(BinaryOperator &Add) {
878 return BinaryOperator::CreateSub(ConstantExpr::getAdd(Op00C, Op1C), X);
885 return BinaryOperator::CreateAdd(Builder.CreateNot(Y), X);
898 return BinaryOperator::CreateSub(InstCombiner::SubOne(Op1C), X);
908 return BinaryOperator::CreateAdd(X, ConstantExpr::getAdd(Op01C, Op1C));
913 return BinaryOperator::CreateXor(Op0, ConstantInt::get(Add.getType(), *C2));
919 return BinaryOperator::CreateOr(Op0, Op1);
923 return BinaryOperator::CreateXor(Op0, Op1);
936 return BinaryOperator::CreateAdd(X, ConstantInt::get(Ty, *C2 ^ *C));
943 return BinaryOperator::CreateSub(ConstantInt::get(Ty, *C2 + *C), X);
961 return BinaryOperator::CreateAShr(NewShl, ShAmtC);
982 return BinaryOperator::CreateAnd(NotX, ConstantInt::get(Ty, 1));
992 return BinaryOperator::CreateAnd(NewAdd, ConstantInt::get(Ty, *C2));
1073 Value *InstCombinerImpl::SimplifyAddWithRemainder(BinaryOperator &I) {
1109 static Instruction *canonicalizeLowbitMask(BinaryOperator &I,
1118 if (auto *BOp = dyn_cast<BinaryOperator>(NotMask)) {
1124 return BinaryOperator::CreateNot(NotMask, I.getName());
1127 static Instruction *foldToUnsignedSaturatedAdd(BinaryOperator &I) {
1151 BinaryOperator &I) {
1240 auto *NewAShr = BinaryOperator::CreateAShr(X, LowBitsToSkip,
1253 static Instruction *factorizeMathWithShlOps(BinaryOperator &I,
1259 auto *Op0 = dyn_cast<BinaryOperator>(I.getOperand(0));
1260 auto *Op1 = dyn_cast<BinaryOperator>(I.getOperand(1));
1277 if (auto *NewI = dyn_cast<BinaryOperator>(NewMath)) {
1281 auto *NewShl = BinaryOperator::CreateShl(NewMath, ShAmt);
1287 Instruction *InstCombinerImpl::visitAdd(BinaryOperator &I) {
1315 return BinaryOperator::CreateXor(LHS, RHS);
1319 auto *Shl = BinaryOperator::CreateShl(LHS, ConstantInt::get(Ty, 1));
1329 return BinaryOperator::CreateNeg(Builder.CreateAdd(A, B));
1332 return BinaryOperator::CreateSub(RHS, A);
1337 return BinaryOperator::CreateSub(LHS, B);
1348 return BinaryOperator::CreateSub(A, B);
1352 return BinaryOperator::CreateAdd(A, Builder.CreateShl(RHS, 1, "reass.add"));
1356 return BinaryOperator::CreateAdd(A, Builder.CreateShl(LHS, 1, "reass.add"));
1368 return BinaryOperator::CreateSRem(RHS, NewRHS);
1374 return BinaryOperator::CreateOr(LHS, RHS);
1408 return BinaryOperator::CreateOr(A, B);
1463 static Instruction *factorizeLerp(BinaryOperator &I,
1475 return BinaryOperator::CreateFAddFMF(Y, MulZ, &I);
1479 static Instruction *factorizeFAddFSub(BinaryOperator &I,
1517 return IsFMul ? BinaryOperator::CreateFMulFMF(XY, Z, &I)
1518 : BinaryOperator::CreateFDivFMF(XY, Z, &I);
1521 Instruction *InstCombinerImpl::visitFAdd(BinaryOperator &I) {
1539 return BinaryOperator::CreateFSubFMF(Y, X, &I);
1547 return BinaryOperator::CreateFSubFMF(Z, XY, &I);
1556 return BinaryOperator::CreateFSubFMF(Z, XY, &I);
1710 Instruction *InstCombinerImpl::visitSub(BinaryOperator &I) {
1724 BinaryOperator *Res = BinaryOperator::CreateAdd(Op0, V);
1726 if (const auto *BO = dyn_cast<BinaryOperator>(Op1)) {
1750 return BinaryOperator::CreateSub(ConstantExpr::getSub(C, C2), X);
1783 return BinaryOperator::CreateAdd(NegOp1, Op0);
1793 return BinaryOperator::CreateXor(Op0, Op1);
1797 return BinaryOperator::CreateNot(Op1);
1802 return BinaryOperator::CreateSub(Y, X);
1806 return BinaryOperator::CreateAdd(Builder.CreateNot(Op1), X);
1816 return BinaryOperator::CreateSub(XZ, YW);
1822 return BinaryOperator::CreateSub(X, Add);
1850 return BinaryOperator::CreateAdd(X, InstCombiner::AddOne(C));
1866 return BinaryOperator::CreateAdd(X, ConstantExpr::getSub(C, C2));
1875 return BinaryOperator::CreateXor(Op1, Op0);
1882 return BinaryOperator::CreateNeg(Y);
1886 return BinaryOperator::CreateNeg(Y);
1894 return BinaryOperator::CreateXor(A, B);
1902 return BinaryOperator::CreateAnd(A, B);
1910 return BinaryOperator::CreateOr(A, B);
1919 return BinaryOperator::CreateNeg(Builder.CreateXor(A, B));
1927 return BinaryOperator::CreateAnd(A, B);
1936 return BinaryOperator::CreateNeg(Builder.CreateAnd(A, B));
1943 return BinaryOperator::CreateAnd(
1952 return BinaryOperator::CreateNeg(Builder.CreateAnd(
1961 return BinaryOperator::CreateNeg(
2018 return BinaryOperator::CreateAnd(
2047 return BinaryOperator::CreateSub(Not, A);
2049 return BinaryOperator::CreateSub(A, Not);
2102 return BinaryOperator::CreateAnd(Op0, ConstantInt::get(Ty, ~(*AndC)));
2137 return BinaryOperator::CreateFMulFMF(X, ConstantExpr::getFNeg(C), &I);
2140 return BinaryOperator::CreateFDivFMF(X, ConstantExpr::getFNeg(C), &I);
2143 return BinaryOperator::CreateFDivFMF(ConstantExpr::getFNeg(C), X, &I);
2149 return BinaryOperator::CreateFSubFMF(ConstantExpr::getFNeg(C), X, &I);
2162 return BinaryOperator::CreateFMulFMF(Builder.CreateFNegFMF(X, &I), Y, &I);
2165 return BinaryOperator::CreateFDivFMF(Builder.CreateFNegFMF(X, &I), Y, &I);
2185 return BinaryOperator::CreateFSubFMF(Y, X, &I);
2212 Instruction *InstCombinerImpl::visitFSub(BinaryOperator &I) {
2251 return BinaryOperator::CreateFAddFMF(Op0, NewSub, &I);
2271 return BinaryOperator::CreateFAddFMF(Op0, ConstantExpr::getFNeg(C), &I);
2275 return BinaryOperator::CreateFAddFMF(Op0, Y, &I);
2281 return BinaryOperator::CreateFAddFMF(Op0, Builder.CreateFPTrunc(Y, Ty), &I);
2285 return BinaryOperator::CreateFAddFMF(Op0, Builder.CreateFPExt(Y, Ty), &I);
2292 return BinaryOperator::CreateFAddFMF(Op0, FMul, &I);
2299 return BinaryOperator::CreateFAddFMF(Op0, FDiv, &I);
2319 return BinaryOperator::CreateFMulFMF(Op1, CSubOne, &I);
2324 return BinaryOperator::CreateFMulFMF(Op0, OneSubC, &I);
2335 return BinaryOperator::CreateFSubFMF(XZ, YW, &I);
2350 return BinaryOperator::CreateFSubFMF(Rdx, A1, &I);
2366 return BinaryOperator::CreateFSubFMF(X, FAdd, &I);