Home | History | Annotate | Download | only in Analysis

Lines Matching refs:Op0

148   if (BinaryOperator *Op0 = dyn_cast<BinaryOperator>(LHS))
149 if (Op0->getOpcode() == OpcodeToExpand) {
151 Value *A = Op0->getOperand(0), *B = Op0->getOperand(1), *C = RHS;
207 BinaryOperator *Op0 = dyn_cast<BinaryOperator>(LHS);
211 if (Op0 && Op0->getOpcode() == Opcode) {
212 Value *A = Op0->getOperand(0);
213 Value *B = Op0->getOperand(1);
253 if (Op0 && Op0->getOpcode() == Opcode) {
254 Value *A = Op0->getOperand(0);
255 Value *B = Op0->getOperand(1);
529 static Value *SimplifyAddInst(Value *Op0, Value *Op1, bool isNSW, bool isNUW,
531 if (Constant *CLHS = dyn_cast<Constant>(Op0)) {
539 std::swap(Op0, Op1);
548 return Op0;
554 if (match(Op1, m_Sub(m_Value(Y), m_Specific(Op0))) ||
555 match(Op0, m_Sub(m_Value(Y), m_Specific(Op1))))
559 if (match(Op0, m_Not(m_Specific(Op1))) ||
560 match(Op1, m_Not(m_Specific(Op0))))
561 return Constant::getAllOnesValue(Op0->getType());
564 if (MaxRecurse && Op0->getType()->isIntegerTy(1))
565 if (Value *V = SimplifyXorInst(Op0, Op1, Q, MaxRecurse-1))
569 if (Value *V = SimplifyAssociativeBinOp(Instruction::Add, Op0, Op1, Q,
585 Value *llvm::SimplifyAddInst(Value *Op0, Value *Op1, bool isNSW, bool isNUW,
589 return ::SimplifyAddInst(Op0, Op1, isNSW, isNUW, Query(DL, TLI, DT, AC, CxtI),
661 static Value *SimplifySubInst(Value *Op0, Value *Op1, bool isNSW, bool isNUW,
663 if (Constant *CLHS = dyn_cast<Constant>(Op0))
672 if (match(Op0, m_Undef()) || match(Op1, m_Undef()))
673 return UndefValue::get(Op0->getType());
677 return Op0;
680 if (Op0 == Op1)
681 return Constant::getNullValue(Op0->getType());
684 if (isNUW && match(Op0, m_Zero()))
685 return Op0;
690 if (MaxRecurse && match(Op0, m_Add(m_Value(X), m_Value(Y)))) { // (X + Y) - Z
711 X = Op0;
733 Z = Op0;
745 if (MaxRecurse && match(Op0, m_Trunc(m_Value(X))) &&
751 if (Value *W = SimplifyTruncInst(V, Op0->getType(), Q, MaxRecurse-1))
756 if (match(Op0, m_PtrToInt(m_Value(X))) &&
759 return ConstantExpr::getIntegerCast(Result, Op0->getType(), true);
762 if (MaxRecurse && Op0->getType()->isIntegerTy(1))
763 if (Value *V = SimplifyXorInst(Op0, Op1, Q, MaxRecurse-1))
778 Value *llvm::SimplifySubInst(Value *Op0, Value *Op1, bool isNSW, bool isNUW,
782 return ::SimplifySubInst(Op0, Op1, isNSW, isNUW, Query(DL, TLI, DT, AC, CxtI),
788 static Value *SimplifyFAddInst(Value *Op0, Value *Op1, FastMathFlags FMF,
790 if (Constant *CLHS = dyn_cast<Constant>(Op0)) {
798 std::swap(Op0, Op1);
803 return Op0;
807 (FMF.noSignedZeros() || CannotBeNegativeZero(Op0)))
808 return Op0;
814 if (match(Op1, m_FSub(m_AnyZero(), m_Specific(Op0))))
816 else if (match(Op0, m_FSub(m_AnyZero(), m_Specific(Op1))))
817 SubOp = Op0;
822 return Constant::getNullValue(Op0->getType());
830 static Value *SimplifyFSubInst(Value *Op0, Value *Op1, FastMathFlags FMF,
832 if (Constant *CLHS = dyn_cast<Constant>(Op0)) {
842 return Op0;
846 (FMF.noSignedZeros() || CannotBeNegativeZero(Op0)))
847 return Op0;
851 if (match(Op0, m_AnyZero())) {
859 if (FMF.noNaNs() && Op0 == Op1)
860 return Constant::getNullValue(Op0->getType());
866 static Value *SimplifyFMulInst(Value *Op0, Value *Op1,
870 if (Constant *CLHS = dyn_cast<Constant>(Op0)) {
878 std::swap(Op0, Op1);
883 return Op0;
894 static Value *SimplifyMulInst(Value *Op0, Value *Op1, const Query &Q,
896 if (Constant *CLHS = dyn_cast<Constant>(Op0)) {
904 std::swap(Op0, Op1);
909 return Constant::getNullValue(Op0->getType());
917 return Op0;
921 if (match(Op0, m_Exact(m_IDiv(m_Value(X), m_Specific(Op1)))) || // (X / Y) * Y
922 match(Op1, m_Exact(m_IDiv(m_Value(X), m_Specific(Op0))))) // Y * (X / Y)
926 if (MaxRecurse && Op0->getType()->isIntegerTy(1))
927 if (Value *V = SimplifyAndInst(Op0, Op1, Q, MaxRecurse-1))
931 if (Value *V = SimplifyAssociativeBinOp(Instruction::Mul, Op0, Op1, Q,
936 if (Value *V = ExpandBinOp(Instruction::Mul, Op0, Op1, Instruction::Add,
942 if (isa<SelectInst>(Op0) || isa<SelectInst>(Op1))
943 if (Value *V = ThreadBinOpOverSelect(Instruction::Mul, Op0, Op1, Q,
949 if (isa<PHINode>(Op0) || isa<PHINode>(Op1))
950 if (Value *V = ThreadBinOpOverPHI(Instruction::Mul, Op0, Op1, Q,
957 Value *llvm::SimplifyFAddInst(Value *Op0, Value *Op1, FastMathFlags FMF,
962 return ::SimplifyFAddInst(Op0, Op1, FMF, Query(DL, TLI, DT, AC, CxtI),
966 Value *llvm::SimplifyFSubInst(Value *Op0, Value *Op1, FastMathFlags FMF,
971 return ::SimplifyFSubInst(Op0, Op1, FMF, Query(DL, TLI, DT, AC, CxtI),
975 Value *llvm::SimplifyFMulInst(Value *Op0, Value *Op1, FastMathFlags FMF,
980 return ::SimplifyFMulInst(Op0, Op1, FMF, Query(DL, TLI, DT, AC, CxtI),
984 Value *llvm::SimplifyMulInst(Value *Op0, Value *Op1, const DataLayout &DL,
988 return ::SimplifyMulInst(Op0, Op1, Query(DL, TLI, DT, AC, CxtI),
994 static Value *SimplifyDiv(Instruction::BinaryOps Opcode, Value *Op0, Value *Op1,
996 if (Constant *C0 = dyn_cast<Constant>(Op0)) {
1014 if (match(Op0, m_Undef()))
1015 return Constant::getNullValue(Op0->getType());
1018 if (match(Op0, m_Zero()))
1019 return Op0;
1023 return Op0;
1025 if (Op0->getType()->isIntegerTy(1))
1027 return Op0;
1030 if (Op0 == Op1)
1031 return ConstantInt::get(Op0->getType(), 1);
1035 if (match(Op0, m_Mul(m_Value(X), m_Value(Y))) && (X == Op1 || Y == Op1)) {
1037 OverflowingBinaryOperator *Mul = cast<OverflowingBinaryOperator>(Op0);
1049 if ((isSigned && match(Op0, m_SRem(m_Value(), m_Specific(Op1)))) ||
1050 (!isSigned && match(Op0, m_URem(m_Value(), m_Specific(Op1)))))
1051 return Constant::getNullValue(Op0->getType());
1055 if (!isSigned && match(Op0, m_UDiv(m_Value(X), m_ConstantInt(C1))) &&
1060 return Constant::getNullValue(Op0->getType());
1065 if (isa<SelectInst>(Op0) || isa<SelectInst>(Op1))
1066 if (Value *V = ThreadBinOpOverSelect(Opcode, Op0, Op1, Q, MaxRecurse))
1071 if (isa<PHINode>(Op0) || isa<PHINode>(Op1))
1072 if (Value *V = ThreadBinOpOverPHI(Opcode, Op0, Op1, Q, MaxRecurse))
1080 static Value *SimplifySDivInst(Value *Op0, Value *Op1, const Query &Q,
1082 if (Value *V = SimplifyDiv(Instruction::SDiv, Op0, Op1, Q, MaxRecurse))
1088 Value *llvm::SimplifySDivInst(Value *Op0, Value *Op1, const DataLayout &DL,
1092 return ::SimplifySDivInst(Op0, Op1, Query(DL, TLI, DT, AC, CxtI),
1098 static Value *SimplifyUDivInst(Value *Op0, Value *Op1, const Query &Q,
1100 if (Value *V = SimplifyDiv(Instruction::UDiv, Op0, Op1, Q, MaxRecurse))
1106 Value *llvm::SimplifyUDivInst(Value *Op0, Value *Op1, const DataLayout &DL,
1110 return ::SimplifyUDivInst(Op0, Op1, Query(DL, TLI, DT, AC, CxtI),
1114 static Value *SimplifyFDivInst(Value *Op0, Value *Op1, FastMathFlags FMF,
1117 if (match(Op0, m_Undef()))
1118 return Op0;
1127 if (FMF.noNaNs() && FMF.noSignedZeros() && match(Op0, m_AnyZero()))
1128 return Op0;
1132 if (Op0 == Op1)
1133 return ConstantFP::get(Op0->getType(), 1.0);
1138 if ((BinaryOperator::isFNeg(Op0, /*IgnoreZeroSign=*/true) &&
1139 BinaryOperator::getFNegArgument(Op0) == Op1) ||
1141 BinaryOperator::getFNegArgument(Op1) == Op0))
1142 return ConstantFP::get(Op0->getType(), -1.0);
1148 Value *llvm::SimplifyFDivInst(Value *Op0, Value *Op1, FastMathFlags FMF,
1153 return ::SimplifyFDivInst(Op0, Op1, FMF, Query(DL, TLI, DT, AC, CxtI),
1159 static Value *SimplifyRem(Instruction::BinaryOps Opcode, Value *Op0, Value *Op1,
1161 if (Constant *C0 = dyn_cast<Constant>(Op0)) {
1173 if (match(Op0, m_Undef()))
1174 return Constant::getNullValue(Op0->getType());
1177 if (match(Op0, m_Zero()))
1178 return Op0;
1182 return UndefValue::get(Op0->getType());
1186 return Constant::getNullValue(Op0->getType());
1188 if (Op0->getType()->isIntegerTy(1))
1190 return Constant::getNullValue(Op0->getType());
1193 if (Op0 == Op1)
1194 return Constant::getNullValue(Op0->getType());
1198 match(Op0, m_SRem(m_Value(), m_Specific(Op1)))) ||
1200 match(Op0, m_URem(m_Value(), m_Specific(Op1)))))
1201 return Op0;
1205 if (isa<SelectInst>(Op0) || isa<SelectInst>(Op1))
1206 if (Value *V = ThreadBinOpOverSelect(Opcode, Op0, Op1, Q, MaxRecurse))
1211 if (isa<PHINode>(Op0) || isa<PHINode>(Op1))
1212 if (Value *V = ThreadBinOpOverPHI(Opcode, Op0, Op1, Q, MaxRecurse))
1220 static Value *SimplifySRemInst(Value *Op0, Value *Op1, const Query &Q,
1222 if (Value *V = SimplifyRem(Instruction::SRem, Op0, Op1, Q, MaxRecurse))
1228 Value *llvm::SimplifySRemInst(Value *Op0, Value *Op1, const DataLayout &DL,
1232 return ::SimplifySRemInst(Op0, Op1, Query(DL, TLI, DT, AC, CxtI),
1238 static Value *SimplifyURemInst(Value *Op0, Value *Op1, const Query &Q,
1240 if (Value *V = SimplifyRem(Instruction::URem, Op0, Op1, Q, MaxRecurse))
1246 Value *llvm::SimplifyURemInst(Value *Op0, Value *Op1, const DataLayout &DL,
1250 return ::SimplifyURemInst(Op0, Op1, Query(DL, TLI, DT, AC, CxtI),
1254 static Value *SimplifyFRemInst(Value *Op0, Value *Op1, FastMathFlags FMF,
1257 if (match(Op0, m_Undef()))
1258 return Op0;
1267 Op0, m_AnyZero()))
1268 return Op0;
1273 Value *llvm::SimplifyFRemInst(Value *Op0, Value *Op1, FastMathFlags FMF,
1278 return ::SimplifyFRemInst(Op0, Op1, FMF, Query(DL, TLI, DT, AC, CxtI),
1311 static Value *SimplifyShift(unsigned Opcode, Value *Op0, Value *Op1,
1313 if (Constant *C0 = dyn_cast<Constant>(Op0)) {
1321 if (match(Op0, m_Zero()))
1322 return Op0;
1326 return Op0;
1330 return UndefValue::get(Op0->getType());
1334 if (isa<SelectInst>(Op0) || isa<SelectInst>(Op1))
1335 if (Value *V = ThreadBinOpOverSelect(Opcode, Op0, Op1, Q, MaxRecurse))
1340 if (isa<PHINode>(Op0) || isa<PHINode>(Op1))
1341 if (Value *V = ThreadBinOpOverPHI(Opcode, Op0, Op1, Q, MaxRecurse))
1349 static Value *SimplifyRightShift(unsigned Opcode, Value *Op0, Value *Op1,
1352 if (Value *V = SimplifyShift(Opcode, Op0, Op1, Q, MaxRecurse))
1356 if (Op0 == Op1)
1357 return Constant::getNullValue(Op0->getType());
1361 if (match(Op0, m_Undef()))
1362 return isExact ? Op0 : Constant::getNullValue(Op0->getType());
1366 unsigned BitWidth = Op0->getType()->getScalarSizeInBits();
1369 computeKnownBits(Op0, Op0KnownZero, Op0KnownOne, Q.DL, /*Depth=*/0, Q.AC,
1372 return Op0;
1380 static Value *SimplifyShlInst(Value *Op0, Value *Op1, bool isNSW, bool isNUW,
1382 if (Value *V = SimplifyShift(Instruction::Shl, Op0, Op1, Q, MaxRecurse))
1387 if (match(Op0, m_Undef()))
1388 return isNSW || isNUW ? Op0 : Constant::getNullValue(Op0->getType());
1392 if (match(Op0, m_Exact(m_Shr(m_Value(X), m_Specific(Op1)))))
1397 Value *llvm::SimplifyShlInst(Value *Op0, Value *Op1, bool isNSW, bool isNUW,
1401 return ::SimplifyShlInst(Op0, Op1, isNSW, isNUW, Query(DL, TLI, DT, AC, CxtI),
1407 static Value *SimplifyLShrInst(Value *Op0, Value *Op1, bool isExact,
1409 if (Value *V = SimplifyRightShift(Instruction::LShr, Op0, Op1, isExact, Q,
1415 if (match(Op0, m_NUWShl(m_Value(X), m_Specific(Op1))))
1421 Value *llvm::SimplifyLShrInst(Value *Op0, Value *Op1, bool isExact,
1426 return ::SimplifyLShrInst(Op0, Op1, isExact, Query(DL, TLI, DT, AC, CxtI),
1432 static Value *SimplifyAShrInst(Value *Op0, Value *Op1, bool isExact,
1434 if (Value *V = SimplifyRightShift(Instruction::AShr, Op0, Op1, isExact, Q,
1439 if (match(Op0, m_AllOnes()))
1440 return Op0;
1444 if (match(Op0, m_NSWShl(m_Value(X), m_Specific(Op1))))
1448 unsigned NumSignBits = ComputeNumSignBits(Op0, Q.DL, 0, Q.AC, Q.CxtI, Q.DT);
1449 if (NumSignBits == Op0->getType()->getScalarSizeInBits())
1450 return Op0;
1455 Value *llvm::SimplifyAShrInst(Value *Op0, Value *Op1, bool isExact,
1460 return ::SimplifyAShrInst(Op0, Op1, isExact, Query(DL, TLI, DT, AC, CxtI),
1507 static Value *SimplifyAndOfICmps(ICmpInst *Op0, ICmpInst *Op1) {
1512 if (Value *X = simplifyUnsignedRangeCheck(Op0, Op1, /*IsAnd=*/true))
1515 if (!match(Op0, m_ICmp(Pred0, m_Add(m_Value(V), m_ConstantInt(CI1)),
1522 Type *ITy = Op0->getType();
1524 auto *AddInst = cast<BinaryOperator>(Op0->getOperand(0));
1559 static Value *SimplifyAndInst(Value *Op0, Value *Op1, const Query &Q,
1561 if (Constant *CLHS = dyn_cast<Constant>(Op0)) {
1569 std::swap(Op0, Op1);
1574 return Constant::getNullValue(Op0->getType());
1577 if (Op0 == Op1)
1578 return Op0;
1586 return Op0;
1589 if (match(Op0, m_Not(m_Specific(Op1))) ||
1590 match(Op1, m_Not(m_Specific(Op0))))
1591 return Constant::getNullValue(Op0->getType());
1595 if (match(Op0, m_Or(m_Value(A), m_Value(B))) &&
1601 (A == Op0 || B == Op0))
1602 return Op0;
1605 if (match(Op0, m_Neg(m_Specific(Op1))) ||
1606 match(Op1, m_Neg(m_Specific(Op0)))) {
1607 if (isKnownToBeAPowerOfTwo(Op0, Q.DL, /*OrZero*/ true, 0, Q.AC, Q.CxtI,
1609 return Op0;
1615 if (auto *ICILHS = dyn_cast<ICmpInst>(Op0)) {
1625 if (Value *V = SimplifyAssociativeBinOp(Instruction::And, Op0, Op1, Q,
1630 if (Value *V = ExpandBinOp(Instruction::And, Op0, Op1, Instruction::Or,
1635 if (Value *V = ExpandBinOp(Instruction::And, Op0, Op1, Instruction::Xor,
1641 if (isa<SelectInst>(Op0) || isa<SelectInst>(Op1))
1642 if (Value *V = ThreadBinOpOverSelect(Instruction::And, Op0, Op1, Q,
1648 if (isa<PHINode>(Op0) || isa<PHINode>(Op1))
1649 if (Value *V = ThreadBinOpOverPHI(Instruction::And, Op0, Op1, Q,
1656 Value *llvm::SimplifyAndInst(Value *Op0, Value *Op1, const DataLayout &DL,
1660 return ::SimplifyAndInst(Op0, Op1, Query(DL, TLI, DT, AC, CxtI),
1666 static Value *SimplifyOrOfICmps(ICmpInst *Op0, ICmpInst *Op1) {
1671 if (Value *X = simplifyUnsignedRangeCheck(Op0, Op1, /*IsAnd=*/false))
1674 if (!match(Op0, m_ICmp(Pred0, m_Add(m_Value(V), m_ConstantInt(CI1)),
1681 Type *ITy = Op0->getType();
1683 auto *AddInst = cast<BinaryOperator>(Op0->getOperand(0));
1718 static Value *SimplifyOrInst(Value *Op0, Value *Op1, const Query &Q,
1720 if (Constant *CLHS = dyn_cast<Constant>(Op0)) {
1728 std::swap(Op0, Op1);
1733 return Constant::getAllOnesValue(Op0->getType());
1736 if (Op0 == Op1)
1737 return Op0;
1741 return Op0;
1748 if (match(Op0, m_Not(m_Specific(Op1))) ||
1749 match(Op1, m_Not(m_Specific(Op0))))
1750 Op0->getType());
1754 if (match(Op0, m_And(m_Value(A), m_Value(B))) &&
1760 (A == Op0 || B == Op0))
1761 return Op0;
1764 if (match(Op0, m_Not(m_And(m_Value(A), m_Value(B)))) &&
1770 (A == Op0 || B == Op0))
1771 return Constant::getAllOnesValue(Op0->getType());
1773 if (auto *ICILHS = dyn_cast<ICmpInst>(Op0)) {
1783 if (Value *V = SimplifyAssociativeBinOp(Instruction::Or, Op0, Op1, Q,
1788 if (Value *V = ExpandBinOp(Instruction::Or, Op0, Op1, Instruction::And, Q,
1794 if (isa<SelectInst>(Op0) || isa<SelectInst>(Op1))
1795 if (Value *V = ThreadBinOpOverSelect(Instruction::Or, Op0, Op1, Q,
1801 if (match(Op0, m_And(m_Value(A), m_Value(C))) &&
1837 if (isa<PHINode>(Op0) || isa<PHINode>(Op1))
1838 if (Value *V = ThreadBinOpOverPHI(Instruction::Or, Op0, Op1, Q, MaxRecurse))
1844 Value *llvm::SimplifyOrInst(Value *Op0, Value *Op1, const DataLayout &DL,
1848 return ::SimplifyOrInst(Op0, Op1, Query(DL, TLI, DT, AC, CxtI),
1854 static Value *SimplifyXorInst(Value *Op0, Value *Op1, const Query &Q,
1856 if (Constant *CLHS = dyn_cast<Constant>(Op0)) {
1864 std::swap(Op0, Op1);
1873 return Op0;
1876 if (Op0 == Op1)
1877 return Constant::getNullValue(Op0->getType());
1880 if (match(Op0, m_Not(m_Specific(Op1))) ||
1881 match(Op1, m_Not(m_Specific(Op0))))
1882 return Constant::getAllOnesValue(Op0->getType());
1885 if (Value *V = SimplifyAssociativeBinOp(Instruction::Xor, Op0, Op1, Q,
1901 Value *llvm::SimplifyXorInst(Value *Op0, Value *Op1, const DataLayout &DL,
1905 return ::SimplifyXorInst(Op0, Op1, Query(DL, TLI, DT, AC, CxtI),