Lines Matching refs:BinaryOperator

66   BinaryOperator *I = dyn_cast<BinaryOperator>(V);  in simplifyValueKnownNonZero()
99 static Value *foldMulSelectToNegate(BinaryOperator &I, in foldMulSelectToNegate()
145 static Value *foldMulShl1(BinaryOperator &Mul, bool CommuteOperands, in foldMulShl1()
165 BinaryOperator *Shift; in foldMulShl1()
191 Instruction *InstCombinerImpl::visitMul(BinaryOperator &I) { in visitMul()
217 return HasNSW ? BinaryOperator::CreateNSWNeg(Op0) in visitMul()
218 : BinaryOperator::CreateNeg(Op0); in visitMul()
231 BinaryOperator *Mul = cast<BinaryOperator>(I.getOperand(0)); in visitMul()
232 BinaryOperator *BO = BinaryOperator::CreateMul(NewOp, Shl); in visitMul()
243 BinaryOperator *Shl = BinaryOperator::CreateShl(NewOp, NewCst); in visitMul()
285 return BinaryOperator::CreateShl(Z, ConstantInt::get(Ty, ShiftAmt)); in visitMul()
306 auto *BOp0 = cast<BinaryOperator>(Op0); in visitMul()
310 auto *BO = BinaryOperator::CreateAdd(NewMul, NewC); in visitMul()
313 if (auto *NewMulBO = dyn_cast<BinaryOperator>(NewMul)) in visitMul()
327 return BinaryOperator::CreateMul(X, X); in visitMul()
330 return BinaryOperator::CreateMul(X, X); in visitMul()
350 return BinaryOperator::CreateMul(X, ConstantExpr::getNeg(Op1C)); in visitMul()
354 auto *NewMul = BinaryOperator::CreateMul(X, Y); in visitMul()
364 return BinaryOperator::CreateNeg(Builder.CreateMul(X, Y)); in visitMul()
370 return BinaryOperator::CreateMul(NegOp0, X); in visitMul()
377 BinaryOperator *Div = dyn_cast<BinaryOperator>(Op0); in visitMul()
381 Div = dyn_cast<BinaryOperator>(Op1); in visitMul()
394 return BinaryOperator::CreateNeg(X); in visitMul()
403 return BinaryOperator::CreateSub(XFreeze, Rem); in visitMul()
404 return BinaryOperator::CreateSub(Rem, XFreeze); in visitMul()
416 return BinaryOperator::CreateAnd(Op0, Op1); in visitMul()
512 BinaryOperator *Shl = BinaryOperator::CreateShl(Op1, Res); in visitMul()
521 BinaryOperator *Shl = BinaryOperator::CreateShl(Op0, Res); in visitMul()
541 Instruction *InstCombinerImpl::foldFPSignBitOps(BinaryOperator &I) { in foldFPSignBitOps()
542 BinaryOperator::BinaryOps Opcode = I.getOpcode(); in foldFPSignBitOps()
552 return BinaryOperator::CreateWithCopiedFlags(Opcode, X, Y, &I); in foldFPSignBitOps()
557 return BinaryOperator::CreateWithCopiedFlags(Opcode, X, X, &I); in foldFPSignBitOps()
574 Instruction *InstCombinerImpl::foldFMulReassoc(BinaryOperator &I) { in foldFMulReassoc()
589 return BinaryOperator::CreateFDivFMF(CC1, X, &I); in foldFMulReassoc()
596 return BinaryOperator::CreateFMulFMF(X, CDivC1, &I); in foldFMulReassoc()
603 return BinaryOperator::CreateFDivFMF(X, C1DivC, &I); in foldFMulReassoc()
614 return BinaryOperator::CreateFAddFMF(XC, CC1, &I); in foldFMulReassoc()
622 return BinaryOperator::CreateFSubFMF(CC1, XC, &I); in foldFMulReassoc()
632 return BinaryOperator::CreateFDivFMF(NewFMul, Y, &I); in foldFMulReassoc()
654 return BinaryOperator::CreateFDivFMF(X, Y, &I); in foldFMulReassoc()
658 return BinaryOperator::CreateFDivFMF(X, Y, &I); in foldFMulReassoc()
667 return BinaryOperator::CreateFDivFMF(XX, Y, &I); in foldFMulReassoc()
672 return BinaryOperator::CreateFDivFMF(Y, XX, &I); in foldFMulReassoc()
738 return BinaryOperator::CreateFMulFMF(XX, Y, &I); in foldFMulReassoc()
742 return BinaryOperator::CreateFMulFMF(XX, Y, &I); in foldFMulReassoc()
748 Instruction *InstCombinerImpl::visitFMul(BinaryOperator &I) { in visitFMul()
789 return BinaryOperator::CreateFMulFMF(X, NegC, &I); in visitFMul()
815 return BinaryOperator::CreateFSubFMF(LogXTimesY, Y, &I); in visitFMul()
833 BinaryOperator *Result = BinaryOperator::CreateFMulFMF(X, Y, &I); in visitFMul()
848 bool InstCombinerImpl::simplifyDivRemOfSelectWithZeroOp(BinaryOperator &I) { in simplifyDivRemOfSelectWithZeroOp()
944 static Value *foldIDivShl(BinaryOperator &I, InstCombiner::BuilderTy &Builder) { in foldIDivShl()
1028 Instruction *InstCombinerImpl::commonIDivTransforms(BinaryOperator &I) { in commonIDivTransforms()
1065 return BinaryOperator::Create(I.getOpcode(), X, in commonIDivTransforms()
1075 auto *NewDiv = BinaryOperator::Create(I.getOpcode(), X, in commonIDivTransforms()
1083 auto *Mul = BinaryOperator::Create(Instruction::Mul, X, in commonIDivTransforms()
1101 auto *BO = BinaryOperator::Create(I.getOpcode(), X, in commonIDivTransforms()
1109 auto *Mul = BinaryOperator::Create(Instruction::Mul, X, in commonIDivTransforms()
1126 return BinaryOperator::CreateNSWAdd(X, ConstantInt::get(Ty, Quotient)); in commonIDivTransforms()
1131 return BinaryOperator::CreateNUWAdd(X, in commonIDivTransforms()
1166 return BinaryOperator::Create(I.getOpcode(), X, Op1); in commonIDivTransforms()
1171 return BinaryOperator::CreateNSWShl(ConstantInt::get(Ty, 1), Y); in commonIDivTransforms()
1173 return BinaryOperator::CreateNUWShl(ConstantInt::get(Ty, 1), Y); in commonIDivTransforms()
1192 Instruction *NewDiv = BinaryOperator::CreateUDiv( in commonIDivTransforms()
1210 NewDiv = BinaryOperator::CreateUDiv(X, Y); in commonIDivTransforms()
1212 NewDiv = BinaryOperator::CreateSDiv(X, Y); in commonIDivTransforms()
1233 return BinaryOperator::CreateSDiv(A, B); in commonIDivTransforms()
1237 return BinaryOperator::CreateUDiv(A, B); in commonIDivTransforms()
1239 return BinaryOperator::CreateUDiv(A, B); in commonIDivTransforms()
1336 static Instruction *narrowUDivURem(BinaryOperator &I, in narrowUDivURem()
1378 Instruction *InstCombinerImpl::visitUDiv(BinaryOperator &I) { in visitUDiv()
1399 BinaryOperator *BO = BinaryOperator::CreateUDiv( in visitUDiv()
1429 Instruction *Lshr = BinaryOperator::CreateLShr(A, B); in visitUDiv()
1447 Instruction *InstCombinerImpl::visitSDiv(BinaryOperator &I) { in visitSDiv()
1466 return BinaryOperator::CreateNSWNeg(Op0); in visitSDiv()
1476 return BinaryOperator::CreateExactAShr(Op0, C); in visitSDiv()
1482 return BinaryOperator::CreateExactAShr(Op0, ShAmt); in visitSDiv()
1489 return BinaryOperator::CreateNSWNeg(Ashr); in visitSDiv()
1519 Instruction *BO = BinaryOperator::CreateSDiv(X, NegC); in visitSDiv()
1528 return BinaryOperator::CreateNSWNeg( in visitSDiv()
1552 auto *BO = BinaryOperator::CreateUDiv(Op0, Op1, I.getName()); in visitSDiv()
1563 return BinaryOperator::CreateNeg(Shr); in visitSDiv()
1571 auto *BO = BinaryOperator::CreateUDiv(Op0, Op1, I.getName()); in visitSDiv()
1588 Instruction *InstCombinerImpl::foldFDivConstantDivisor(BinaryOperator &I) { in foldFDivConstantDivisor()
1598 return BinaryOperator::CreateFDivFMF(X, NegC, &I); in foldFDivConstantDivisor()
1627 return BinaryOperator::CreateFMulFMF(I.getOperand(0), RecipC, &I); in foldFDivConstantDivisor()
1631 static Instruction *foldFDivConstantDividend(BinaryOperator &I) { in foldFDivConstantDividend()
1641 return BinaryOperator::CreateFDivFMF(NegC, X, &I); in foldFDivConstantDividend()
1662 return BinaryOperator::CreateFDivFMF(NewC, X, &I); in foldFDivConstantDividend()
1666 static Instruction *foldFDivPowDivisor(BinaryOperator &I, in foldFDivPowDivisor()
1697 return BinaryOperator::CreateFMulFMF(Op0, Pow, &I); in foldFDivPowDivisor()
1707 return BinaryOperator::CreateFMulFMF(Op0, Pow, &I); in foldFDivPowDivisor()
1710 Instruction *InstCombinerImpl::visitFDiv(BinaryOperator &I) { in visitFDiv()
1750 return BinaryOperator::CreateFDivFMF(X, YZ, &I); in visitFDiv()
1756 return BinaryOperator::CreateFDivFMF(YZ, X, &I); in visitFDiv()
1765 return BinaryOperator::CreateFMulFMF(Y, Op0, &I); in visitFDiv()
1851 static Instruction *simplifyIRemMulShl(BinaryOperator &I, in simplifyIRemMulShl()
1915 [&](const APInt &RemSimplificationC) -> BinaryOperator * { in simplifyIRemMulShl()
1918 return ShiftByX ? BinaryOperator::CreateShl(RemSimplification, X) in simplifyIRemMulShl()
1919 : BinaryOperator::CreateMul(X, RemSimplification); in simplifyIRemMulShl()
1930 BinaryOperator *BO = CreateMulOrShift(Y); in simplifyIRemMulShl()
1941 BinaryOperator *BO = CreateMulOrShift(RemYZ); in simplifyIRemMulShl()
1954 Instruction *InstCombinerImpl::commonIRemTransforms(BinaryOperator &I) { in commonIRemTransforms()
2008 Instruction *InstCombinerImpl::visitURem(BinaryOperator &I) { in visitURem()
2030 return BinaryOperator::CreateAnd(Op0, Add); in visitURem()
2074 Instruction *InstCombinerImpl::visitSRem(BinaryOperator &I) { in visitSRem()
2097 return BinaryOperator::CreateNSWNeg(Builder.CreateSRem(X, Y)); in visitSRem()
2105 return BinaryOperator::CreateURem(Op0, Op1, I.getName()); in visitSRem()
2146 Instruction *InstCombinerImpl::visitFRem(BinaryOperator &I) { in visitFRem()