Lines Matching refs:BinaryOperator

83 static Value *SimplifyBSwap(BinaryOperator &I,  in SimplifyBSwap()
118 Instruction *InstCombiner::OptAndOp(BinaryOperator *Op, in OptAndOp()
121 BinaryOperator &TheAnd) { in OptAndOp()
153 return BinaryOperator::CreateXor(NewAnd, AndRHS); in OptAndOp()
1265 static Instruction *matchDeMorgansLaws(BinaryOperator &I, in matchDeMorgansLaws()
1280 return BinaryOperator::CreateNot(AndOr); in matchDeMorgansLaws()
1303 static Instruction *foldLogicCastConstant(BinaryOperator &Logic, CastInst *Cast, in foldLogicCastConstant()
1342 Instruction *InstCombiner::foldCastedBitwiseLogic(BinaryOperator &I) { in foldCastedBitwiseLogic()
1408 static Instruction *foldAndToXor(BinaryOperator &I, in foldAndToXor()
1420 return BinaryOperator::CreateXor(A, B); in foldAndToXor()
1429 return BinaryOperator::CreateNot(Builder.CreateXor(A, B)); in foldAndToXor()
1434 static Instruction *foldOrToXor(BinaryOperator &I, in foldOrToXor()
1447 return BinaryOperator::CreateNot(Builder.CreateXor(A, B)); in foldOrToXor()
1455 return BinaryOperator::CreateXor(A, B); in foldOrToXor()
1488 Instruction *InstCombiner::narrowMaskedBinOp(BinaryOperator &And) { in narrowMaskedBinOp()
1514 Instruction::BinaryOps Opc = cast<BinaryOperator>(Op0)->getOpcode(); in narrowMaskedBinOp()
1530 Instruction *InstCombiner::visitAnd(BinaryOperator &I) { in visitAnd()
1575 return BinaryOperator::CreateXor(And, NewC); in visitAnd()
1590 return BinaryOperator::CreateOr(And, ConstantInt::get(I.getType(), in visitAnd()
1598 BinaryOperator::BinaryOps BinOp = cast<BinaryOperator>(Op0)->getOpcode(); in visitAnd()
1603 return BinaryOperator::Create(BinOp, X, NewRHS); in visitAnd()
1609 return BinaryOperator::Create(BinOp, NewLHS, Y); in visitAnd()
1619 if (BinaryOperator *Op0I = dyn_cast<BinaryOperator>(Op0)) { in visitAnd()
1665 return BinaryOperator::CreateAnd(NewCast, C3); in visitAnd()
1683 return BinaryOperator::CreateAnd(Op0, Builder.CreateNot(B)); in visitAnd()
1686 return BinaryOperator::CreateAnd(Op1, Builder.CreateNot(B)); in visitAnd()
1692 return BinaryOperator::CreateAnd(Op0, Builder.CreateNot(C)); in visitAnd()
1698 return BinaryOperator::CreateAnd(Op1, Builder.CreateNot(C)); in visitAnd()
1706 return BinaryOperator::CreateAnd(A, B); in visitAnd()
1714 return BinaryOperator::CreateAnd(A, B); in visitAnd()
1765 Instruction *InstCombiner::matchBSwap(BinaryOperator &Or) { in matchBSwap()
1829 auto ShiftOpcode0 = cast<BinaryOperator>(Or0)->getOpcode(); in matchRotate()
1830 auto ShiftOpcode1 = cast<BinaryOperator>(Or1)->getOpcode(); in matchRotate()
1857 bool IsFshl = (!SubIsOnLHS && ShiftOpcode0 == BinaryOperator::Shl) || in matchRotate()
1858 (SubIsOnLHS && ShiftOpcode1 == BinaryOperator::Shl); in matchRotate()
2191 Instruction *InstCombiner::visitOr(BinaryOperator &I) { in visitOr()
2234 return BinaryOperator::CreateXor(Or, ConstantInt::get(I.getType(), *CV)); in visitOr()
2254 return BinaryOperator::CreateAnd(A, in visitOr()
2262 return BinaryOperator::CreateAnd(B, in visitOr()
2273 return BinaryOperator::CreateAnd(V2, in visitOr()
2283 return BinaryOperator::CreateOr(Builder.CreateAnd(X, C1), B); in visitOr()
2286 return BinaryOperator::CreateOr(Builder.CreateAnd(X, C2), A); in visitOr()
2290 return BinaryOperator::CreateXor(Builder.CreateAnd(X, C1), B); in visitOr()
2293 return BinaryOperator::CreateXor(Builder.CreateAnd(X, C2), A); in visitOr()
2324 return BinaryOperator::CreateOr(Op0, C); in visitOr()
2329 return BinaryOperator::CreateOr(Op1, C); in visitOr()
2333 return BinaryOperator::CreateOr(Op1, Builder.CreateAnd(A, C)); in visitOr()
2350 return BinaryOperator::CreateOr(A, B); in visitOr()
2354 return BinaryOperator::CreateOr(A, B); in visitOr()
2358 return BinaryOperator::CreateOr(Not, Op0); in visitOr()
2362 return BinaryOperator::CreateOr(Not, Op0); in visitOr()
2369 if (BinaryOperator *B = dyn_cast<BinaryOperator>(A)) in visitOr()
2376 return BinaryOperator::CreateOr(Not, Op0); in visitOr()
2436 return BinaryOperator::CreateOr(Inner, CI); in visitOr()
2458 static Instruction *foldXorToXor(BinaryOperator &I, in foldXorToXor()
2513 return BinaryOperator::CreateNot(Builder.CreateXor(A, B)); in foldXorToXor()
2603 static Instruction *visitMaskedMerge(BinaryOperator &I, in visitMaskedMerge()
2618 return BinaryOperator::CreateXor(NewA, X); in visitMaskedMerge()
2627 return BinaryOperator::CreateOr(LHS, RHS); in visitMaskedMerge()
2639 static Instruction *sinkNotIntoXor(BinaryOperator &I, in sinkNotIntoXor()
2656 return BinaryOperator::CreateXor(NotX, Y, I.getName() + ".demorgan"); in sinkNotIntoXor()
2662 Instruction *InstCombiner::visitXor(BinaryOperator &I) { in visitXor()
2697 return BinaryOperator::CreateOr(Op0, Op1); in visitXor()
2708 return BinaryOperator::CreateOr(X, NotY); in visitXor()
2714 return BinaryOperator::CreateAnd(X, NotY); in visitXor()
2721 BinaryOperator *NotVal; in visitXor()
2735 return BinaryOperator::CreateOr(NotX, NotY); in visitXor()
2736 return BinaryOperator::CreateAnd(NotX, NotY); in visitXor()
2743 return BinaryOperator::CreateAdd(Builder.CreateNot(X), Y); in visitXor()
2747 return BinaryOperator::CreateAShr(X, Y); in visitXor()
2758 return BinaryOperator::CreateLShr(ConstantExpr::getNot(C), Y); in visitXor()
2763 return BinaryOperator::CreateAShr(ConstantExpr::getNot(C), Y); in visitXor()
2767 return BinaryOperator::CreateSub(ConstantExpr::getNeg(AddOne(C)), X); in visitXor()
2777 return BinaryOperator::CreateXor(And, ConstantExpr::getNot(C1)); in visitXor()
2782 return BinaryOperator::CreateXor(Or, ConstantExpr::getNot(C1)); in visitXor()
2801 return BinaryOperator::CreateSub(NewC, X); in visitXor()
2806 return BinaryOperator::CreateAdd(X, NewC); in visitXor()
2822 if (BinaryOperator *Op0I = dyn_cast<BinaryOperator>(Op0)) { in visitXor()
2827 BinaryOperator *E1; in visitXor()
2830 (E1 = dyn_cast<BinaryOperator>(Op0I->getOperand(0))) && in visitXor()
2843 return BinaryOperator::CreateXor(Opnd0, FoldVal); in visitXor()
2856 return BinaryOperator::CreateAnd(X, Builder.CreateNot(Op0)); in visitXor()
2860 return BinaryOperator::CreateAnd(X, Builder.CreateNot(Op1)); in visitXor()
2865 return BinaryOperator::CreateAnd(Op0, Builder.CreateNot(X)); in visitXor()
2873 return BinaryOperator::CreateAnd(Op1, Builder.CreateNot(X)); in visitXor()
2879 return BinaryOperator::CreateXor( in visitXor()
2885 return BinaryOperator::CreateXor( in visitXor()
2891 return BinaryOperator::CreateOr(A, B); in visitXor()
2895 return BinaryOperator::CreateOr(A, B); in visitXor()
2901 return BinaryOperator::CreateNot(Builder.CreateAnd(A, B)); in visitXor()
2929 auto *Add = cast<BinaryOperator>(Op0); in visitXor()