Lines Matching refs:Q

67                                const SimplifyQuery &Q, unsigned MaxRecurse);
153 const SimplifyQuery &Q, unsigned MaxRecurse, in simplifyCmpSelCase() argument
155 Value *SimplifiedCmp = simplifyCmpInst(Pred, LHS, RHS, Q, MaxRecurse); in simplifyCmpSelCase()
170 const SimplifyQuery &Q, in simplifyCmpSelTrueCase() argument
172 return simplifyCmpSelCase(Pred, LHS, RHS, Cond, Q, MaxRecurse, in simplifyCmpSelTrueCase()
179 const SimplifyQuery &Q, in simplifyCmpSelFalseCase() argument
181 return simplifyCmpSelCase(Pred, LHS, RHS, Cond, Q, MaxRecurse, in simplifyCmpSelFalseCase()
189 const SimplifyQuery &Q, in handleOtherCmpSelSimplifications() argument
198 if (Value *V = simplifyAndInst(Cond, TCmp, Q, MaxRecurse)) in handleOtherCmpSelSimplifications()
203 if (Value *V = simplifyOrInst(Cond, FCmp, Q, MaxRecurse)) in handleOtherCmpSelSimplifications()
209 Cond, Constant::getAllOnesValue(Cond->getType()), Q, MaxRecurse)) in handleOtherCmpSelSimplifications()
239 const SimplifyQuery &Q, unsigned MaxRecurse) { in expandBinOp() argument
245 simplifyBinOp(Opcode, B0, OtherOp, Q.getWithoutUndef(), MaxRecurse); in expandBinOp()
249 simplifyBinOp(Opcode, B1, OtherOp, Q.getWithoutUndef(), MaxRecurse); in expandBinOp()
261 Value *S = simplifyBinOp(OpcodeToExpand, L, R, Q, MaxRecurse); in expandBinOp()
274 const SimplifyQuery &Q, in expandCommutativeBinOp() argument
280 if (Value *V = expandBinOp(Opcode, L, R, OpcodeToExpand, Q, MaxRecurse)) in expandCommutativeBinOp()
282 if (Value *V = expandBinOp(Opcode, R, L, OpcodeToExpand, Q, MaxRecurse)) in expandCommutativeBinOp()
291 const SimplifyQuery &Q, in simplifyAssociativeBinOp() argument
309 if (Value *V = simplifyBinOp(Opcode, B, C, Q, MaxRecurse)) { in simplifyAssociativeBinOp()
315 if (Value *W = simplifyBinOp(Opcode, A, V, Q, MaxRecurse)) { in simplifyAssociativeBinOp()
329 if (Value *V = simplifyBinOp(Opcode, A, B, Q, MaxRecurse)) { in simplifyAssociativeBinOp()
335 if (Value *W = simplifyBinOp(Opcode, V, C, Q, MaxRecurse)) { in simplifyAssociativeBinOp()
353 if (Value *V = simplifyBinOp(Opcode, C, A, Q, MaxRecurse)) { in simplifyAssociativeBinOp()
359 if (Value *W = simplifyBinOp(Opcode, V, B, Q, MaxRecurse)) { in simplifyAssociativeBinOp()
373 if (Value *V = simplifyBinOp(Opcode, C, A, Q, MaxRecurse)) { in simplifyAssociativeBinOp()
379 if (Value *W = simplifyBinOp(Opcode, B, V, Q, MaxRecurse)) { in simplifyAssociativeBinOp()
394 Value *RHS, const SimplifyQuery &Q, in threadBinOpOverSelect() argument
412 TV = simplifyBinOp(Opcode, SI->getTrueValue(), RHS, Q, MaxRecurse); in threadBinOpOverSelect()
413 FV = simplifyBinOp(Opcode, SI->getFalseValue(), RHS, Q, MaxRecurse); in threadBinOpOverSelect()
415 TV = simplifyBinOp(Opcode, LHS, SI->getTrueValue(), Q, MaxRecurse); in threadBinOpOverSelect()
416 FV = simplifyBinOp(Opcode, LHS, SI->getFalseValue(), Q, MaxRecurse); in threadBinOpOverSelect()
425 if (TV && Q.isUndefValue(TV)) in threadBinOpOverSelect()
427 if (FV && Q.isUndefValue(FV)) in threadBinOpOverSelect()
473 Value *RHS, const SimplifyQuery &Q, in threadCmpOverSelect() argument
492 Value *TCmp = simplifyCmpSelTrueCase(Pred, TV, RHS, Cond, Q, MaxRecurse); in threadCmpOverSelect()
497 Value *FCmp = simplifyCmpSelFalseCase(Pred, FV, RHS, Cond, Q, MaxRecurse); in threadCmpOverSelect()
509 return handleOtherCmpSelSimplifications(TCmp, FCmp, Cond, Q, MaxRecurse); in threadCmpOverSelect()
519 Value *RHS, const SimplifyQuery &Q, in threadBinOpOverPHI() argument
529 if (!valueDominatesPHI(RHS, PI, Q.DT)) in threadBinOpOverPHI()
535 if (!valueDominatesPHI(LHS, PI, Q.DT)) in threadBinOpOverPHI()
548 Q.getWithInstruction(InTI), MaxRecurse) in threadBinOpOverPHI()
550 Q.getWithInstruction(InTI), MaxRecurse); in threadBinOpOverPHI()
566 const SimplifyQuery &Q, unsigned MaxRecurse) { in threadCmpOverPHI() argument
580 if (!valueDominatesPHI(RHS, PI, Q.DT)) in threadCmpOverPHI()
594 Value *V = simplifyCmpInst(Pred, Incoming, RHS, Q.getWithInstruction(InTI), in threadCmpOverPHI()
608 const SimplifyQuery &Q) { in foldOrCommuteConstant() argument
619 if (Q.CxtI != nullptr) in foldOrCommuteConstant()
620 return ConstantFoldFPInstOperands(Opcode, CLHS, CRHS, Q.DL, Q.CxtI); in foldOrCommuteConstant()
622 return ConstantFoldBinaryOpOperands(Opcode, CLHS, CRHS, Q.DL); in foldOrCommuteConstant()
635 const SimplifyQuery &Q, unsigned MaxRecurse) { in simplifyAddInst() argument
636 if (Constant *C = foldOrCommuteConstant(Instruction::Add, Op0, Op1, Q)) in simplifyAddInst()
644 if (Q.isUndefValue(Op1)) in simplifyAddInst()
681 if (Value *V = simplifyXorInst(Op0, Op1, Q, MaxRecurse - 1)) in simplifyAddInst()
686 simplifyAssociativeBinOp(Instruction::Add, Op0, Op1, Q, MaxRecurse)) in simplifyAddInst()
753 const SimplifyQuery &Q, unsigned MaxRecurse) { in simplifyByDomEq() argument
759 isImpliedByDomCondition(CmpInst::ICMP_EQ, Op0, Op1, Q.CxtI, Q.DL); in simplifyByDomEq()
787 const SimplifyQuery &Q, unsigned MaxRecurse) { in simplifySubInst() argument
788 if (Constant *C = foldOrCommuteConstant(Instruction::Sub, Op0, Op1, Q)) in simplifySubInst()
798 if (Q.isUndefValue(Op0) || Q.isUndefValue(Op1)) in simplifySubInst()
815 KnownBits Known = computeKnownBits(Op1, /* Depth */ 0, Q); in simplifySubInst()
832 if (Value *V = simplifyBinOp(Instruction::Sub, Y, Z, Q, MaxRecurse - 1)) in simplifySubInst()
834 if (Value *W = simplifyBinOp(Instruction::Add, X, V, Q, MaxRecurse - 1)) { in simplifySubInst()
840 if (Value *V = simplifyBinOp(Instruction::Sub, X, Z, Q, MaxRecurse - 1)) in simplifySubInst()
842 if (Value *W = simplifyBinOp(Instruction::Add, Y, V, Q, MaxRecurse - 1)) { in simplifySubInst()
854 if (Value *V = simplifyBinOp(Instruction::Sub, X, Y, Q, MaxRecurse - 1)) in simplifySubInst()
856 if (Value *W = simplifyBinOp(Instruction::Sub, V, Z, Q, MaxRecurse - 1)) { in simplifySubInst()
862 if (Value *V = simplifyBinOp(Instruction::Sub, X, Z, Q, MaxRecurse - 1)) in simplifySubInst()
864 if (Value *W = simplifyBinOp(Instruction::Sub, V, Y, Q, MaxRecurse - 1)) { in simplifySubInst()
876 if (Value *V = simplifyBinOp(Instruction::Sub, Z, X, Q, MaxRecurse - 1)) in simplifySubInst()
878 if (Value *W = simplifyBinOp(Instruction::Add, V, Y, Q, MaxRecurse - 1)) { in simplifySubInst()
889 if (Value *V = simplifyBinOp(Instruction::Sub, X, Y, Q, MaxRecurse - 1)) in simplifySubInst()
892 Q, MaxRecurse - 1)) in simplifySubInst()
898 if (Constant *Result = computePointerDifference(Q.DL, X, Y)) in simplifySubInst()
900 Q.DL); in simplifySubInst()
904 if (Value *V = simplifyXorInst(Op0, Op1, Q, MaxRecurse - 1)) in simplifySubInst()
916 if (Value *V = simplifyByDomEq(Instruction::Sub, Op0, Op1, Q, MaxRecurse)) in simplifySubInst()
923 const SimplifyQuery &Q) { in simplifySubInst() argument
924 return ::simplifySubInst(Op0, Op1, IsNSW, IsNUW, Q, RecursionLimit); in simplifySubInst()
930 const SimplifyQuery &Q, unsigned MaxRecurse) { in simplifyMulInst() argument
931 if (Constant *C = foldOrCommuteConstant(Instruction::Mul, Op0, Op1, Q)) in simplifyMulInst()
940 if (Q.isUndefValue(Op1) || match(Op1, m_Zero())) in simplifyMulInst()
949 if (Q.IIQ.UseInstrInfo && in simplifyMulInst()
963 if (Value *V = simplifyAndInst(Op0, Op1, Q, MaxRecurse - 1)) in simplifyMulInst()
969 simplifyAssociativeBinOp(Instruction::Mul, Op0, Op1, Q, MaxRecurse)) in simplifyMulInst()
974 Instruction::Add, Q, MaxRecurse)) in simplifyMulInst()
981 threadBinOpOverSelect(Instruction::Mul, Op0, Op1, Q, MaxRecurse)) in simplifyMulInst()
988 threadBinOpOverPHI(Instruction::Mul, Op0, Op1, Q, MaxRecurse)) in simplifyMulInst()
995 const SimplifyQuery &Q) { in simplifyMulInst() argument
996 return ::simplifyMulInst(Op0, Op1, IsNSW, IsNUW, Q, RecursionLimit); in simplifyMulInst()
1003 const SimplifyQuery &Q, unsigned MaxRecurse) { in isICmpTrue() argument
1004 Value *V = simplifyICmpInst(Pred, LHS, RHS, Q, MaxRecurse); in isICmpTrue()
1011 static bool isDivZero(Value *X, Value *Y, const SimplifyQuery &Q, in isDivZero() argument
1037 if (isICmpTrue(CmpInst::ICMP_SLT, Y, NegDividendC, Q, MaxRecurse) || in isDivZero()
1038 isICmpTrue(CmpInst::ICMP_SGT, Y, PosDividendC, Q, MaxRecurse)) in isDivZero()
1046 return isICmpTrue(CmpInst::ICMP_NE, X, Y, Q, MaxRecurse); in isDivZero()
1053 if (isICmpTrue(CmpInst::ICMP_SGT, X, NegDivisorC, Q, MaxRecurse) && in isDivZero()
1054 isICmpTrue(CmpInst::ICMP_SLT, X, PosDivisorC, Q, MaxRecurse)) in isDivZero()
1067 computeKnownBits(X, /* Depth */ 0, Q).getMaxValue().ult(*C)) in isDivZero()
1072 return isICmpTrue(ICmpInst::ICMP_ULT, X, Y, Q, MaxRecurse); in isDivZero()
1078 Value *Op1, const SimplifyQuery &Q, in simplifyDivRem() argument
1087 if (Q.isUndefValue(Op1) || isa<PoisonValue>(Op1)) in simplifyDivRem()
1104 if (Elt && (Elt->isNullValue() || Q.isUndefValue(Elt))) in simplifyDivRem()
1116 if (Q.isUndefValue(Op0)) in simplifyDivRem()
1129 KnownBits Known = computeKnownBits(Op1, /* Depth */ 0, Q); in simplifyDivRem()
1154 if ((IsSigned && Q.IIQ.hasNoSignedWrap(Mul)) || in simplifyDivRem()
1155 (!IsSigned && Q.IIQ.hasNoUnsignedWrap(Mul)) || in simplifyDivRem()
1162 if (isDivZero(Op0, Op1, Q, MaxRecurse, IsSigned)) in simplifyDivRem()
1165 if (Value *V = simplifyByDomEq(Opcode, Op0, Op1, Q, MaxRecurse)) in simplifyDivRem()
1171 if (Value *V = threadBinOpOverSelect(Opcode, Op0, Op1, Q, MaxRecurse)) in simplifyDivRem()
1177 if (Value *V = threadBinOpOverPHI(Opcode, Op0, Op1, Q, MaxRecurse)) in simplifyDivRem()
1185 bool IsExact, const SimplifyQuery &Q, in simplifyDiv() argument
1187 if (Constant *C = foldOrCommuteConstant(Opcode, Op0, Op1, Q)) in simplifyDiv()
1190 if (Value *V = simplifyDivRem(Opcode, Op0, Op1, Q, MaxRecurse)) in simplifyDiv()
1199 KnownBits KnownOp0 = computeKnownBits(Op0, /* Depth */ 0, Q); in simplifyDiv()
1220 const SimplifyQuery &Q, unsigned MaxRecurse) { in simplifyRem() argument
1221 if (Constant *C = foldOrCommuteConstant(Opcode, Op0, Op1, Q)) in simplifyRem()
1224 if (Value *V = simplifyDivRem(Opcode, Op0, Op1, Q, MaxRecurse)) in simplifyRem()
1228 if (Q.IIQ.UseInstrInfo && in simplifyRem()
1241 const SimplifyQuery &Q, unsigned MaxRecurse) { in simplifySDivInst() argument
1246 return simplifyDiv(Instruction::SDiv, Op0, Op1, IsExact, Q, MaxRecurse); in simplifySDivInst()
1250 const SimplifyQuery &Q) { in simplifySDivInst() argument
1251 return ::simplifySDivInst(Op0, Op1, IsExact, Q, RecursionLimit); in simplifySDivInst()
1257 const SimplifyQuery &Q, unsigned MaxRecurse) { in simplifyUDivInst() argument
1258 return simplifyDiv(Instruction::UDiv, Op0, Op1, IsExact, Q, MaxRecurse); in simplifyUDivInst()
1262 const SimplifyQuery &Q) { in simplifyUDivInst() argument
1263 return ::simplifyUDivInst(Op0, Op1, IsExact, Q, RecursionLimit); in simplifyUDivInst()
1268 static Value *simplifySRemInst(Value *Op0, Value *Op1, const SimplifyQuery &Q, in simplifySRemInst() argument
1280 return simplifyRem(Instruction::SRem, Op0, Op1, Q, MaxRecurse); in simplifySRemInst()
1283 Value *llvm::simplifySRemInst(Value *Op0, Value *Op1, const SimplifyQuery &Q) { in simplifySRemInst() argument
1284 return ::simplifySRemInst(Op0, Op1, Q, RecursionLimit); in simplifySRemInst()
1289 static Value *simplifyURemInst(Value *Op0, Value *Op1, const SimplifyQuery &Q, in simplifyURemInst() argument
1291 return simplifyRem(Instruction::URem, Op0, Op1, Q, MaxRecurse); in simplifyURemInst()
1294 Value *llvm::simplifyURemInst(Value *Op0, Value *Op1, const SimplifyQuery &Q) { in simplifyURemInst() argument
1295 return ::simplifyURemInst(Op0, Op1, Q, RecursionLimit); in simplifyURemInst()
1299 static bool isPoisonShift(Value *Amount, const SimplifyQuery &Q) { in isPoisonShift() argument
1305 if (Q.isUndefValue(C)) in isPoisonShift()
1320 if (!isPoisonShift(C->getAggregateElement(I), Q)) in isPoisonShift()
1331 Value *Op1, bool IsNSW, const SimplifyQuery &Q, in simplifyShift() argument
1333 if (Constant *C = foldOrCommuteConstant(Opcode, Op0, Op1, Q)) in simplifyShift()
1353 if (isPoisonShift(Op1, Q)) in simplifyShift()
1359 if (Value *V = threadBinOpOverSelect(Opcode, Op0, Op1, Q, MaxRecurse)) in simplifyShift()
1365 if (Value *V = threadBinOpOverPHI(Opcode, Op0, Op1, Q, MaxRecurse)) in simplifyShift()
1370 KnownBits KnownAmt = computeKnownBits(Op1, /* Depth */ 0, Q); in simplifyShift()
1383 KnownBits KnownVal = computeKnownBits(Op0, /* Depth */ 0, Q); in simplifyShift()
1402 const SimplifyQuery &Q, unsigned MaxRecurse) { in simplifyRightShift() argument
1404 simplifyShift(Opcode, Op0, Op1, /*IsNSW*/ false, Q, MaxRecurse)) in simplifyRightShift()
1413 if (Q.isUndefValue(Op0)) in simplifyRightShift()
1419 KnownBits Op0Known = computeKnownBits(Op0, /* Depth */ 0, Q); in simplifyRightShift()
1430 const SimplifyQuery &Q, unsigned MaxRecurse) { in simplifyShlInst() argument
1432 simplifyShift(Instruction::Shl, Op0, Op1, IsNSW, Q, MaxRecurse)) in simplifyShlInst()
1438 if (Q.isUndefValue(Op0)) in simplifyShlInst()
1443 if (Q.IIQ.UseInstrInfo && in simplifyShlInst()
1464 const SimplifyQuery &Q) { in simplifyShlInst() argument
1465 return ::simplifyShlInst(Op0, Op1, IsNSW, IsNUW, Q, RecursionLimit); in simplifyShlInst()
1471 const SimplifyQuery &Q, unsigned MaxRecurse) { in simplifyLShrInst() argument
1472 if (Value *V = simplifyRightShift(Instruction::LShr, Op0, Op1, IsExact, Q, in simplifyLShrInst()
1478 if (Q.IIQ.UseInstrInfo && match(Op0, m_NUWShl(m_Value(X), m_Specific(Op1)))) in simplifyLShrInst()
1488 if (Q.IIQ.UseInstrInfo && match(Op1, m_APInt(ShRAmt)) && in simplifyLShrInst()
1491 const KnownBits YKnown = computeKnownBits(Y, /* Depth */ 0, Q); in simplifyLShrInst()
1501 const SimplifyQuery &Q) { in simplifyLShrInst() argument
1502 return ::simplifyLShrInst(Op0, Op1, IsExact, Q, RecursionLimit); in simplifyLShrInst()
1508 const SimplifyQuery &Q, unsigned MaxRecurse) { in simplifyAShrInst() argument
1509 if (Value *V = simplifyRightShift(Instruction::AShr, Op0, Op1, IsExact, Q, in simplifyAShrInst()
1522 if (Q.IIQ.UseInstrInfo && match(Op0, m_NSWShl(m_Value(X), m_Specific(Op1)))) in simplifyAShrInst()
1526 unsigned NumSignBits = ComputeNumSignBits(Op0, Q.DL, 0, Q.AC, Q.CxtI, Q.DT); in simplifyAShrInst()
1534 const SimplifyQuery &Q) { in simplifyAShrInst() argument
1535 return ::simplifyAShrInst(Op0, Op1, IsExact, Q, RecursionLimit); in simplifyAShrInst()
1542 const SimplifyQuery &Q) { in simplifyUnsignedRangeCheck() argument
1589 isKnownNonZero(B, Q.DL, /*Depth=*/0, Q.AC, Q.CxtI, Q.DT)) in simplifyUnsignedRangeCheck()
1593 isKnownNonZero(B, Q.DL, /*Depth=*/0, Q.AC, Q.CxtI, Q.DT)) in simplifyUnsignedRangeCheck()
1611 isKnownNonZero(X, Q.DL, /*Depth=*/0, Q.AC, Q.CxtI, Q.DT)) in simplifyUnsignedRangeCheck()
1617 isKnownNonZero(X, Q.DL, /*Depth=*/0, Q.AC, Q.CxtI, Q.DT)) in simplifyUnsignedRangeCheck()
1757 const SimplifyQuery &Q) { in simplifyAndOfICmps() argument
1758 if (Value *X = simplifyUnsignedRangeCheck(Op0, Op1, /*IsAnd=*/true, Q)) in simplifyAndOfICmps()
1760 if (Value *X = simplifyUnsignedRangeCheck(Op1, Op0, /*IsAnd=*/true, Q)) in simplifyAndOfICmps()
1771 if (Value *X = simplifyAndOfICmpsWithAdd(Op0, Op1, Q.IIQ)) in simplifyAndOfICmps()
1773 if (Value *X = simplifyAndOfICmpsWithAdd(Op1, Op0, Q.IIQ)) in simplifyAndOfICmps()
1827 const SimplifyQuery &Q) { in simplifyOrOfICmps() argument
1828 if (Value *X = simplifyUnsignedRangeCheck(Op0, Op1, /*IsAnd=*/false, Q)) in simplifyOrOfICmps()
1830 if (Value *X = simplifyUnsignedRangeCheck(Op1, Op0, /*IsAnd=*/false, Q)) in simplifyOrOfICmps()
1841 if (Value *X = simplifyOrOfICmpsWithAdd(Op0, Op1, Q.IIQ)) in simplifyOrOfICmps()
1843 if (Value *X = simplifyOrOfICmpsWithAdd(Op1, Op0, Q.IIQ)) in simplifyOrOfICmps()
1849 static Value *simplifyAndOrOfFCmps(const SimplifyQuery &Q, FCmpInst *LHS, in simplifyAndOrOfFCmps() argument
1856 const DataLayout &DL = Q.DL; in simplifyAndOrOfFCmps()
1857 const TargetLibraryInfo *TLI = Q.TLI; in simplifyAndOrOfFCmps()
1871 isKnownNeverNaN(LHS0, DL, TLI, 0, Q.AC, Q.CxtI, Q.DT)) || in simplifyAndOrOfFCmps()
1873 isKnownNeverNaN(LHS1, DL, TLI, 0, Q.AC, Q.CxtI, Q.DT))) in simplifyAndOrOfFCmps()
1885 isKnownNeverNaN(RHS0, DL, TLI, 0, Q.AC, Q.CxtI, Q.DT)) || in simplifyAndOrOfFCmps()
1887 isKnownNeverNaN(RHS1, DL, TLI, 0, Q.AC, Q.CxtI, Q.DT))) in simplifyAndOrOfFCmps()
1894 static Value *simplifyAndOrOfCmps(const SimplifyQuery &Q, Value *Op0, in simplifyAndOrOfCmps() argument
1909 V = IsAnd ? simplifyAndOfICmps(ICmp0, ICmp1, Q) in simplifyAndOrOfCmps()
1910 : simplifyOrOfICmps(ICmp0, ICmp1, Q); in simplifyAndOrOfCmps()
1915 V = simplifyAndOrOfFCmps(Q, FCmp0, FCmp1, IsAnd); in simplifyAndOrOfCmps()
1926 Q.DL); in simplifyAndOrOfCmps()
1932 const SimplifyQuery &Q,
1938 const SimplifyQuery &Q, in simplifyAndOrWithICmpEq() argument
1972 simplifyWithOpReplaced(Op1, A, B, Q, /* AllowRefinement */ true, in simplifyAndOrWithICmpEq()
1976 simplifyWithOpReplaced(Op1, B, A, Q, /* AllowRefinement */ true, in simplifyAndOrWithICmpEq()
2009 const SimplifyQuery &Q, in simplifyAndCommutative() argument
2033 isKnownToBeAPowerOfTwo(Op1, Q.DL, /*OrZero*/ true, 0, Q.AC, Q.CxtI, Q.DT)) in simplifyAndCommutative()
2039 isKnownToBeAPowerOfTwo(Op1, Q.DL, /*OrZero*/ true, 0, Q.AC, Q.CxtI, Q.DT)) in simplifyAndCommutative()
2047 isKnownToBeAPowerOfTwo(X, Q.DL, /*OrZero*/ true, /*Depth*/ 0, Q.AC, in simplifyAndCommutative()
2048 Q.CxtI) && in simplifyAndCommutative()
2053 simplifyAndOrWithICmpEq(Instruction::And, Op0, Op1, Q, MaxRecurse)) in simplifyAndCommutative()
2061 static Value *simplifyAndInst(Value *Op0, Value *Op1, const SimplifyQuery &Q, in simplifyAndInst() argument
2063 if (Constant *C = foldOrCommuteConstant(Instruction::And, Op0, Op1, Q)) in simplifyAndInst()
2071 if (Q.isUndefValue(Op1)) in simplifyAndInst()
2086 if (Value *Res = simplifyAndCommutative(Op0, Op1, Q, MaxRecurse)) in simplifyAndInst()
2088 if (Value *Res = simplifyAndCommutative(Op1, Op0, Q, MaxRecurse)) in simplifyAndInst()
2117 isKnownToBeAPowerOfTwo(Shift, Q.DL, /*OrZero*/ false, 0, Q.AC, Q.CxtI, in simplifyAndInst()
2118 Q.DT)) { in simplifyAndInst()
2119 KnownBits Known = computeKnownBits(Shift, /* Depth */ 0, Q); in simplifyAndInst()
2125 if (Value *V = simplifyAndOrOfCmps(Q, Op0, Op1, true)) in simplifyAndInst()
2130 simplifyAssociativeBinOp(Instruction::And, Op0, Op1, Q, MaxRecurse)) in simplifyAndInst()
2135 Instruction::Or, Q, MaxRecurse)) in simplifyAndInst()
2140 Instruction::Xor, Q, MaxRecurse)) in simplifyAndInst()
2155 threadBinOpOverSelect(Instruction::And, Op0, Op1, Q, MaxRecurse)) in simplifyAndInst()
2163 threadBinOpOverPHI(Instruction::And, Op0, Op1, Q, MaxRecurse)) in simplifyAndInst()
2177 if (Q.IIQ.UseInstrInfo && match(Op1, m_APInt(Mask)) && in simplifyAndInst()
2183 const KnownBits YKnown = computeKnownBits(Y, /* Depth */ 0, Q); in simplifyAndInst()
2186 const KnownBits XKnown = computeKnownBits(X, /* Depth */ 0, Q); in simplifyAndInst()
2216 if (std::optional<bool> Implied = isImpliedCondition(Op0, Op1, Q.DL)) { in simplifyAndInst()
2224 if (std::optional<bool> Implied = isImpliedCondition(Op1, Op0, Q.DL)) { in simplifyAndInst()
2234 if (Value *V = simplifyByDomEq(Instruction::And, Op0, Op1, Q, MaxRecurse)) in simplifyAndInst()
2240 Value *llvm::simplifyAndInst(Value *Op0, Value *Op1, const SimplifyQuery &Q) { in simplifyAndInst() argument
2241 return ::simplifyAndInst(Op0, Op1, Q, RecursionLimit); in simplifyAndInst()
2338 static Value *simplifyOrInst(Value *Op0, Value *Op1, const SimplifyQuery &Q, in simplifyOrInst() argument
2340 if (Constant *C = foldOrCommuteConstant(Instruction::Or, Op0, Op1, Q)) in simplifyOrInst()
2350 if (Q.isUndefValue(Op1) || match(Op1, m_AllOnes())) in simplifyOrInst()
2409 simplifyAndOrWithICmpEq(Instruction::Or, Op0, Op1, Q, MaxRecurse)) in simplifyOrInst()
2412 simplifyAndOrWithICmpEq(Instruction::Or, Op1, Op0, Q, MaxRecurse)) in simplifyOrInst()
2415 if (Value *V = simplifyAndOrOfCmps(Q, Op0, Op1, false)) in simplifyOrInst()
2428 simplifyAssociativeBinOp(Instruction::Or, Op0, Op1, Q, MaxRecurse)) in simplifyOrInst()
2433 Instruction::And, Q, MaxRecurse)) in simplifyOrInst()
2448 threadBinOpOverSelect(Instruction::Or, Op0, Op1, Q, MaxRecurse)) in simplifyOrInst()
2466 if (MaskedValueIsZero(N, *C2, Q)) in simplifyOrInst()
2472 if (MaskedValueIsZero(N, *C1, Q)) in simplifyOrInst()
2481 if (Value *V = threadBinOpOverPHI(Instruction::Or, Op0, Op1, Q, MaxRecurse)) in simplifyOrInst()
2491 isImpliedCondition(Op0, Op1, Q.DL, false)) { in simplifyOrInst()
2500 isImpliedCondition(Op1, Op0, Q.DL, false)) { in simplifyOrInst()
2510 if (Value *V = simplifyByDomEq(Instruction::Or, Op0, Op1, Q, MaxRecurse)) in simplifyOrInst()
2516 Value *llvm::simplifyOrInst(Value *Op0, Value *Op1, const SimplifyQuery &Q) { in simplifyOrInst() argument
2517 return ::simplifyOrInst(Op0, Op1, Q, RecursionLimit); in simplifyOrInst()
2522 static Value *simplifyXorInst(Value *Op0, Value *Op1, const SimplifyQuery &Q, in simplifyXorInst() argument
2524 if (Constant *C = foldOrCommuteConstant(Instruction::Xor, Op0, Op1, Q)) in simplifyXorInst()
2532 if (Q.isUndefValue(Op1)) in simplifyXorInst()
2576 simplifyAssociativeBinOp(Instruction::Xor, Op0, Op1, Q, MaxRecurse)) in simplifyXorInst()
2588 if (Value *V = simplifyByDomEq(Instruction::Xor, Op0, Op1, Q, MaxRecurse)) in simplifyXorInst()
2594 Value *llvm::simplifyXorInst(Value *Op0, Value *Op1, const SimplifyQuery &Q) { in simplifyXorInst() argument
2595 return ::simplifyXorInst(Op0, Op1, Q, RecursionLimit); in simplifyXorInst()
2715 Value *RHS, const SimplifyQuery &Q) { in computePointerICmp() argument
2717 const DataLayout &DL = Q.DL; in computePointerICmp()
2718 const TargetLibraryInfo *TLI = Q.TLI; in computePointerICmp()
2719 const DominatorTree *DT = Q.DT; in computePointerICmp()
2720 const Instruction *CxtI = Q.CxtI; in computePointerICmp()
2868 Value *RHS, const SimplifyQuery &Q) { in simplifyICmpOfBools() argument
2941 if (isImpliedCondition(RHS, LHS, Q.DL).value_or(false)) in simplifyICmpOfBools()
2952 if (isImpliedCondition(LHS, RHS, Q.DL).value_or(false)) in simplifyICmpOfBools()
2956 if (isImpliedCondition(LHS, RHS, Q.DL).value_or(false)) in simplifyICmpOfBools()
2961 if (isImpliedCondition(RHS, LHS, Q.DL).value_or(false)) in simplifyICmpOfBools()
2971 Value *RHS, const SimplifyQuery &Q) { in simplifyICmpWithZero() argument
2985 if (isKnownNonZero(LHS, Q.DL, 0, Q.AC, Q.CxtI, Q.DT, Q.IIQ.UseInstrInfo)) in simplifyICmpWithZero()
2990 if (isKnownNonZero(LHS, Q.DL, 0, Q.AC, Q.CxtI, Q.DT, Q.IIQ.UseInstrInfo)) in simplifyICmpWithZero()
2994 KnownBits LHSKnown = computeKnownBits(LHS, /* Depth */ 0, Q); in simplifyICmpWithZero()
3002 KnownBits LHSKnown = computeKnownBits(LHS, /* Depth */ 0, Q); in simplifyICmpWithZero()
3006 isKnownNonZero(LHS, Q.DL, 0, Q.AC, Q.CxtI, Q.DT)) in simplifyICmpWithZero()
3011 KnownBits LHSKnown = computeKnownBits(LHS, /* Depth */ 0, Q); in simplifyICmpWithZero()
3019 KnownBits LHSKnown = computeKnownBits(LHS, /* Depth */ 0, Q); in simplifyICmpWithZero()
3023 isKnownNonZero(LHS, Q.DL, 0, Q.AC, Q.CxtI, Q.DT)) in simplifyICmpWithZero()
3083 const SimplifyQuery &Q, in simplifyICmpWithBinOpOnLHS() argument
3096 KnownBits RHSKnown = computeKnownBits(RHS, /* Depth */ 0, Q); in simplifyICmpWithBinOpOnLHS()
3097 KnownBits YKnown = computeKnownBits(Y, /* Depth */ 0, Q); in simplifyICmpWithBinOpOnLHS()
3120 KnownBits Known = computeKnownBits(RHS, /* Depth */ 0, Q); in simplifyICmpWithBinOpOnLHS()
3131 KnownBits Known = computeKnownBits(RHS, /* Depth */ 0, Q); in simplifyICmpWithBinOpOnLHS()
3177 if (isKnownNonZero(RHS, Q.DL, 0, Q.AC, Q.CxtI, Q.DT)) { in simplifyICmpWithBinOpOnLHS()
3264 Value *RHS, const SimplifyQuery &Q, in simplifyICmpWithBinOp() argument
3279 Q.IIQ.hasNoUnsignedWrap(cast<OverflowingBinaryOperator>(LBO))) || in simplifyICmpWithBinOp()
3281 Q.IIQ.hasNoSignedWrap(cast<OverflowingBinaryOperator>(LBO))); in simplifyICmpWithBinOp()
3289 Q.IIQ.hasNoUnsignedWrap(cast<OverflowingBinaryOperator>(RBO))) || in simplifyICmpWithBinOp()
3291 Q.IIQ.hasNoSignedWrap(cast<OverflowingBinaryOperator>(RBO))); in simplifyICmpWithBinOp()
3297 Constant::getNullValue(RHS->getType()), Q, in simplifyICmpWithBinOp()
3305 C == LHS ? D : C, Q, MaxRecurse - 1)) in simplifyICmpWithBinOp()
3310 trySimplifyICmpWithAdds(Pred, LHS, RHS, Q.IIQ); in simplifyICmpWithBinOp()
3332 if (Value *V = simplifyICmpInst(Pred, Y, Z, Q, MaxRecurse - 1)) in simplifyICmpWithBinOp()
3338 if (Value *V = simplifyICmpWithBinOpOnLHS(Pred, LBO, RHS, Q, MaxRecurse)) in simplifyICmpWithBinOp()
3343 ICmpInst::getSwappedPredicate(Pred), RBO, LHS, Q, MaxRecurse)) in simplifyICmpWithBinOp()
3379 if (Q.IIQ.hasNoSignedWrap(cast<OverflowingBinaryOperator>(LBO)) || in simplifyICmpWithBinOp()
3380 Q.IIQ.hasNoUnsignedWrap(cast<OverflowingBinaryOperator>(LBO)) || in simplifyICmpWithBinOp()
3407 bool NUW = Q.IIQ.hasNoUnsignedWrap(LBO) && Q.IIQ.hasNoUnsignedWrap(RBO); in simplifyICmpWithBinOp()
3408 bool NSW = Q.IIQ.hasNoSignedWrap(LBO) && Q.IIQ.hasNoSignedWrap(RBO); in simplifyICmpWithBinOp()
3410 !isKnownNonZero(LBO->getOperand(0), Q.DL)) in simplifyICmpWithBinOp()
3413 RBO->getOperand(1), Q, MaxRecurse - 1)) in simplifyICmpWithBinOp()
3456 if (ICmpInst::isSigned(Pred) || !Q.IIQ.isExact(LBO) || in simplifyICmpWithBinOp()
3457 !Q.IIQ.isExact(RBO)) in simplifyICmpWithBinOp()
3460 RBO->getOperand(0), Q, MaxRecurse - 1)) in simplifyICmpWithBinOp()
3464 if (!ICmpInst::isEquality(Pred) || !Q.IIQ.isExact(LBO) || in simplifyICmpWithBinOp()
3465 !Q.IIQ.isExact(RBO)) in simplifyICmpWithBinOp()
3468 RBO->getOperand(0), Q, MaxRecurse - 1)) in simplifyICmpWithBinOp()
3472 if (!Q.IIQ.isExact(LBO) || !Q.IIQ.isExact(RBO)) in simplifyICmpWithBinOp()
3475 RBO->getOperand(0), Q, MaxRecurse - 1)) in simplifyICmpWithBinOp()
3479 bool NUW = Q.IIQ.hasNoUnsignedWrap(LBO) && Q.IIQ.hasNoUnsignedWrap(RBO); in simplifyICmpWithBinOp()
3480 bool NSW = Q.IIQ.hasNoSignedWrap(LBO) && Q.IIQ.hasNoSignedWrap(RBO); in simplifyICmpWithBinOp()
3486 RBO->getOperand(0), Q, MaxRecurse - 1)) in simplifyICmpWithBinOp()
3498 Value *RHS, const SimplifyQuery &Q, in simplifyICmpWithMinMax() argument
3551 if (Value *V = simplifyICmpInst(EqP, A, B, Q, MaxRecurse - 1)) in simplifyICmpWithMinMax()
3565 if (Value *V = simplifyICmpInst(InvEqP, A, B, Q, MaxRecurse - 1)) in simplifyICmpWithMinMax()
3625 if (Value *V = simplifyICmpInst(EqP, A, B, Q, MaxRecurse - 1)) in simplifyICmpWithMinMax()
3639 if (Value *V = simplifyICmpInst(InvEqP, A, B, Q, MaxRecurse - 1)) in simplifyICmpWithMinMax()
3684 const SimplifyQuery &Q) { in simplifyICmpWithDominatingAssume() argument
3686 if (!Q.AC || !Q.CxtI) in simplifyICmpWithDominatingAssume()
3690 for (auto &AssumeVH : Q.AC->assumptionsFor(AssumeBaseOp)) { in simplifyICmpWithDominatingAssume()
3696 Assume->getArgOperand(0), Predicate, LHS, RHS, Q.DL)) in simplifyICmpWithDominatingAssume()
3697 if (isValidAssumeForContext(Assume, Q.CxtI, Q.DT)) in simplifyICmpWithDominatingAssume()
3738 const SimplifyQuery &Q, unsigned MaxRecurse) { in simplifyICmpInst() argument
3744 return ConstantFoldCompareInstOperands(Pred, CLHS, CRHS, Q.DL, Q.TLI); in simplifyICmpInst()
3761 if (Q.isUndefValue(RHS) && ICmpInst::isEquality(Pred)) in simplifyICmpInst()
3766 if (LHS == RHS || Q.isUndefValue(RHS)) in simplifyICmpInst()
3769 if (Value *V = simplifyICmpOfBools(Pred, LHS, RHS, Q)) in simplifyICmpInst()
3774 if (Value *V = simplifyICmpWithZero(Pred, LHS, RHS, Q)) in simplifyICmpInst()
3777 if (Value *V = simplifyICmpWithConstant(Pred, LHS, RHS, Q.IIQ)) in simplifyICmpInst()
3786 if (Q.IIQ.getMetadata(RHS_Instr, LLVMContext::MD_range) && in simplifyICmpInst()
3787 Q.IIQ.getMetadata(LHS_Instr, LLVMContext::MD_range)) { in simplifyICmpInst()
3811 Q.DL.getTypeSizeInBits(SrcTy) == DstTy->getPrimitiveSizeInBits()) { in simplifyICmpInst()
3816 Q, MaxRecurse - 1)) in simplifyICmpInst()
3821 if (Value *V = simplifyICmpInst(Pred, SrcOp, RI->getOperand(0), Q, in simplifyICmpInst()
3835 RI->getOperand(0), Q, MaxRecurse - 1)) in simplifyICmpInst()
3856 ConstantFoldCastOperand(Instruction::Trunc, C, SrcTy, Q.DL); in simplifyICmpInst()
3859 ConstantFoldCastOperand(CastInst::ZExt, Trunc, DstTy, Q.DL); in simplifyICmpInst()
3862 ConstantFoldCompareInstOperands(ICmpInst::ICMP_EQ, RExt, C, Q.DL); in simplifyICmpInst()
3870 SrcOp, Trunc, Q, MaxRecurse - 1)) in simplifyICmpInst()
3896 Q.DL); in simplifyICmpInst()
3901 Q.DL); in simplifyICmpInst()
3913 if (Value *V = simplifyICmpInst(Pred, SrcOp, RI->getOperand(0), Q, in simplifyICmpInst()
3934 ConstantFoldCastOperand(Instruction::Trunc, C, SrcTy, Q.DL); in simplifyICmpInst()
3937 ConstantFoldCastOperand(CastInst::SExt, Trunc, DstTy, Q.DL); in simplifyICmpInst()
3940 ConstantFoldCompareInstOperands(ICmpInst::ICMP_EQ, RExt, C, Q.DL); in simplifyICmpInst()
3947 simplifyICmpInst(Pred, SrcOp, Trunc, Q, MaxRecurse - 1)) in simplifyICmpInst()
3979 Constant::getNullValue(SrcTy), Q, in simplifyICmpInst()
3988 Constant::getNullValue(SrcTy), Q, in simplifyICmpInst()
4002 isKnownNonEqual(LHS, RHS, Q.DL, Q.AC, Q.CxtI, Q.DT, Q.IIQ.UseInstrInfo)) { in simplifyICmpInst()
4006 if (Value *V = simplifyICmpWithBinOp(Pred, LHS, RHS, Q, MaxRecurse)) in simplifyICmpInst()
4009 if (Value *V = simplifyICmpWithMinMax(Pred, LHS, RHS, Q, MaxRecurse)) in simplifyICmpInst()
4018 if (Value *V = simplifyICmpWithDominatingAssume(Pred, LHS, RHS, Q)) in simplifyICmpInst()
4022 isImpliedByDomCondition(Pred, LHS, RHS, Q.CxtI, Q.DL)) in simplifyICmpInst()
4028 if (auto *C = computePointerICmp(Pred, LHS, RHS, Q)) in simplifyICmpInst()
4033 Q.DL.getTypeSizeInBits(CLHS->getPointerOperandType()) == in simplifyICmpInst()
4034 Q.DL.getTypeSizeInBits(CLHS->getType())) in simplifyICmpInst()
4036 CRHS->getPointerOperand(), Q)) in simplifyICmpInst()
4042 if (Value *V = threadCmpOverSelect(Pred, LHS, RHS, Q, MaxRecurse)) in simplifyICmpInst()
4048 if (Value *V = threadCmpOverPHI(Pred, LHS, RHS, Q, MaxRecurse)) in simplifyICmpInst()
4055 const SimplifyQuery &Q) { in simplifyICmpInst() argument
4056 return ::simplifyICmpInst(Predicate, LHS, RHS, Q, RecursionLimit); in simplifyICmpInst()
4062 FastMathFlags FMF, const SimplifyQuery &Q, in simplifyFCmpInst() argument
4069 return ConstantFoldCompareInstOperands(Pred, CLHS, CRHS, Q.DL, Q.TLI, in simplifyFCmpInst()
4070 Q.CxtI); in simplifyFCmpInst()
4091 if (Q.isUndefValue(LHS) || Q.isUndefValue(RHS)) { in simplifyFCmpInst()
4111 (isKnownNeverNaN(RHS, Q.DL, Q.TLI, 0, Q.AC, Q.CxtI, Q.DT) && in simplifyFCmpInst()
4112 isKnownNeverNaN(LHS, Q.DL, Q.TLI, 0, Q.AC, Q.CxtI, Q.DT))) in simplifyFCmpInst()
4126 return computeKnownFPClass(LHS, FMF, Q.DL, InterestedFlags, 0, Q.TLI, Q.AC, in simplifyFCmpInst()
4127 Q.CxtI, Q.DT, Q.IIQ.UseInstrInfo); in simplifyFCmpInst()
4130 if (C && Q.CxtI) { in simplifyFCmpInst()
4136 const Function *ParentF = Q.CxtI->getFunction(); in simplifyFCmpInst()
4271 if (Value *V = threadCmpOverSelect(Pred, LHS, RHS, Q, MaxRecurse)) in simplifyFCmpInst()
4277 if (Value *V = threadCmpOverPHI(Pred, LHS, RHS, Q, MaxRecurse)) in simplifyFCmpInst()
4284 FastMathFlags FMF, const SimplifyQuery &Q) { in simplifyFCmpInst() argument
4285 return ::simplifyFCmpInst(Predicate, LHS, RHS, FMF, Q, RecursionLimit); in simplifyFCmpInst()
4289 const SimplifyQuery &Q, in simplifyWithOpReplaced() argument
4334 InstOp, Op, RepOp, Q, AllowRefinement, DropFlags, MaxRecurse)) { in simplifyWithOpReplaced()
4415 ::simplifyInstructionWithOperands(I, NewOps, Q, MaxRecurse)); in simplifyWithOpReplaced()
4447 Constant *Res = ConstantFoldInstOperands(I, ConstOps, Q.DL, Q.TLI); in simplifyWithOpReplaced()
4453 return ConstantFoldInstOperands(I, ConstOps, Q.DL, Q.TLI); in simplifyWithOpReplaced()
4457 const SimplifyQuery &Q, in simplifyWithOpReplaced() argument
4460 return ::simplifyWithOpReplaced(V, Op, RepOp, Q, AllowRefinement, DropFlags, in simplifyWithOpReplaced()
4597 const SimplifyQuery &Q, in simplifySelectWithICmpEq() argument
4599 if (simplifyWithOpReplaced(FalseVal, CmpLHS, CmpRHS, Q, in simplifySelectWithICmpEq()
4603 if (simplifyWithOpReplaced(TrueVal, CmpLHS, CmpRHS, Q, in simplifySelectWithICmpEq()
4615 const SimplifyQuery &Q, in simplifySelectWithICmpCond() argument
4700 Q, MaxRecurse)) in simplifySelectWithICmpCond()
4703 Q, MaxRecurse)) in simplifySelectWithICmpCond()
4712 if (Value *V = simplifySelectWithICmpEq(X, CmpRHS, TrueVal, FalseVal, Q, in simplifySelectWithICmpCond()
4715 if (Value *V = simplifySelectWithICmpEq(Y, CmpRHS, TrueVal, FalseVal, Q, in simplifySelectWithICmpCond()
4724 if (Value *V = simplifySelectWithICmpEq(X, CmpRHS, TrueVal, FalseVal, Q, in simplifySelectWithICmpCond()
4727 if (Value *V = simplifySelectWithICmpEq(Y, CmpRHS, TrueVal, FalseVal, Q, in simplifySelectWithICmpCond()
4739 const SimplifyQuery &Q) { in simplifySelectWithFCmp() argument
4749 Q.CxtI && isa<FPMathOperator>(Q.CxtI) && Q.CxtI->hasNoSignedZeros(); in simplifySelectWithFCmp()
4770 const SimplifyQuery &Q, unsigned MaxRecurse) { in simplifySelectInst() argument
4782 if (Q.isUndefValue(CondC)) in simplifySelectInst()
4889 (Q.isUndefValue(TrueVal) && impliesPoison(FalseVal, Cond))) in simplifySelectInst()
4894 (Q.isUndefValue(FalseVal) && impliesPoison(TrueVal, Cond))) in simplifySelectInst()
4917 (Q.isUndefValue(TEltC) && isGuaranteedNotToBePoison(FEltC))) in simplifySelectInst()
4920 (Q.isUndefValue(FEltC) && isGuaranteedNotToBePoison(TEltC))) in simplifySelectInst()
4930 simplifySelectWithICmpCond(Cond, TrueVal, FalseVal, Q, MaxRecurse)) in simplifySelectInst()
4933 if (Value *V = simplifySelectWithFCmp(Cond, TrueVal, FalseVal, Q)) in simplifySelectInst()
4939 std::optional<bool> Imp = isImpliedByDomCondition(Cond, Q.CxtI, Q.DL); in simplifySelectInst()
4947 const SimplifyQuery &Q) { in simplifySelectInst() argument
4948 return ::simplifySelectInst(Cond, TrueVal, FalseVal, Q, RecursionLimit); in simplifySelectInst()
4955 const SimplifyQuery &Q, unsigned) { in simplifyGEPInst() argument
4990 if (Q.isUndefValue(Ptr)) in simplifyGEPInst()
5003 uint64_t TyAllocSize = Q.DL.getTypeAllocSize(Ty); in simplifyGEPInst()
5011 Q.DL.getPointerSizeInBits(AS)) { in simplifyGEPInst()
5042 if (!IsScalableVec && Q.DL.getTypeAllocSize(LastType) == 1 && in simplifyGEPInst()
5046 Q.DL.getIndexSizeInBits(Ptr->getType()->getPointerAddressSpace()); in simplifyGEPInst()
5047 if (Q.DL.getTypeSizeInBits(Indices.back()->getType()) == IdxWidth) { in simplifyGEPInst()
5050 Ptr->stripAndAccumulateInBoundsConstantOffsets(Q.DL, BasePtrOffset); in simplifyGEPInst()
5084 return ConstantFoldConstant(CE, Q.DL); in simplifyGEPInst()
5088 bool InBounds, const SimplifyQuery &Q) { in simplifyGEPInst() argument
5089 return ::simplifyGEPInst(SrcTy, Ptr, Indices, InBounds, Q, RecursionLimit); in simplifyGEPInst()
5096 const SimplifyQuery &Q, unsigned) { in simplifyInsertValueInst() argument
5104 (Q.isUndefValue(Val) && isGuaranteedNotToBePoison(Agg))) in simplifyInsertValueInst()
5114 (Q.isUndefValue(Agg) && in simplifyInsertValueInst()
5128 const SimplifyQuery &Q) { in simplifyInsertValueInst() argument
5129 return ::simplifyInsertValueInst(Agg, Val, Idxs, Q, RecursionLimit); in simplifyInsertValueInst()
5133 const SimplifyQuery &Q) { in simplifyInsertElementInst() argument
5149 if (Q.isUndefValue(Idx)) in simplifyInsertElementInst()
5155 (Q.isUndefValue(Val) && isGuaranteedNotToBePoison(Vec))) in simplifyInsertElementInst()
5193 const SimplifyQuery &Q) { in simplifyExtractValueInst() argument
5194 return ::simplifyExtractValueInst(Agg, Idxs, Q, RecursionLimit); in simplifyExtractValueInst()
5200 const SimplifyQuery &Q, unsigned) { in simplifyExtractElementInst() argument
5206 if (Q.isUndefValue(Vec)) in simplifyExtractElementInst()
5212 if (Q.isUndefValue(Idx)) in simplifyExtractElementInst()
5245 const SimplifyQuery &Q) { in simplifyExtractElementInst() argument
5246 return ::simplifyExtractElementInst(Vec, Idx, Q, RecursionLimit); in simplifyExtractElementInst()
5251 const SimplifyQuery &Q) { in simplifyPHINode() argument
5264 if (Q.isUndefValue(Incoming)) { in simplifyPHINode()
5283 return valueDominatesPHI(CommonValue, PN, Q.DT) ? CommonValue : nullptr; in simplifyPHINode()
5290 const SimplifyQuery &Q, unsigned MaxRecurse) { in simplifyCastInst() argument
5292 return ConstantFoldCastOperand(CastOpc, C, Ty, Q.DL); in simplifyCastInst()
5303 SrcTy->isPtrOrPtrVectorTy() ? Q.DL.getIntPtrType(SrcTy) : nullptr; in simplifyCastInst()
5305 MidTy->isPtrOrPtrVectorTy() ? Q.DL.getIntPtrType(MidTy) : nullptr; in simplifyCastInst()
5307 DstTy->isPtrOrPtrVectorTy() ? Q.DL.getIntPtrType(DstTy) : nullptr; in simplifyCastInst()
5324 const SimplifyQuery &Q) { in simplifyCastInst() argument
5325 return ::simplifyCastInst(CastOpc, Op, Ty, Q, RecursionLimit); in simplifyCastInst()
5381 const SimplifyQuery &Q, in simplifyShuffleVectorInst() argument
5461 if (Q.isUndefValue(Op1) && RetTy == InVecTy && in simplifyShuffleVectorInst()
5497 const SimplifyQuery &Q) { in simplifyShuffleVectorInst() argument
5498 return ::simplifyShuffleVectorInst(Op0, Op1, Mask, RetTy, Q, RecursionLimit); in simplifyShuffleVectorInst()
5502 const SimplifyQuery &Q) { in foldConstant() argument
5504 return ConstantFoldUnaryOpOperand(Opcode, C, Q.DL); in foldConstant()
5511 const SimplifyQuery &Q, unsigned MaxRecurse) { in simplifyFNegInst() argument
5512 if (Constant *C = foldConstant(Instruction::FNeg, Op, Q)) in simplifyFNegInst()
5524 const SimplifyQuery &Q) { in simplifyFNegInst() argument
5525 return ::simplifyFNegInst(Op, FMF, Q, RecursionLimit); in simplifyFNegInst()
5573 const SimplifyQuery &Q, in simplifyFPOp() argument
5584 bool IsUndef = Q.isUndefValue(V); in simplifyFPOp()
5615 const SimplifyQuery &Q, unsigned MaxRecurse, in simplifyFAddInst() argument
5619 if (Constant *C = foldOrCommuteConstant(Instruction::FAdd, Op0, Op1, Q)) in simplifyFAddInst()
5622 if (Constant *C = simplifyFPOp({Op0, Op1}, FMF, Q, ExBehavior, Rounding)) in simplifyFAddInst()
5639 (FMF.noSignedZeros() || cannotBeNegativeZero(Op0, Q.DL, Q.TLI))) in simplifyFAddInst()
5681 const SimplifyQuery &Q, unsigned MaxRecurse, in simplifyFSubInst() argument
5685 if (Constant *C = foldOrCommuteConstant(Instruction::FSub, Op0, Op1, Q)) in simplifyFSubInst()
5688 if (Constant *C = simplifyFPOp({Op0, Op1}, FMF, Q, ExBehavior, Rounding)) in simplifyFSubInst()
5701 (FMF.noSignedZeros() || cannotBeNegativeZero(Op0, Q.DL, Q.TLI))) in simplifyFSubInst()
5733 return foldConstant(Instruction::FNeg, Op1, Q); in simplifyFSubInst()
5747 const SimplifyQuery &Q, unsigned MaxRecurse, in simplifyFMAFMul() argument
5750 if (Constant *C = simplifyFPOp({Op0, Op1}, FMF, Q, ExBehavior, Rounding)) in simplifyFMAFMul()
5770 if (isKnownNeverInfOrNaN(Op0, Q.DL, Q.TLI, 0, Q.AC, Q.CxtI, Q.DT) && in simplifyFMAFMul()
5772 SignBitMustBeZero(Op0, Q.DL, Q.TLI)) in simplifyFMAFMul()
5791 const SimplifyQuery &Q, unsigned MaxRecurse, in simplifyFMulInst() argument
5795 if (Constant *C = foldOrCommuteConstant(Instruction::FMul, Op0, Op1, Q)) in simplifyFMulInst()
5799 return simplifyFMAFMul(Op0, Op1, FMF, Q, MaxRecurse, ExBehavior, Rounding); in simplifyFMulInst()
5803 const SimplifyQuery &Q, in simplifyFAddInst() argument
5806 return ::simplifyFAddInst(Op0, Op1, FMF, Q, RecursionLimit, ExBehavior, in simplifyFAddInst()
5811 const SimplifyQuery &Q, in simplifyFSubInst() argument
5814 return ::simplifyFSubInst(Op0, Op1, FMF, Q, RecursionLimit, ExBehavior, in simplifyFSubInst()
5819 const SimplifyQuery &Q, in simplifyFMulInst() argument
5822 return ::simplifyFMulInst(Op0, Op1, FMF, Q, RecursionLimit, ExBehavior, in simplifyFMulInst()
5827 const SimplifyQuery &Q, in simplifyFMAFMul() argument
5830 return ::simplifyFMAFMul(Op0, Op1, FMF, Q, RecursionLimit, ExBehavior, in simplifyFMAFMul()
5836 const SimplifyQuery &Q, unsigned, in simplifyFDivInst() argument
5840 if (Constant *C = foldOrCommuteConstant(Instruction::FDiv, Op0, Op1, Q)) in simplifyFDivInst()
5843 if (Constant *C = simplifyFPOp({Op0, Op1}, FMF, Q, ExBehavior, Rounding)) in simplifyFDivInst()
5886 const SimplifyQuery &Q, in simplifyFDivInst() argument
5889 return ::simplifyFDivInst(Op0, Op1, FMF, Q, RecursionLimit, ExBehavior, in simplifyFDivInst()
5895 const SimplifyQuery &Q, unsigned, in simplifyFRemInst() argument
5899 if (Constant *C = foldOrCommuteConstant(Instruction::FRem, Op0, Op1, Q)) in simplifyFRemInst()
5902 if (Constant *C = simplifyFPOp({Op0, Op1}, FMF, Q, ExBehavior, Rounding)) in simplifyFRemInst()
5924 const SimplifyQuery &Q, in simplifyFRemInst() argument
5927 return ::simplifyFRemInst(Op0, Op1, FMF, Q, RecursionLimit, ExBehavior, in simplifyFRemInst()
5935 static Value *simplifyUnOp(unsigned Opcode, Value *Op, const SimplifyQuery &Q, in simplifyUnOp() argument
5939 return simplifyFNegInst(Op, FastMathFlags(), Q, MaxRecurse); in simplifyUnOp()
5949 const FastMathFlags &FMF, const SimplifyQuery &Q, in simplifyFPUnOp() argument
5953 return simplifyFNegInst(Op, FMF, Q, MaxRecurse); in simplifyFPUnOp()
5955 return simplifyUnOp(Opcode, Op, Q, MaxRecurse); in simplifyFPUnOp()
5959 Value *llvm::simplifyUnOp(unsigned Opcode, Value *Op, const SimplifyQuery &Q) { in simplifyUnOp() argument
5960 return ::simplifyUnOp(Opcode, Op, Q, RecursionLimit); in simplifyUnOp()
5964 const SimplifyQuery &Q) { in simplifyUnOp() argument
5965 return ::simplifyFPUnOp(Opcode, Op, FMF, Q, RecursionLimit); in simplifyUnOp()
5971 const SimplifyQuery &Q, unsigned MaxRecurse) { in simplifyBinOp() argument
5974 return simplifyAddInst(LHS, RHS, /* IsNSW */ false, /* IsNUW */ false, Q, in simplifyBinOp()
5977 return simplifySubInst(LHS, RHS, /* IsNSW */ false, /* IsNUW */ false, Q, in simplifyBinOp()
5980 return simplifyMulInst(LHS, RHS, /* IsNSW */ false, /* IsNUW */ false, Q, in simplifyBinOp()
5983 return simplifySDivInst(LHS, RHS, /* IsExact */ false, Q, MaxRecurse); in simplifyBinOp()
5985 return simplifyUDivInst(LHS, RHS, /* IsExact */ false, Q, MaxRecurse); in simplifyBinOp()
5987 return simplifySRemInst(LHS, RHS, Q, MaxRecurse); in simplifyBinOp()
5989 return simplifyURemInst(LHS, RHS, Q, MaxRecurse); in simplifyBinOp()
5991 return simplifyShlInst(LHS, RHS, /* IsNSW */ false, /* IsNUW */ false, Q, in simplifyBinOp()
5994 return simplifyLShrInst(LHS, RHS, /* IsExact */ false, Q, MaxRecurse); in simplifyBinOp()
5996 return simplifyAShrInst(LHS, RHS, /* IsExact */ false, Q, MaxRecurse); in simplifyBinOp()
5998 return simplifyAndInst(LHS, RHS, Q, MaxRecurse); in simplifyBinOp()
6000 return simplifyOrInst(LHS, RHS, Q, MaxRecurse); in simplifyBinOp()
6002 return simplifyXorInst(LHS, RHS, Q, MaxRecurse); in simplifyBinOp()
6004 return simplifyFAddInst(LHS, RHS, FastMathFlags(), Q, MaxRecurse); in simplifyBinOp()
6006 return simplifyFSubInst(LHS, RHS, FastMathFlags(), Q, MaxRecurse); in simplifyBinOp()
6008 return simplifyFMulInst(LHS, RHS, FastMathFlags(), Q, MaxRecurse); in simplifyBinOp()
6010 return simplifyFDivInst(LHS, RHS, FastMathFlags(), Q, MaxRecurse); in simplifyBinOp()
6012 return simplifyFRemInst(LHS, RHS, FastMathFlags(), Q, MaxRecurse); in simplifyBinOp()
6022 const FastMathFlags &FMF, const SimplifyQuery &Q, in simplifyBinOp() argument
6026 return simplifyFAddInst(LHS, RHS, FMF, Q, MaxRecurse); in simplifyBinOp()
6028 return simplifyFSubInst(LHS, RHS, FMF, Q, MaxRecurse); in simplifyBinOp()
6030 return simplifyFMulInst(LHS, RHS, FMF, Q, MaxRecurse); in simplifyBinOp()
6032 return simplifyFDivInst(LHS, RHS, FMF, Q, MaxRecurse); in simplifyBinOp()
6034 return simplifyBinOp(Opcode, LHS, RHS, Q, MaxRecurse); in simplifyBinOp()
6039 const SimplifyQuery &Q) { in simplifyBinOp() argument
6040 return ::simplifyBinOp(Opcode, LHS, RHS, Q, RecursionLimit); in simplifyBinOp()
6044 FastMathFlags FMF, const SimplifyQuery &Q) { in simplifyBinOp() argument
6045 return ::simplifyBinOp(Opcode, LHS, RHS, FMF, Q, RecursionLimit); in simplifyBinOp()
6050 const SimplifyQuery &Q, unsigned MaxRecurse) { in simplifyCmpInst() argument
6052 return simplifyICmpInst(Predicate, LHS, RHS, Q, MaxRecurse); in simplifyCmpInst()
6053 return simplifyFCmpInst(Predicate, LHS, RHS, FastMathFlags(), Q, MaxRecurse); in simplifyCmpInst()
6057 const SimplifyQuery &Q) { in simplifyCmpInst() argument
6058 return ::simplifyCmpInst(Predicate, LHS, RHS, Q, RecursionLimit); in simplifyCmpInst()
6151 static Value *simplifyLdexp(Value *Op0, Value *Op1, const SimplifyQuery &Q, in simplifyLdexp() argument
6159 if (Q.isUndefValue(Op0)) in simplifyLdexp()
6166 if (Q.isUndefValue(Op1)) in simplifyLdexp()
6201 const SimplifyQuery &Q, in simplifyUnaryIntrinsic() argument
6225 if (SignBitMustBeZero(Op0, Q.DL, Q.TLI)) in simplifyUnaryIntrinsic()
6240 if (isKnownToBeAPowerOfTwo(Op0, Q.DL, /*OrZero*/ false, 0, Q.AC, Q.CxtI, in simplifyUnaryIntrinsic()
6241 Q.DT)) in simplifyUnaryIntrinsic()
6247 Q)) in simplifyUnaryIntrinsic()
6387 const SimplifyQuery &Q, in simplifyBinaryIntrinsic() argument
6421 if (Q.isUndefValue(Op0) || match(Op0, m_Zero())) in simplifyBinaryIntrinsic()
6425 Q.DL.getIndexTypeSizeInBits(Op0->getType()) && in simplifyBinaryIntrinsic()
6435 if (match(Op1, m_AllOnes()) || Q.isUndefValue(Op1)) in simplifyBinaryIntrinsic()
6440 KnownBits PtrKnown = computeKnownBits(Op0, /*Depth=*/0, Q); in simplifyBinaryIntrinsic()
6447 Q.DL); in simplifyBinaryIntrinsic()
6466 if (Q.isUndefValue(Op1)) in simplifyBinaryIntrinsic()
6506 if (isICmpTrue(Pred, Op0, Op1, Q.getWithoutUndef(), RecursionLimit)) in simplifyBinaryIntrinsic()
6508 if (isICmpTrue(Pred, Op1, Op0, Q.getWithoutUndef(), RecursionLimit)) in simplifyBinaryIntrinsic()
6518 if (Op0 == Op1 || Q.isUndefValue(Op0) || Q.isUndefValue(Op1)) in simplifyBinaryIntrinsic()
6525 if (Q.isUndefValue(Op0) || Q.isUndefValue(Op1)) { in simplifyBinaryIntrinsic()
6540 if (Q.isUndefValue(Op0) || Q.isUndefValue(Op1)) in simplifyBinaryIntrinsic()
6554 if (Q.isUndefValue(Op0) || Q.isUndefValue(Op1)) in simplifyBinaryIntrinsic()
6571 if (Op0 == Op1 || Q.isUndefValue(Op0) || Q.isUndefValue(Op1)) in simplifyBinaryIntrinsic()
6580 return simplifyRelativeLoad(C0, C1, Q.DL); in simplifyBinaryIntrinsic()
6593 return simplifyLdexp(Op0, Op1, Q, false); in simplifyBinaryIntrinsic()
6614 if (Q.isUndefValue(Op0)) in simplifyBinaryIntrinsic()
6631 if (Q.isUndefValue(Op1)) in simplifyBinaryIntrinsic()
6695 const SimplifyQuery &Q) { in simplifyIntrinsic() argument
6719 return simplifyUnaryIntrinsic(F, Args[0], Q, Call); in simplifyIntrinsic()
6722 return simplifyBinaryIntrinsic(F, Args[0], Args[1], Q, Call); in simplifyIntrinsic()
6740 if (Q.isUndefValue(Op0) && Q.isUndefValue(Op1)) in simplifyIntrinsic()
6744 if (Q.isUndefValue(ShAmtArg)) in simplifyIntrinsic()
6767 if (Value *V = simplifyFPOp(Args, {}, Q, *FPI->getExceptionBehavior(), in simplifyIntrinsic()
6774 if (Value *V = simplifyFPOp(Args, {}, Q, fp::ebIgnore, in simplifyIntrinsic()
6797 if (Q.isUndefValue(Op1)) in simplifyIntrinsic()
6821 (Q.isUndefValue(Vec) || Vec == X) && IdxN == 0 && in simplifyIntrinsic()
6829 return simplifyFAddInst(Args[0], Args[1], FPI->getFastMathFlags(), Q, in simplifyIntrinsic()
6835 return simplifyFSubInst(Args[0], Args[1], FPI->getFastMathFlags(), Q, in simplifyIntrinsic()
6841 return simplifyFMulInst(Args[0], Args[1], FPI->getFastMathFlags(), Q, in simplifyIntrinsic()
6847 return simplifyFDivInst(Args[0], Args[1], FPI->getFastMathFlags(), Q, in simplifyIntrinsic()
6853 return simplifyFRemInst(Args[0], Args[1], FPI->getFastMathFlags(), Q, in simplifyIntrinsic()
6858 return simplifyLdexp(Args[0], Args[1], Q, true); in simplifyIntrinsic()
6866 const SimplifyQuery &Q) { in tryConstantFoldCall() argument
6883 return ConstantFoldCall(Call, F, ConstantArgs, Q.TLI); in tryConstantFoldCall()
6887 const SimplifyQuery &Q) { in simplifyCall() argument
6901 if (Value *V = tryConstantFoldCall(Call, Callee, Args, Q)) in simplifyCall()
6906 if (Value *Ret = simplifyIntrinsic(Call, Callee, Args, Q)) in simplifyCall()
6912 Value *llvm::simplifyConstrainedFPCall(CallBase *Call, const SimplifyQuery &Q) { in simplifyConstrainedFPCall() argument
6915 if (Value *V = tryConstantFoldCall(Call, Call->getCalledOperand(), Args, Q)) in simplifyConstrainedFPCall()
6917 if (Value *Ret = simplifyIntrinsic(Call, Call->getCalledOperand(), Args, Q)) in simplifyConstrainedFPCall()
6923 static Value *simplifyFreezeInst(Value *Op0, const SimplifyQuery &Q) { in simplifyFreezeInst() argument
6925 if (llvm::isGuaranteedNotToBeUndefOrPoison(Op0, Q.AC, Q.CxtI, Q.DT)) in simplifyFreezeInst()
6931 Value *llvm::simplifyFreezeInst(Value *Op0, const SimplifyQuery &Q) { in simplifyFreezeInst() argument
6932 return ::simplifyFreezeInst(Op0, Q); in simplifyFreezeInst()
6936 const SimplifyQuery &Q) { in simplifyLoadInst() argument
6941 return ConstantFoldLoadFromConstPtr(PtrOpC, LI->getType(), Q.DL); in simplifyLoadInst()
6957 APInt Offset(Q.DL.getIndexTypeSizeInBits(PtrOp->getType()), 0); in simplifyLoadInst()
6959 Q.DL, Offset, /* AllowNonInbounts */ true, in simplifyLoadInst()
6963 Offset = Offset.sextOrTrunc(Q.DL.getIndexTypeSizeInBits(PtrOp->getType())); in simplifyLoadInst()
6964 return ConstantFoldLoadFromConstPtr(GV, LI->getType(), Offset, Q.DL); in simplifyLoadInst()
6981 const SimplifyQuery Q = SQ.CxtI ? SQ : SQ.getWithInstruction(I); in simplifyInstructionWithOperands() local
6989 return ConstantFoldInstOperands(I, NewConstOps, Q.DL, Q.TLI); in simplifyInstructionWithOperands()
6993 return simplifyFNegInst(NewOps[0], I->getFastMathFlags(), Q, MaxRecurse); in simplifyInstructionWithOperands()
6995 return simplifyFAddInst(NewOps[0], NewOps[1], I->getFastMathFlags(), Q, in simplifyInstructionWithOperands()
6999 NewOps[0], NewOps[1], Q.IIQ.hasNoSignedWrap(cast<BinaryOperator>(I)), in simplifyInstructionWithOperands()
7000 Q.IIQ.hasNoUnsignedWrap(cast<BinaryOperator>(I)), Q, MaxRecurse); in simplifyInstructionWithOperands()
7002 return simplifyFSubInst(NewOps[0], NewOps[1], I->getFastMathFlags(), Q, in simplifyInstructionWithOperands()
7006 NewOps[0], NewOps[1], Q.IIQ.hasNoSignedWrap(cast<BinaryOperator>(I)), in simplifyInstructionWithOperands()
7007 Q.IIQ.hasNoUnsignedWrap(cast<BinaryOperator>(I)), Q, MaxRecurse); in simplifyInstructionWithOperands()
7009 return simplifyFMulInst(NewOps[0], NewOps[1], I->getFastMathFlags(), Q, in simplifyInstructionWithOperands()
7013 NewOps[0], NewOps[1], Q.IIQ.hasNoSignedWrap(cast<BinaryOperator>(I)), in simplifyInstructionWithOperands()
7014 Q.IIQ.hasNoUnsignedWrap(cast<BinaryOperator>(I)), Q, MaxRecurse); in simplifyInstructionWithOperands()
7017 Q.IIQ.isExact(cast<BinaryOperator>(I)), Q, in simplifyInstructionWithOperands()
7021 Q.IIQ.isExact(cast<BinaryOperator>(I)), Q, in simplifyInstructionWithOperands()
7024 return simplifyFDivInst(NewOps[0], NewOps[1], I->getFastMathFlags(), Q, in simplifyInstructionWithOperands()
7027 return simplifySRemInst(NewOps[0], NewOps[1], Q, MaxRecurse); in simplifyInstructionWithOperands()
7029 return simplifyURemInst(NewOps[0], NewOps[1], Q, MaxRecurse); in simplifyInstructionWithOperands()
7031 return simplifyFRemInst(NewOps[0], NewOps[1], I->getFastMathFlags(), Q, in simplifyInstructionWithOperands()
7035 NewOps[0], NewOps[1], Q.IIQ.hasNoSignedWrap(cast<BinaryOperator>(I)), in simplifyInstructionWithOperands()
7036 Q.IIQ.hasNoUnsignedWrap(cast<BinaryOperator>(I)), Q, MaxRecurse); in simplifyInstructionWithOperands()
7039 Q.IIQ.isExact(cast<BinaryOperator>(I)), Q, in simplifyInstructionWithOperands()
7043 Q.IIQ.isExact(cast<BinaryOperator>(I)), Q, in simplifyInstructionWithOperands()
7046 return simplifyAndInst(NewOps[0], NewOps[1], Q, MaxRecurse); in simplifyInstructionWithOperands()
7048 return simplifyOrInst(NewOps[0], NewOps[1], Q, MaxRecurse); in simplifyInstructionWithOperands()
7050 return simplifyXorInst(NewOps[0], NewOps[1], Q, MaxRecurse); in simplifyInstructionWithOperands()
7053 NewOps[1], Q, MaxRecurse); in simplifyInstructionWithOperands()
7056 NewOps[1], I->getFastMathFlags(), Q, MaxRecurse); in simplifyInstructionWithOperands()
7058 return simplifySelectInst(NewOps[0], NewOps[1], NewOps[2], Q, MaxRecurse); in simplifyInstructionWithOperands()
7063 ArrayRef(NewOps).slice(1), GEPI->isInBounds(), Q, in simplifyInstructionWithOperands()
7068 return simplifyInsertValueInst(NewOps[0], NewOps[1], IV->getIndices(), Q, in simplifyInstructionWithOperands()
7072 return simplifyInsertElementInst(NewOps[0], NewOps[1], NewOps[2], Q); in simplifyInstructionWithOperands()
7075 return simplifyExtractValueInst(NewOps[0], EVI->getIndices(), Q, in simplifyInstructionWithOperands()
7079 return simplifyExtractElementInst(NewOps[0], NewOps[1], Q, MaxRecurse); in simplifyInstructionWithOperands()
7083 SVI->getShuffleMask(), SVI->getType(), Q, in simplifyInstructionWithOperands()
7087 return simplifyPHINode(cast<PHINode>(I), NewOps, Q); in simplifyInstructionWithOperands()
7091 NewOps.drop_back(1 + cast<CallInst>(I)->getNumTotalBundleOperands()), Q); in simplifyInstructionWithOperands()
7093 return llvm::simplifyFreezeInst(NewOps[0], Q); in simplifyInstructionWithOperands()
7097 return simplifyCastInst(I->getOpcode(), NewOps[0], I->getType(), Q, in simplifyInstructionWithOperands()
7103 return simplifyLoadInst(cast<LoadInst>(I), NewOps[0], Q); in simplifyInstructionWithOperands()