Lines Matching refs:BinaryOperator

54 static Value *SimplifyBSwap(BinaryOperator &I,  in SimplifyBSwap()
1273 static Instruction *reassociateFCmps(BinaryOperator &BO, in reassociateFCmps()
1312 return BinaryOperator::Create(Opcode, NewFCmp, BO11); in reassociateFCmps()
1318 static Instruction *matchDeMorgansLaws(BinaryOperator &I, in matchDeMorgansLaws()
1336 return BinaryOperator::CreateNot(AndOr); in matchDeMorgansLaws()
1348 return BinaryOperator::Create(Opcode, A, Builder.CreateNot(FlippedBO)); in matchDeMorgansLaws()
1371 static Instruction *foldLogicCastConstant(BinaryOperator &Logic, CastInst *Cast, in foldLogicCastConstant()
1410 Instruction *InstCombinerImpl::foldCastedBitwiseLogic(BinaryOperator &I) { in foldCastedBitwiseLogic()
1476 static Instruction *foldAndToXor(BinaryOperator &I, in foldAndToXor()
1488 return BinaryOperator::CreateXor(A, B); in foldAndToXor()
1497 return BinaryOperator::CreateNot(Builder.CreateXor(A, B)); in foldAndToXor()
1502 static Instruction *foldOrToXor(BinaryOperator &I, in foldOrToXor()
1515 return BinaryOperator::CreateNot(Builder.CreateXor(A, B)); in foldOrToXor()
1523 return BinaryOperator::CreateNot(Builder.CreateAnd(A, B)); in foldOrToXor()
1531 return BinaryOperator::CreateXor(A, B); in foldOrToXor()
1545 Instruction *InstCombinerImpl::narrowMaskedBinOp(BinaryOperator &And) { in narrowMaskedBinOp()
1571 Instruction::BinaryOps Opc = cast<BinaryOperator>(Op0)->getOpcode(); in narrowMaskedBinOp()
1586 static Instruction *foldComplexAndOrPatterns(BinaryOperator &I, in foldComplexAndOrPatterns()
1629 ? BinaryOperator::CreateAnd(Xor, Builder.CreateNot(A)) in foldComplexAndOrPatterns()
1630 : BinaryOperator::CreateNot(Builder.CreateAnd(Xor, A)); in foldComplexAndOrPatterns()
1639 ? BinaryOperator::CreateAnd(Xor, Builder.CreateNot(B)) in foldComplexAndOrPatterns()
1640 : BinaryOperator::CreateNot(Builder.CreateAnd(Xor, B)); in foldComplexAndOrPatterns()
1647 return BinaryOperator::CreateNot(Builder.CreateBinOp( in foldComplexAndOrPatterns()
1654 return BinaryOperator::CreateNot(Builder.CreateBinOp( in foldComplexAndOrPatterns()
1668 Value *Or = cast<BinaryOperator>(X)->getOperand(0); in foldComplexAndOrPatterns()
1669 return BinaryOperator::CreateNot(Builder.CreateAnd(Or, Y)); in foldComplexAndOrPatterns()
1701 ? BinaryOperator::CreateNot(Builder.CreateOr(Xor, A)) in foldComplexAndOrPatterns()
1702 : BinaryOperator::CreateOr(Xor, X); in foldComplexAndOrPatterns()
1709 return BinaryOperator::Create( in foldComplexAndOrPatterns()
1717 return BinaryOperator::Create( in foldComplexAndOrPatterns()
1728 Instruction *InstCombinerImpl::visitAnd(BinaryOperator &I) { in visitAnd()
1792 return BinaryOperator::CreateXor(And, NewC); in visitAnd()
1806 return BinaryOperator::CreateOr(And, ConstantInt::get(Ty, Together)); in visitAnd()
1818 return BinaryOperator::CreateLShr(Sext, ShAmtC); in visitAnd()
1826 return BinaryOperator::CreateLShr(X, ConstantInt::get(Ty, *ShiftC)); in visitAnd()
1835 return BinaryOperator::CreateAnd(X, Op1); in visitAnd()
1844 return BinaryOperator::CreateXor(NewAnd, Op1); in visitAnd()
1850 auto isNarrowableBinOpcode = [](BinaryOperator *B) { in visitAnd()
1862 BinaryOperator *BO; in visitAnd()
1913 BinaryOperator::BinaryOps BinOp = cast<BinaryOperator>(Op0)->getOpcode(); in visitAnd()
1918 return BinaryOperator::Create(BinOp, X, NewRHS); in visitAnd()
1924 return BinaryOperator::Create(BinOp, NewLHS, Y); in visitAnd()
1937 cast<BinaryOperator>(Op0)->getOpcode() == Instruction::Shl; in visitAnd()
2001 return BinaryOperator::CreateAnd(SExt, SanitizedSignMask); in visitAnd()
2030 return BinaryOperator::CreateAnd(Op0, Builder.CreateNot(B)); in visitAnd()
2033 return BinaryOperator::CreateAnd(Op1, Builder.CreateNot(B)); in visitAnd()
2037 return BinaryOperator::CreateAnd(Op0, B); in visitAnd()
2040 return BinaryOperator::CreateAnd(Op1, B); in visitAnd()
2046 return BinaryOperator::CreateAnd(Op0, Builder.CreateNot(C)); in visitAnd()
2052 return BinaryOperator::CreateAnd(Op1, Builder.CreateNot(C)); in visitAnd()
2060 return BinaryOperator::CreateAnd(A, B); in visitAnd()
2068 return BinaryOperator::CreateAnd(A, B); in visitAnd()
2076 return BinaryOperator::CreateAnd(Builder.CreateNot(A), B); in visitAnd()
2084 return BinaryOperator::CreateAnd(Builder.CreateNot(A), B); in visitAnd()
2211 BinaryOperator *Or0, *Or1; in matchFunnelShift()
2223 if (Or0->getOpcode() == BinaryOperator::LShr) { in matchFunnelShift()
2228 assert(Or0->getOpcode() == BinaryOperator::Shl && in matchFunnelShift()
2229 Or1->getOpcode() == BinaryOperator::LShr && in matchFunnelShift()
2700 Instruction *InstCombinerImpl::visitOr(BinaryOperator &I) { in visitOr()
2768 return BinaryOperator::CreateXor(Or, ConstantInt::get(Ty, *CV)); in visitOr()
2777 return BinaryOperator::CreateMul(X, IncrementY); in visitOr()
2792 return BinaryOperator::CreateOr(Builder.CreateAnd(X, *C0), B); in visitOr()
2795 return BinaryOperator::CreateOr(Builder.CreateAnd(X, *C1), A); in visitOr()
2799 return BinaryOperator::CreateXor(Builder.CreateAnd(X, *C0), B); in visitOr()
2802 return BinaryOperator::CreateXor(Builder.CreateAnd(X, *C1), A); in visitOr()
2811 return BinaryOperator::CreateAnd(A, C01); in visitOr()
2818 return BinaryOperator::CreateAnd(B, C01); in visitOr()
2828 return BinaryOperator::CreateAnd(Or, C01); in visitOr()
2860 return BinaryOperator::CreateOr(Op0, C); in visitOr()
2865 return BinaryOperator::CreateOr(Op1, C); in visitOr()
2869 return BinaryOperator::CreateOr(C, Op1); in visitOr()
2873 return BinaryOperator::CreateOr(Op0, C); in visitOr()
2877 return BinaryOperator::CreateOr(Op1, Builder.CreateAnd(A, C)); in visitOr()
2896 return BinaryOperator::CreateOr(A, B); in visitOr()
2900 return BinaryOperator::CreateOr(A, B); in visitOr()
2904 return BinaryOperator::CreateNot(Builder.CreateAnd(A, B)); in visitOr()
2908 return BinaryOperator::CreateOr(Not, Op0); in visitOr()
2912 return BinaryOperator::CreateOr(Not, Op0); in visitOr()
2919 if (BinaryOperator *B = dyn_cast<BinaryOperator>(A)) in visitOr()
2926 return BinaryOperator::CreateOr(Not, Op0); in visitOr()
3014 return BinaryOperator::CreateOr(Inner, CI); in visitOr()
3070 return BinaryOperator::CreateAnd(NotNullA, NotNullB); in visitOr()
3085 return BinaryOperator::CreateLShr(Constant::getAllOnesValue(Ty), Sub); in visitOr()
3108 return BinaryOperator::CreateOr( in visitOr()
3120 return BinaryOperator::CreateOr( in visitOr()
3129 static Instruction *foldXorToXor(BinaryOperator &I, in foldXorToXor()
3144 return BinaryOperator::CreateXor(A, B); in foldXorToXor()
3152 return BinaryOperator::CreateXor(A, B); in foldXorToXor()
3160 return BinaryOperator::CreateXor(A, B); in foldXorToXor()
3175 return BinaryOperator::CreateNot(Builder.CreateXor(A, B)); in foldXorToXor()
3181 BinaryOperator &I) { in foldXorOfICmps()
3302 static Instruction *visitMaskedMerge(BinaryOperator &I, in visitMaskedMerge()
3317 return BinaryOperator::CreateXor(NewA, X); in visitMaskedMerge()
3329 return BinaryOperator::CreateOr(LHS, RHS); in visitMaskedMerge()
3341 static Instruction *sinkNotIntoXor(BinaryOperator &I, in sinkNotIntoXor()
3358 return BinaryOperator::CreateXor(NotX, Y, I.getName() + ".demorgan"); in sinkNotIntoXor()
3363 static Instruction *canonicalizeAbs(BinaryOperator &Xor, in canonicalizeAbs()
3386 auto *Add = cast<BinaryOperator>(Op0); in canonicalizeAbs()
3399 bool InstCombinerImpl::sinkNotIntoOtherHandOfAndOrOr(BinaryOperator &I) { in sinkNotIntoOtherHandOfAndOrOr()
3426 BinaryOperator::Create(NewOpc, X, NotY, I.getName() + ".not"); in sinkNotIntoOtherHandOfAndOrOr()
3436 Instruction *InstCombinerImpl::foldNot(BinaryOperator &I) { in foldNot()
3454 return BinaryOperator::CreateOr(X, NotY); in foldNot()
3465 return BinaryOperator::CreateAnd(X, NotY); in foldNot()
3473 BinaryOperator *NotVal; in foldNot()
3487 return BinaryOperator::CreateOr(NotX, NotY); in foldNot()
3488 return BinaryOperator::CreateAnd(NotX, NotY); in foldNot()
3497 return BinaryOperator::CreateAnd(DecX, NotY); in foldNot()
3502 return BinaryOperator::CreateAShr(X, Y); in foldNot()
3517 return BinaryOperator::CreateLShr(ConstantExpr::getNot(C), Y); in foldNot()
3527 return BinaryOperator::CreateAShr(ConstantExpr::getNot(C), Y); in foldNot()
3532 return BinaryOperator::CreateSub(ConstantExpr::getNot(C), X); in foldNot()
3538 return BinaryOperator::CreateAdd(Builder.CreateNot(X), Y); in foldNot()
3542 return BinaryOperator::CreateWithCopiedFlags(Instruction::Sub, X, Y, in foldNot()
3614 Instruction *InstCombinerImpl::visitXor(BinaryOperator &I) { in visitXor()
3654 return BinaryOperator::CreateOr(Op0, Op1); in visitXor()
3671 return BinaryOperator::CreateXor( in visitXor()
3679 return BinaryOperator::CreateXor(And, ConstantExpr::getNot(C1)); in visitXor()
3684 return BinaryOperator::CreateXor(Or, ConstantExpr::getNot(C1)); in visitXor()
3710 return BinaryOperator::CreateSub(ConstantInt::get(Ty, *C + *RHSC), X); in visitXor()
3714 return BinaryOperator::CreateAdd(X, ConstantInt::get(Ty, *C + *RHSC)); in visitXor()
3719 return BinaryOperator::CreateXor(X, ConstantInt::get(Ty, *C ^ *RHSC)); in visitXor()
3727 return BinaryOperator::CreateShl(NotX, ConstantInt::get(Ty, *C)); in visitXor()
3733 return BinaryOperator::CreateLShr(NotX, ConstantInt::get(Ty, *C)); in visitXor()
3756 return BinaryOperator::CreateXor(Opnd0, ConstantInt::get(Ty, FoldConst)); in visitXor()
3766 return BinaryOperator::CreateAnd(X, Builder.CreateNot(Op0)); in visitXor()
3770 return BinaryOperator::CreateAnd(X, Builder.CreateNot(Op1)); in visitXor()
3775 return BinaryOperator::CreateAnd(Op0, Builder.CreateNot(X)); in visitXor()
3783 return BinaryOperator::CreateAnd(Op1, Builder.CreateNot(X)); in visitXor()
3789 return BinaryOperator::CreateXor( in visitXor()
3795 return BinaryOperator::CreateXor( in visitXor()
3801 return BinaryOperator::CreateOr(A, B); in visitXor()
3805 return BinaryOperator::CreateOr(A, B); in visitXor()
3811 return BinaryOperator::CreateNot(Builder.CreateAnd(A, B)); in visitXor()
3815 return BinaryOperator::CreateOr(A, B); in visitXor()
3819 return BinaryOperator::CreateNot(Builder.CreateAnd(Op1, B)); in visitXor()
3823 return BinaryOperator::CreateNot(Builder.CreateAnd(Op0, B)); in visitXor()
3836 return BinaryOperator::CreateAnd(Builder.CreateXor(B, C), NotA); in visitXor()
3859 return BinaryOperator::CreateXor(Builder.CreateXor(X, Y), C1); in visitXor()