Home | History | Annotate | Download | only in Analysis

Lines Matching defs:Op1

160   if (BinaryOperator *Op1 = dyn_cast<BinaryOperator>(RHS))
161 if (Op1->getOpcode() == OpcodeToExpand) {
163 Value *A = LHS, *B = Op1->getOperand(0), *C = Op1->getOperand(1);
198 BinaryOperator *Op1 = dyn_cast<BinaryOperator>(RHS);
201 !Op1 || Op1->getOpcode() != OpcodeToExtract)
206 Value *C = Op1->getOperand(0), *D = Op1->getOperand(1);
269 BinaryOperator *Op1 = dyn_cast<BinaryOperator>(RHS);
291 if (Op1 && Op1->getOpcode() == Opcode) {
293 Value *B = Op1->getOperand(0);
294 Value *C = Op1->getOperand(1);
333 if (Op1 && Op1->getOpcode() == Opcode) {
335 Value *B = Op1->getOperand(0);
336 Value *C = Op1->getOperand(1);
592 static Value *SimplifyAddInst(Value *Op0, Value *Op1, bool isNSW, bool isNUW,
595 if (Constant *CRHS = dyn_cast<Constant>(Op1)) {
602 std::swap(Op0, Op1);
606 if (match(Op1, m_Undef()))
607 return Op1;
610 if (match(Op1, m_Zero()))
617 if (match(Op1, m_Sub(m_Value(Y), m_Specific(Op0))) ||
618 match(Op0, m_Sub(m_Value(Y), m_Specific(Op1))))
622 if (match(Op0, m_Not(m_Specific(Op1))) ||
623 match(Op1, m_Not(m_Specific(Op0))))
628 if (Value *V = SimplifyXorInst(Op0, Op1, Q, MaxRecurse-1))
632 if (Value *V = SimplifyAssociativeBinOp(Instruction::Add, Op0, Op1, Q,
637 if (Value *V = FactorizeBinOp(Instruction::Add, Op0, Op1, Instruction::Mul,
653 Value *llvm::SimplifyAddInst(Value *Op0, Value *Op1, bool isNSW, bool isNUW,
656 return ::SimplifyAddInst(Op0, Op1, isNSW, isNUW, Query (TD, TLI, DT),
733 static Value *SimplifySubInst(Value *Op0, Value *Op1, bool isNSW, bool isNUW,
736 if (Constant *CRHS = dyn_cast<Constant>(Op1)) {
744 if (match(Op0, m_Undef()) || match(Op1, m_Undef()))
748 if (match(Op1, m_Zero()))
752 if (Op0 == Op1)
758 if (match(Op0, m_Mul(m_Specific(Op1), m_ConstantInt<2>())) ||
759 match(Op0, m_Shl(m_Specific(Op1), m_One())))
760 return Op1;
764 Value *Y = 0, *Z = Op1;
787 if (MaxRecurse && match(Op1, m_Add(m_Value(Y), m_Value(Z)))) { // X - (Y + Z)
809 if (MaxRecurse && match(Op1, m_Sub(m_Value(X), m_Value(Y)))) // Z - (X - Y)
821 match(Op1, m_Trunc(m_Value(Y))))
832 match(Op1, m_PtrToInt(m_Value(Y))))
837 if (Value *V = FactorizeBinOp(Instruction::Sub, Op0, Op1, Instruction::Mul,
843 if (Value *V = SimplifyXorInst(Op0, Op1, Q, MaxRecurse-1))
858 Value *llvm::SimplifySubInst(Value *Op0, Value *Op1, bool isNSW, bool isNUW,
861 return ::SimplifySubInst(Op0, Op1, isNSW, isNUW, Query (TD, TLI, DT),
867 static Value *SimplifyFAddInst(Value *Op0, Value *Op1, FastMathFlags FMF,
870 if (Constant *CRHS = dyn_cast<Constant>(Op1)) {
877 std::swap(Op0, Op1);
881 if (match(Op1, m_NegZero()))
885 if (match(Op1, m_Zero()) &&
893 if (match(Op1, m_FSub(m_AnyZero(), m_Specific(Op0))))
894 SubOp = Op1;
895 else if (match(Op0, m_FSub(m_AnyZero(), m_Specific(Op1))))
909 static Value *SimplifyFSubInst(Value *Op0, Value *Op1, FastMathFlags FMF,
912 if (Constant *CRHS = dyn_cast<Constant>(Op1)) {
920 if (match(Op1, m_Zero()))
924 if (match(Op1, m_NegZero()) &&
931 if (match(Op1, m_FSub(m_NegZero(), m_Value(X))))
933 if (FMF.noSignedZeros() && match(Op1, m_FSub(m_AnyZero(), m_Value(X))))
938 if (FMF.noNaNs() && FMF.noInfs() && Op0 == Op1)
945 static Value *SimplifyFMulInst(Value *Op0, Value *Op1,
950 if (Constant *CRHS = dyn_cast<Constant>(Op1)) {
957 std::swap(Op0, Op1);
961 if (match(Op1, m_FPOne()))
965 if (FMF.noNaNs() && FMF.noSignedZeros() && match(Op1, m_AnyZero()))
966 return Op1;
973 static Value *SimplifyMulInst(Value *Op0, Value *Op1, const Query &Q,
976 if (Constant *CRHS = dyn_cast<Constant>(Op1)) {
983 std::swap(Op0, Op1);
987 if (match(Op1, m_Undef()))
991 if (match(Op1, m_Zero()))
992 return Op1;
995 if (match(Op1, m_One()))
1000 if (match(Op0, m_Exact(m_IDiv(m_Value(X), m_Specific(Op1)))) || // (X / Y) * Y
1001 match(Op1, m_Exact(m_IDiv(m_Value(X), m_Specific(Op0))))) // Y * (X / Y)
1006 if (Value *V = SimplifyAndInst(Op0, Op1, Q, MaxRecurse-1))
1010 if (Value *V = SimplifyAssociativeBinOp(Instruction::Mul, Op0, Op1, Q,
1015 if (Value *V = ExpandBinOp(Instruction::Mul, Op0, Op1, Instruction::Add,
1021 if (isa<SelectInst>(Op0) || isa<SelectInst>(Op1))
1022 if (Value *V = ThreadBinOpOverSelect(Instruction::Mul, Op0, Op1, Q,
1028 if (isa<PHINode>(Op0) || isa<PHINode>(Op1))
1029 if (Value *V = ThreadBinOpOverPHI(Instruction::Mul, Op0, Op1, Q,
1036 Value *llvm::SimplifyFAddInst(Value *Op0, Value *Op1, FastMathFlags FMF,
1039 return ::SimplifyFAddInst(Op0, Op1, FMF, Query (TD, TLI, DT), RecursionLimit);
1042 Value *llvm::SimplifyFSubInst(Value *Op0, Value *Op1, FastMathFlags FMF,
1045 return ::SimplifyFSubInst(Op0, Op1, FMF, Query (TD, TLI, DT), RecursionLimit);
1048 Value *llvm::SimplifyFMulInst(Value *Op0, Value *Op1,
1053 return ::SimplifyFMulInst(Op0, Op1, FMF, Query (TD, TLI, DT), RecursionLimit);
1056 Value *llvm::SimplifyMulInst(Value *Op0, Value *Op1, const DataLayout *TD,
1059 return ::SimplifyMulInst(Op0, Op1, Query (TD, TLI, DT), RecursionLimit);
1064 static Value *SimplifyDiv(Instruction::BinaryOps Opcode, Value *Op0, Value *Op1,
1067 if (Constant *C1 = dyn_cast<Constant>(Op1)) {
1076 if (match(Op1, m_Undef()))
1077 return Op1;
1088 if (match(Op1, m_One()))
1096 if (Op0 == Op1)
1101 if (match(Op0, m_Mul(m_Value(X), m_Value(Y))) && (X == Op1 || Y == Op1)) {
1102 if (Y != Op1) std::swap(X, Y); // Ensure expression is (X * Y) / Y, Y = Op1
1115 if ((isSigned && match(Op0, m_SRem(m_Value(), m_Specific(Op1)))) ||
1116 (!isSigned && match(Op0, m_URem(m_Value(), m_Specific(Op1)))))
1121 if (isa<SelectInst>(Op0) || isa<SelectInst>(Op1))
1122 if (Value *V = ThreadBinOpOverSelect(Opcode, Op0, Op1, Q, MaxRecurse))
1127 if (isa<PHINode>(Op0) || isa<PHINode>(Op1))
1128 if (Value *V = ThreadBinOpOverPHI(Opcode, Op0, Op1, Q, MaxRecurse))
1136 static Value *SimplifySDivInst(Value *Op0, Value *Op1, const Query &Q,
1138 if (Value *V = SimplifyDiv(Instruction::SDiv, Op0, Op1, Q, MaxRecurse))
1144 Value *llvm::SimplifySDivInst(Value *Op0, Value *Op1, const DataLayout *TD,
1147 return ::SimplifySDivInst(Op0, Op1, Query (TD, TLI, DT), RecursionLimit);
1152 static Value *SimplifyUDivInst(Value *Op0, Value *Op1, const Query &Q,
1154 if (Value *V = SimplifyDiv(Instruction::UDiv, Op0, Op1, Q, MaxRecurse))
1160 Value *llvm::SimplifyUDivInst(Value *Op0, Value *Op1, const DataLayout *TD,
1163 return ::SimplifyUDivInst(Op0, Op1, Query (TD, TLI, DT), RecursionLimit);
1166 static Value *SimplifyFDivInst(Value *Op0, Value *Op1, const Query &Q,
1173 if (match(Op1, m_Undef()))
1174 return Op1;
1179 Value *llvm::SimplifyFDivInst(Value *Op0, Value *Op1, const DataLayout *TD,
1182 return ::SimplifyFDivInst(Op0, Op1, Query (TD, TLI, DT), RecursionLimit);
1187 static Value *SimplifyRem(Instruction::BinaryOps Opcode, Value *Op0, Value *Op1,
1190 if (Constant *C1 = dyn_cast<Constant>(Op1)) {
1197 if (match(Op1, m_Undef()))
1198 return Op1;
1209 if (match(Op1, m_Zero()))
1213 if (match(Op1, m_One()))
1221 if (Op0 == Op1)
1226 if (isa<SelectInst>(Op0) || isa<SelectInst>(Op1))
1227 if (Value *V = ThreadBinOpOverSelect(Opcode, Op0, Op1, Q, MaxRecurse))
1232 if (isa<PHINode>(Op0) || isa<PHINode>(Op1))
1233 if (Value *V = ThreadBinOpOverPHI(Opcode, Op0, Op1, Q, MaxRecurse))
1241 static Value *SimplifySRemInst(Value *Op0, Value *Op1, const Query &Q,
1243 if (Value *V = SimplifyRem(Instruction::SRem, Op0, Op1, Q, MaxRecurse))
1249 Value *llvm::SimplifySRemInst(Value *Op0, Value *Op1, const DataLayout *TD,
1252 return ::SimplifySRemInst(Op0, Op1, Query (TD, TLI, DT), RecursionLimit);
1257 static Value *SimplifyURemInst(Value *Op0, Value *Op1, const Query &Q,
1259 if (Value *V = SimplifyRem(Instruction::URem, Op0, Op1, Q, MaxRecurse))
1265 Value *llvm::SimplifyURemInst(Value *Op0, Value *Op1, const DataLayout *TD,
1268 return ::SimplifyURemInst(Op0, Op1, Query (TD, TLI, DT), RecursionLimit);
1271 static Value *SimplifyFRemInst(Value *Op0, Value *Op1, const Query &,
1278 if (match(Op1, m_Undef()))
1279 return Op1;
1284 Value *llvm::SimplifyFRemInst(Value *Op0, Value *Op1, const DataLayout *TD,
1287 return ::SimplifyFRemInst(Op0, Op1, Query (TD, TLI, DT), RecursionLimit);
1292 static Value *SimplifyShift(unsigned Opcode, Value *Op0, Value *Op1,
1295 if (Constant *C1 = dyn_cast<Constant>(Op1)) {
1306 if (match(Op1, m_Zero()))
1310 if (match(Op1, m_Undef()))
1311 return Op1;
1314 if (ConstantInt *CI = dyn_cast<ConstantInt>(Op1))
1321 if (isa<SelectInst>(Op0) || isa<SelectInst>(Op1))
1322 if (Value *V = ThreadBinOpOverSelect(Opcode, Op0, Op1, Q, MaxRecurse))
1327 if (isa<PHINode>(Op0) || isa<PHINode>(Op1))
1328 if (Value *V = ThreadBinOpOverPHI(Opcode, Op0, Op1, Q, MaxRecurse))
1336 static Value *SimplifyShlInst(Value *Op0, Value *Op1, bool isNSW, bool isNUW,
1338 if (Value *V = SimplifyShift(Instruction::Shl, Op0, Op1, Q, MaxRecurse))
1347 if (match(Op0, m_Exact(m_Shr(m_Value(X), m_Specific(Op1)))))
1352 Value *llvm::SimplifyShlInst(Value *Op0, Value *Op1, bool isNSW, bool isNUW,
1355 return ::SimplifyShlInst(Op0, Op1, isNSW, isNUW, Query (TD, TLI, DT),
1361 static Value *SimplifyLShrInst(Value *Op0, Value *Op1, bool isExact,
1363 if (Value *V = SimplifyShift(Instruction::LShr, Op0, Op1, Q, MaxRecurse))
1372 if (match(Op0, m_Shl(m_Value(X), m_Specific(Op1))) &&
1379 Value *llvm::SimplifyLShrInst(Value *Op0, Value *Op1, bool isExact,
1383 return ::SimplifyLShrInst(Op0, Op1, isExact, Query (TD, TLI, DT),
1389 static Value *SimplifyAShrInst(Value *Op0, Value *Op1, bool isExact,
1391 if (Value *V = SimplifyShift(Instruction::AShr, Op0, Op1, Q, MaxRecurse))
1404 if (match(Op0, m_Shl(m_Value(X), m_Specific(Op1))) &&
1411 Value *llvm::SimplifyAShrInst(Value *Op0, Value *Op1, bool isExact,
1415 return ::SimplifyAShrInst(Op0, Op1, isExact, Query (TD, TLI, DT),
1421 static Value *SimplifyAndInst(Value *Op0, Value *Op1, const Query &Q,
1424 if (Constant *CRHS = dyn_cast<Constant>(Op1)) {
1431 std::swap(Op0, Op1);
1435 if (match(Op1, m_Undef()))
1439 if (Op0 == Op1)
1443 if (match(Op1, m_Zero()))
1444 return Op1;
1447 if (match(Op1, m_AllOnes()))
1451 if (match(Op0, m_Not(m_Specific(Op1))) ||
1452 match(Op1, m_Not(m_Specific(Op0))))
1458 (A == Op1 || B == Op1))
1459 return Op1;
1462 if (match(Op1, m_Or(m_Value(A), m_Value(B))) &&
1467 if (match(Op0, m_Neg(m_Specific(Op1))) ||
1468 match(Op1, m_Neg(m_Specific(Op0)))) {
1471 if (isKnownToBeAPowerOfTwo(Op1, /*OrZero*/true))
1472 return Op1;
1476 if (Value *V = SimplifyAssociativeBinOp(Instruction::And, Op0, Op1, Q,
1481 if (Value *V = ExpandBinOp(Instruction::And, Op0, Op1, Instruction::Or,
1486 if (Value *V = ExpandBinOp(Instruction::And, Op0, Op1, Instruction::Xor,
1491 if (Value *V = FactorizeBinOp(Instruction::And, Op0, Op1, Instruction::Or,
1497 if (isa<SelectInst>(Op0) || isa<SelectInst>(Op1))
1498 if (Value *V = ThreadBinOpOverSelect(Instruction::And, Op0, Op1, Q,
1504 if (isa<PHINode>(Op0) || isa<PHINode>(Op1))
1505 if (Value *V = ThreadBinOpOverPHI(Instruction::And, Op0, Op1, Q,
1512 Value *llvm::SimplifyAndInst(Value *Op0, Value *Op1, const DataLayout *TD,
1515 return ::SimplifyAndInst(Op0, Op1, Query (TD, TLI, DT), RecursionLimit);
1520 static Value *SimplifyOrInst(Value *Op0, Value *Op1, const Query &Q,
1523 if (Constant *CRHS = dyn_cast<Constant>(Op1)) {
1530 std::swap(Op0, Op1);
1534 if (match(Op1, m_Undef()))
1538 if (Op0 == Op1)
1542 if (match(Op1, m_Zero()))
1546 if (match(Op1, m_AllOnes()))
1547 return Op1;
1550 if (match(Op0, m_Not(m_Specific(Op1))) ||
1551 match(Op1, m_Not(m_Specific(Op0))))
1557 (A == Op1 || B == Op1))
1558 return Op1;
1561 if (match(Op1, m_And(m_Value(A), m_Value(B))) &&
1567 (A == Op1 || B == Op1))
1568 return Constant::getAllOnesValue(Op1->getType());
1571 if (match(Op1, m_Not(m_And(m_Value(A), m_Value(B)))) &&
1576 if (Value *V = SimplifyAssociativeBinOp(Instruction::Or, Op0, Op1, Q,
1581 if (Value *V = ExpandBinOp(Instruction::Or, Op0, Op1, Instruction::And, Q,
1586 if (Value *V = FactorizeBinOp(Instruction::Or, Op0, Op1, Instruction::And,
1592 if (isa<SelectInst>(Op0) || isa<SelectInst>(Op1))
1593 if (Value *V = ThreadBinOpOverSelect(Instruction::Or, Op0, Op1, Q,
1599 if (isa<PHINode>(Op0) || isa<PHINode>(Op1))
1600 if (Value *V = ThreadBinOpOverPHI(Instruction::Or, Op0, Op1, Q, MaxRecurse))
1606 Value *llvm::SimplifyOrInst(Value *Op0, Value *Op1, const DataLayout *TD,
1609 return ::SimplifyOrInst(Op0, Op1, Query (TD, TLI, DT), RecursionLimit);
1614 static Value *SimplifyXorInst(Value *Op0, Value *Op1, const Query &Q,
1617 if (Constant *CRHS = dyn_cast<Constant>(Op1)) {
1624 std::swap(Op0, Op1);
1628 if (match(Op1, m_Undef()))
1629 return Op1;
1632 if (match(Op1, m_Zero()))
1636 if (Op0 == Op1)
1640 if (match(Op0, m_Not(m_Specific(Op1))) ||
1641 match(Op1, m_Not(m_Specific(Op0))))
1645 if (Value *V = SimplifyAssociativeBinOp(Instruction::Xor, Op0, Op1, Q,
1650 if (Value *V = FactorizeBinOp(Instruction::Xor, Op0, Op1, Instruction::And,
1666 Value *llvm::SimplifyXorInst(Value *Op0, Value *Op1, const DataLayout *TD,
1669 return ::SimplifyXorInst(Op0, Op1, Query (TD, TLI, DT), RecursionLimit);