Lines Matching refs:BinaryOperator

767 static Value *checkForNegativeOperand(BinaryOperator &I,  in checkForNegativeOperand()
824 static Instruction *foldNoWrapAdd(BinaryOperator &Add, in foldNoWrapAdd()
851 return BinaryOperator::CreateAdd(WideX, NewC); in foldNoWrapAdd()
858 return BinaryOperator::CreateAdd(WideX, NewC); in foldNoWrapAdd()
864 Instruction *InstCombinerImpl::foldAddWithConstant(BinaryOperator &Add) { in foldAddWithConstant()
878 return BinaryOperator::CreateSub(ConstantExpr::getAdd(Op00C, Op1C), X); in foldAddWithConstant()
885 return BinaryOperator::CreateAdd(Builder.CreateNot(Y), X); in foldAddWithConstant()
898 return BinaryOperator::CreateSub(InstCombiner::SubOne(Op1C), X); in foldAddWithConstant()
908 return BinaryOperator::CreateAdd(X, ConstantExpr::getAdd(Op01C, Op1C)); in foldAddWithConstant()
913 return BinaryOperator::CreateXor(Op0, ConstantInt::get(Add.getType(), *C2)); in foldAddWithConstant()
919 return BinaryOperator::CreateOr(Op0, Op1); in foldAddWithConstant()
923 return BinaryOperator::CreateXor(Op0, Op1); in foldAddWithConstant()
936 return BinaryOperator::CreateAdd(X, ConstantInt::get(Ty, *C2 ^ *C)); in foldAddWithConstant()
943 return BinaryOperator::CreateSub(ConstantInt::get(Ty, *C2 + *C), X); in foldAddWithConstant()
961 return BinaryOperator::CreateAShr(NewShl, ShAmtC); in foldAddWithConstant()
982 return BinaryOperator::CreateAnd(NotX, ConstantInt::get(Ty, 1)); in foldAddWithConstant()
992 return BinaryOperator::CreateAnd(NewAdd, ConstantInt::get(Ty, *C2)); in foldAddWithConstant()
1073 Value *InstCombinerImpl::SimplifyAddWithRemainder(BinaryOperator &I) { in SimplifyAddWithRemainder()
1109 static Instruction *canonicalizeLowbitMask(BinaryOperator &I, in canonicalizeLowbitMask()
1118 if (auto *BOp = dyn_cast<BinaryOperator>(NotMask)) { in canonicalizeLowbitMask()
1124 return BinaryOperator::CreateNot(NotMask, I.getName()); in canonicalizeLowbitMask()
1127 static Instruction *foldToUnsignedSaturatedAdd(BinaryOperator &I) { in foldToUnsignedSaturatedAdd()
1151 BinaryOperator &I) { in canonicalizeCondSignextOfHighBitExtractToSignextHighBitExtract()
1240 auto *NewAShr = BinaryOperator::CreateAShr(X, LowBitsToSkip, in canonicalizeCondSignextOfHighBitExtractToSignextHighBitExtract()
1253 static Instruction *factorizeMathWithShlOps(BinaryOperator &I, in factorizeMathWithShlOps()
1259 auto *Op0 = dyn_cast<BinaryOperator>(I.getOperand(0)); in factorizeMathWithShlOps()
1260 auto *Op1 = dyn_cast<BinaryOperator>(I.getOperand(1)); in factorizeMathWithShlOps()
1277 if (auto *NewI = dyn_cast<BinaryOperator>(NewMath)) { in factorizeMathWithShlOps()
1281 auto *NewShl = BinaryOperator::CreateShl(NewMath, ShAmt); in factorizeMathWithShlOps()
1287 Instruction *InstCombinerImpl::visitAdd(BinaryOperator &I) { in visitAdd()
1315 return BinaryOperator::CreateXor(LHS, RHS); in visitAdd()
1319 auto *Shl = BinaryOperator::CreateShl(LHS, ConstantInt::get(Ty, 1)); in visitAdd()
1329 return BinaryOperator::CreateNeg(Builder.CreateAdd(A, B)); in visitAdd()
1332 return BinaryOperator::CreateSub(RHS, A); in visitAdd()
1337 return BinaryOperator::CreateSub(LHS, B); in visitAdd()
1348 return BinaryOperator::CreateSub(A, B); in visitAdd()
1352 return BinaryOperator::CreateAdd(A, Builder.CreateShl(RHS, 1, "reass.add")); in visitAdd()
1356 return BinaryOperator::CreateAdd(A, Builder.CreateShl(LHS, 1, "reass.add")); in visitAdd()
1368 return BinaryOperator::CreateSRem(RHS, NewRHS); in visitAdd()
1374 return BinaryOperator::CreateOr(LHS, RHS); in visitAdd()
1408 return BinaryOperator::CreateOr(A, B); in visitAdd()
1463 static Instruction *factorizeLerp(BinaryOperator &I, in factorizeLerp()
1475 return BinaryOperator::CreateFAddFMF(Y, MulZ, &I); in factorizeLerp()
1479 static Instruction *factorizeFAddFSub(BinaryOperator &I, in factorizeFAddFSub()
1517 return IsFMul ? BinaryOperator::CreateFMulFMF(XY, Z, &I) in factorizeFAddFSub()
1518 : BinaryOperator::CreateFDivFMF(XY, Z, &I); in factorizeFAddFSub()
1521 Instruction *InstCombinerImpl::visitFAdd(BinaryOperator &I) { in visitFAdd()
1539 return BinaryOperator::CreateFSubFMF(Y, X, &I); in visitFAdd()
1547 return BinaryOperator::CreateFSubFMF(Z, XY, &I); in visitFAdd()
1556 return BinaryOperator::CreateFSubFMF(Z, XY, &I); in visitFAdd()
1731 Instruction *InstCombinerImpl::visitSub(BinaryOperator &I) { in visitSub()
1745 BinaryOperator *Res = BinaryOperator::CreateAdd(Op0, V); in visitSub()
1747 if (const auto *BO = dyn_cast<BinaryOperator>(Op1)) { in visitSub()
1771 return BinaryOperator::CreateSub(ConstantExpr::getSub(C, C2), X); in visitSub()
1804 return BinaryOperator::CreateAdd(NegOp1, Op0); in visitSub()
1814 return BinaryOperator::CreateXor(Op0, Op1); in visitSub()
1818 return BinaryOperator::CreateNot(Op1); in visitSub()
1823 return BinaryOperator::CreateSub(Y, X); in visitSub()
1827 return BinaryOperator::CreateAdd(Builder.CreateNot(Op1), X); in visitSub()
1837 return BinaryOperator::CreateSub(XZ, YW); in visitSub()
1843 return BinaryOperator::CreateSub(X, Add); in visitSub()
1871 return BinaryOperator::CreateAdd(X, InstCombiner::AddOne(C)); in visitSub()
1887 return BinaryOperator::CreateAdd(X, ConstantExpr::getSub(C, C2)); in visitSub()
1896 return BinaryOperator::CreateXor(Op1, Op0); in visitSub()
1903 return BinaryOperator::CreateNeg(Y); in visitSub()
1907 return BinaryOperator::CreateNeg(Y); in visitSub()
1915 return BinaryOperator::CreateXor(A, B); in visitSub()
1923 return BinaryOperator::CreateAnd(A, B); in visitSub()
1931 return BinaryOperator::CreateOr(A, B); in visitSub()
1940 return BinaryOperator::CreateNeg(Builder.CreateXor(A, B)); in visitSub()
1948 return BinaryOperator::CreateAnd(A, B); in visitSub()
1957 return BinaryOperator::CreateNeg(Builder.CreateAnd(A, B)); in visitSub()
1964 return BinaryOperator::CreateAnd( in visitSub()
1973 return BinaryOperator::CreateNeg(Builder.CreateAnd( in visitSub()
1982 return BinaryOperator::CreateNeg( in visitSub()
2039 return BinaryOperator::CreateAnd( in visitSub()
2068 return BinaryOperator::CreateSub(Not, A); in visitSub()
2070 return BinaryOperator::CreateSub(A, Not); in visitSub()
2123 return BinaryOperator::CreateAnd(Op0, ConstantInt::get(Ty, ~(*AndC))); in visitSub()
2162 return BinaryOperator::CreateFMulFMF(X, ConstantExpr::getFNeg(C), &I); in foldFNegIntoConstant()
2165 return BinaryOperator::CreateFDivFMF(X, ConstantExpr::getFNeg(C), &I); in foldFNegIntoConstant()
2169 BinaryOperator::CreateFDivFMF(ConstantExpr::getFNeg(C), X, &I); in foldFNegIntoConstant()
2183 return BinaryOperator::CreateFSubFMF(ConstantExpr::getFNeg(C), X, &I); in foldFNegIntoConstant()
2196 return BinaryOperator::CreateFMulFMF(Builder.CreateFNegFMF(X, &I), Y, &I); in hoistFNegAboveFMulFDiv()
2199 return BinaryOperator::CreateFDivFMF(Builder.CreateFNegFMF(X, &I), Y, &I); in hoistFNegAboveFMulFDiv()
2219 return BinaryOperator::CreateFSubFMF(Y, X, &I); in visitFNeg()
2256 Instruction *InstCombinerImpl::visitFSub(BinaryOperator &I) { in visitFSub()
2295 return BinaryOperator::CreateFAddFMF(Op0, NewSub, &I); in visitFSub()
2315 return BinaryOperator::CreateFAddFMF(Op0, ConstantExpr::getFNeg(C), &I); in visitFSub()
2319 return BinaryOperator::CreateFAddFMF(Op0, Y, &I); in visitFSub()
2325 return BinaryOperator::CreateFAddFMF(Op0, Builder.CreateFPTrunc(Y, Ty), &I); in visitFSub()
2329 return BinaryOperator::CreateFAddFMF(Op0, Builder.CreateFPExt(Y, Ty), &I); in visitFSub()
2336 return BinaryOperator::CreateFAddFMF(Op0, FMul, &I); in visitFSub()
2343 return BinaryOperator::CreateFAddFMF(Op0, FDiv, &I); in visitFSub()
2363 return BinaryOperator::CreateFMulFMF(Op1, CSubOne, &I); in visitFSub()
2368 return BinaryOperator::CreateFMulFMF(Op0, OneSubC, &I); in visitFSub()
2379 return BinaryOperator::CreateFSubFMF(XZ, YW, &I); in visitFSub()
2394 return BinaryOperator::CreateFSubFMF(Rdx, A1, &I); in visitFSub()
2410 return BinaryOperator::CreateFSubFMF(X, FAdd, &I); in visitFSub()