Lines Matching refs:BinaryOperator
70 BinaryOperator *I = dyn_cast<BinaryOperator>(V); in simplifyValueKnownNonZero()
103 static Value *foldMulSelectToNegate(BinaryOperator &I, in foldMulSelectToNegate()
142 Instruction *InstCombinerImpl::visitMul(BinaryOperator &I) { in visitMul()
161 BinaryOperator *BO = BinaryOperator::CreateNeg(Op0, I.getName()); in visitMul()
177 BinaryOperator *Mul = cast<BinaryOperator>(I.getOperand(0)); in visitMul()
178 BinaryOperator *BO = BinaryOperator::CreateMul(NewOp, Shl); in visitMul()
190 BinaryOperator *Shl = BinaryOperator::CreateShl(NewOp, NewCst); in visitMul()
209 return BinaryOperator::CreateMul( in visitMul()
229 return BinaryOperator::CreateAdd(Builder.CreateMul(X, Op1), Mul); in visitMul()
239 return BinaryOperator::CreateMul(X, X); in visitMul()
242 return BinaryOperator::CreateMul(X, X); in visitMul()
249 return BinaryOperator::CreateMul(X, ConstantExpr::getNeg(Op1C)); in visitMul()
253 auto *NewMul = BinaryOperator::CreateMul(X, Y); in visitMul()
264 return BinaryOperator::CreateNeg(Builder.CreateMul(X, Y)); in visitMul()
270 BinaryOperator *Div = dyn_cast<BinaryOperator>(Op0); in visitMul()
274 Div = dyn_cast<BinaryOperator>(Op1); in visitMul()
287 return BinaryOperator::CreateNeg(X); in visitMul()
294 return BinaryOperator::CreateSub(X, Rem); in visitMul()
295 return BinaryOperator::CreateSub(Rem, X); in visitMul()
301 return BinaryOperator::CreateAnd(Op0, Op1); in visitMul()
307 BinaryOperator *BO = nullptr; in visitMul()
310 BO = BinaryOperator::CreateShl(Op1, Y); in visitMul()
313 BO = BinaryOperator::CreateShl(Op0, Y); in visitMul()
361 return BinaryOperator::CreateAnd(Builder.CreateAShr(X, *C), Op1); in visitMul()
363 return BinaryOperator::CreateAnd(Builder.CreateAShr(X, *C), Op0); in visitMul()
395 Instruction *InstCombinerImpl::foldFPSignBitOps(BinaryOperator &I) { in foldFPSignBitOps()
396 BinaryOperator::BinaryOps Opcode = I.getOpcode(); in foldFPSignBitOps()
406 return BinaryOperator::CreateWithCopiedFlags(Opcode, X, Y, &I); in foldFPSignBitOps()
411 return BinaryOperator::CreateWithCopiedFlags(Opcode, X, X, &I); in foldFPSignBitOps()
428 Instruction *InstCombinerImpl::visitFMul(BinaryOperator &I) { in visitFMul()
458 return BinaryOperator::CreateFMulFMF(X, ConstantExpr::getFNeg(C), &I); in visitFMul()
473 return BinaryOperator::CreateFDivFMF(CC1, X, &I); in visitFMul()
479 return BinaryOperator::CreateFMulFMF(X, CDivC1, &I); in visitFMul()
485 return BinaryOperator::CreateFDivFMF(X, C1DivC, &I); in visitFMul()
495 return BinaryOperator::CreateFAddFMF(XC, CC1, &I); in visitFMul()
501 return BinaryOperator::CreateFSubFMF(CC1, XC, &I); in visitFMul()
510 return BinaryOperator::CreateFDivFMF(NewFMul, Y, &I); in visitFMul()
533 return BinaryOperator::CreateFDivFMF(X, Y, &I); in visitFMul()
537 return BinaryOperator::CreateFDivFMF(X, Y, &I); in visitFMul()
548 return BinaryOperator::CreateFDivFMF(XX, Y, &I); in visitFMul()
554 return BinaryOperator::CreateFDivFMF(Y, XX, &I); in visitFMul()
594 return BinaryOperator::CreateFMulFMF(XX, Y, &I); in visitFMul()
599 return BinaryOperator::CreateFMulFMF(XX, Y, &I); in visitFMul()
619 return BinaryOperator::CreateFSubFMF(LogXTimesY, Y, &I); in visitFMul()
629 bool InstCombinerImpl::simplifyDivRemOfSelectWithZeroOp(BinaryOperator &I) { in simplifyDivRemOfSelectWithZeroOp()
729 Instruction *InstCombinerImpl::commonIDivTransforms(BinaryOperator &I) { in commonIDivTransforms()
753 return BinaryOperator::Create(I.getOpcode(), X, in commonIDivTransforms()
763 auto *NewDiv = BinaryOperator::Create(I.getOpcode(), X, in commonIDivTransforms()
771 auto *Mul = BinaryOperator::Create(Instruction::Mul, X, in commonIDivTransforms()
789 auto *BO = BinaryOperator::Create(I.getOpcode(), X, in commonIDivTransforms()
797 auto *Mul = BinaryOperator::Create(Instruction::Mul, X, in commonIDivTransforms()
836 return BinaryOperator::Create(I.getOpcode(), X, Op1); in commonIDivTransforms()
841 return BinaryOperator::CreateNSWShl(ConstantInt::get(Ty, 1), Y); in commonIDivTransforms()
843 return BinaryOperator::CreateNUWShl(ConstantInt::get(Ty, 1), Y); in commonIDivTransforms()
864 const BinaryOperator &I,
894 const BinaryOperator &I, in foldUDivPow2Cst()
899 BinaryOperator *LShr = BinaryOperator::CreateLShr(Op0, C1); in foldUDivPow2Cst()
907 static Instruction *foldUDivShl(Value *Op0, Value *Op1, const BinaryOperator &I, in foldUDivShl()
923 BinaryOperator *LShr = BinaryOperator::CreateLShr(Op0, N); in foldUDivShl()
933 static size_t visitUDivOperand(Value *Op0, Value *Op1, const BinaryOperator &I, in visitUDivOperand()
972 static Instruction *narrowUDivURem(BinaryOperator &I, in narrowUDivURem()
1007 Instruction *InstCombinerImpl::visitUDiv(BinaryOperator &I) { in visitUDiv()
1028 BinaryOperator *BO = BinaryOperator::CreateUDiv( in visitUDiv()
1061 return BinaryOperator::CreateUDiv(B, X); in visitUDiv()
1064 return BinaryOperator::CreateUDiv(A, X); in visitUDiv()
1101 Instruction *InstCombinerImpl::visitSDiv(BinaryOperator &I) { in visitSDiv()
1120 return BinaryOperator::CreateNeg(Op0); in visitSDiv()
1133 auto *AShr = BinaryOperator::CreateExactAShr( in visitSDiv()
1139 return BinaryOperator::CreateNeg(AShr, I.getName()); in visitSDiv()
1167 Instruction *BO = BinaryOperator::CreateSDiv(X, NegC); in visitSDiv()
1176 return BinaryOperator::CreateNSWNeg( in visitSDiv()
1195 auto *BO = BinaryOperator::CreateUDiv(Op0, Op1, I.getName()); in visitSDiv()
1203 return BinaryOperator::CreateNeg(Builder.Insert(foldUDivPow2Cst( in visitSDiv()
1212 auto *BO = BinaryOperator::CreateUDiv(Op0, Op1, I.getName()); in visitSDiv()
1222 static Instruction *foldFDivConstantDivisor(BinaryOperator &I) { in foldFDivConstantDivisor()
1230 return BinaryOperator::CreateFDivFMF(X, ConstantExpr::getFNeg(C), &I); in foldFDivConstantDivisor()
1247 return BinaryOperator::CreateFMulFMF(I.getOperand(0), RecipC, &I); in foldFDivConstantDivisor()
1251 static Instruction *foldFDivConstantDividend(BinaryOperator &I) { in foldFDivConstantDividend()
1259 return BinaryOperator::CreateFDivFMF(ConstantExpr::getFNeg(C), X, &I); in foldFDivConstantDividend()
1280 return BinaryOperator::CreateFDivFMF(NewC, X, &I); in foldFDivConstantDividend()
1284 static Instruction *foldFDivPowDivisor(BinaryOperator &I, in foldFDivPowDivisor()
1315 return BinaryOperator::CreateFMulFMF(Op0, Pow, &I); in foldFDivPowDivisor()
1325 return BinaryOperator::CreateFMulFMF(Op0, Pow, &I); in foldFDivPowDivisor()
1328 Instruction *InstCombinerImpl::visitFDiv(BinaryOperator &I) { in visitFDiv()
1363 return BinaryOperator::CreateFDivFMF(X, YZ, &I); in visitFDiv()
1369 return BinaryOperator::CreateFDivFMF(YZ, X, &I); in visitFDiv()
1378 return BinaryOperator::CreateFMulFMF(Y, Op0, &I); in visitFDiv()
1437 Instruction *InstCombinerImpl::commonIRemTransforms(BinaryOperator &I) { in commonIRemTransforms()
1475 Instruction *InstCombinerImpl::visitURem(BinaryOperator &I) { in visitURem()
1497 return BinaryOperator::CreateAnd(Op0, Add); in visitURem()
1526 Instruction *InstCombinerImpl::visitSRem(BinaryOperator &I) { in visitSRem()
1549 return BinaryOperator::CreateNSWNeg(Builder.CreateSRem(X, Y)); in visitSRem()
1557 return BinaryOperator::CreateURem(Op0, Op1, I.getName()); in visitSRem()
1598 Instruction *InstCombinerImpl::visitFRem(BinaryOperator &I) { in visitFRem()