Lines Matching refs:BinaryOperator
59 BinaryOperator *Sh0, const SimplifyQuery &SQ,
147 BinaryOperator *NewShift = BinaryOperator::Create(ShiftOpcode, X, NewShAmt);
189 dropRedundantMaskingOfLeftShiftInput(BinaryOperator *OuterShift,
334 auto *NewShift = BinaryOperator::Create(OuterShift->getOpcode(), X,
340 return BinaryOperator::Create(Instruction::And, NewShift, NewMask);
348 static Instruction *foldShiftOfShiftedBinOp(BinaryOperator &I,
351 auto *BinInst = dyn_cast<BinaryOperator>(I.getOperand(0));
402 return BinaryOperator::Create(BinInst->getOpcode(), Op1, Op2);
405 Instruction *InstCombinerImpl::commonShiftTransforms(BinaryOperator &I) {
417 return BinaryOperator::Create(I.getOpcode(), Op0, NewExt);
446 BinaryOperator *NewShiftOp = BinaryOperator::Create(I.getOpcode(), NewC, A);
486 BinaryOperator *NewShiftOp =
487 BinaryOperator::Create(I.getOpcode(), NewC, A);
641 static Value *foldShiftedShift(BinaryOperator *InnerShift, unsigned OuterShAmt,
731 return foldShiftedShift(cast<BinaryOperator>(I), NumBits, isLeftShift,
752 auto *Neg = BinaryOperator::CreateNeg(I->getOperand(0));
756 auto *And = BinaryOperator::CreateAnd(Neg,
766 static bool canShiftBinOpWithConstantRHS(BinaryOperator &Shift,
767 BinaryOperator *BO) {
784 BinaryOperator &I) {
791 Instruction *R = BinaryOperator::Create(
793 BinaryOperator *BO0 = cast<BinaryOperator>(Op0);
847 if (auto *Op0BO = dyn_cast<BinaryOperator>(Op0)) {
860 return BinaryOperator::Create(Op0BO->getOpcode(), NewShift, NewRHS);
874 BinaryOperator *TBO;
891 BinaryOperator *FBO;
922 Instruction *InstCombinerImpl::foldLShrOverflowBit(BinaryOperator &I) {
982 static bool setShiftFlags(BinaryOperator &I, const SimplifyQuery &Q) {
1035 Instruction *InstCombinerImpl::visitShl(BinaryOperator &I) {
1072 return BinaryOperator::CreateAnd(X, ConstantInt::get(Ty, Mask));
1082 auto *NewShl = BinaryOperator::CreateShl(X, ShiftDiff);
1094 auto *NewShr = BinaryOperator::Create(
1095 cast<BinaryOperator>(Op0)->getOpcode(), X, ShiftDiff);
1107 auto *NewShl = BinaryOperator::CreateShl(X, ShiftDiff);
1116 return BinaryOperator::CreateAnd(NewShl, ConstantInt::get(Ty, Mask));
1121 auto *OldShr = cast<BinaryOperator>(Op0);
1123 BinaryOperator::Create(OldShr->getOpcode(), X, ShiftDiff);
1127 return BinaryOperator::CreateAnd(NewShr, ConstantInt::get(Ty, Mask));
1132 BinaryOperator *Shr;
1148 return BinaryOperator::CreateAnd(Trunc, ConstantInt::get(Ty, Mask));
1167 BinaryOperator *Op0BO;
1193 return BinaryOperator::CreateAnd(B, Mask);
1205 auto *NewOp = BinaryOperator::Create(Op0BO->getOpcode(), M, YS);
1217 return BinaryOperator::CreateSub(NewLHS, NewShift);
1230 return BinaryOperator::CreateAnd(Mask, X);
1236 return BinaryOperator::CreateShl(AllOnes, Op1);
1245 return BinaryOperator::CreateMul(X, Builder.CreateShl(C2, C1));
1257 return BinaryOperator::CreateLShr(
1265 return BinaryOperator::CreateAnd(NegX, X);
1272 Instruction *InstCombinerImpl::visitLShr(BinaryOperator &I) {
1300 auto *NewSub = BinaryOperator::CreateNUWSub(X, NewLshr);
1310 return BinaryOperator::CreateAnd(X, Y);
1317 auto *NewSub = BinaryOperator::CreateNUWSub(NewLshr, Y);
1340 BinaryOperator *Op0OB = cast<BinaryOperator>(Op0);
1346 auto *NewBinOp = BinaryOperator::Create(Op0OB->getOpcode(), NewLshr, X);
1380 if (cast<BinaryOperator>(Op0)->hasNoUnsignedWrap()) {
1382 auto *NewLShr = BinaryOperator::CreateLShr(X, ShiftDiff);
1390 return BinaryOperator::CreateAnd(NewLShr, ConstantInt::get(Ty, Mask));
1395 if (cast<BinaryOperator>(Op0)->hasNoUnsignedWrap()) {
1397 auto *NewShl = BinaryOperator::CreateShl(X, ShiftDiff);
1406 return BinaryOperator::CreateAnd(NewShl, ConstantInt::get(Ty, Mask));
1412 return BinaryOperator::CreateAnd(X, ConstantInt::get(Ty, Mask));
1427 return BinaryOperator::CreateAnd(NewAdd, Mask);
1480 return BinaryOperator::CreateAnd(Signbit, X);
1508 return BinaryOperator::CreateAnd(Trunc, ConstantInt::get(Ty, MaskC));
1524 auto *NewAdd = BinaryOperator::CreateNUWAdd(
1542 BinaryOperator::CreateNUWMul(X, ConstantInt::get(Ty, NewMulC));
1555 return BinaryOperator::CreateNSWAdd(
1578 return BinaryOperator::CreateShl(NewZExt, ShiftDiff);
1604 return BinaryOperator::CreateAnd(Mask, X);
1610 return BinaryOperator::CreateLShr(AllOnes, Op1);
1621 BinaryOperator &OldAShr) {
1679 BinaryOperator::Create(OldAShr.getOpcode(), X, NumLowBitsToSkip);
1688 Instruction *InstCombinerImpl::visitAShr(BinaryOperator &I) {
1723 auto *NewAShr = BinaryOperator::CreateAShr(X, ShiftDiff);
1730 auto *NewShl = BinaryOperator::Create(Instruction::Shl, X, ShiftDiff);
1742 return BinaryOperator::CreateAShr(X, ConstantInt::get(Ty, AmtSum));
1777 auto *NewAdd = BinaryOperator::CreateNSWAdd(
1803 return BinaryOperator::CreateNeg(X);
1811 Instruction *Lshr = BinaryOperator::CreateLShr(Op0, Op1);
1821 return BinaryOperator::CreateNot(NewAShr);