Lines Matching refs:Q
68 const SimplifyQuery &Q, unsigned MaxRecurse);
154 const SimplifyQuery &Q, unsigned MaxRecurse, in simplifyCmpSelCase() argument
156 Value *SimplifiedCmp = simplifyCmpInst(Pred, LHS, RHS, Q, MaxRecurse); in simplifyCmpSelCase()
171 const SimplifyQuery &Q, in simplifyCmpSelTrueCase() argument
173 return simplifyCmpSelCase(Pred, LHS, RHS, Cond, Q, MaxRecurse, in simplifyCmpSelTrueCase()
180 const SimplifyQuery &Q, in simplifyCmpSelFalseCase() argument
182 return simplifyCmpSelCase(Pred, LHS, RHS, Cond, Q, MaxRecurse, in simplifyCmpSelFalseCase()
190 const SimplifyQuery &Q, in handleOtherCmpSelSimplifications() argument
199 if (Value *V = simplifyAndInst(Cond, TCmp, Q, MaxRecurse)) in handleOtherCmpSelSimplifications()
204 if (Value *V = simplifyOrInst(Cond, FCmp, Q, MaxRecurse)) in handleOtherCmpSelSimplifications()
210 Cond, Constant::getAllOnesValue(Cond->getType()), Q, MaxRecurse)) in handleOtherCmpSelSimplifications()
240 const SimplifyQuery &Q, unsigned MaxRecurse) { in expandBinOp() argument
246 simplifyBinOp(Opcode, B0, OtherOp, Q.getWithoutUndef(), MaxRecurse); in expandBinOp()
250 simplifyBinOp(Opcode, B1, OtherOp, Q.getWithoutUndef(), MaxRecurse); in expandBinOp()
262 Value *S = simplifyBinOp(OpcodeToExpand, L, R, Q, MaxRecurse); in expandBinOp()
275 const SimplifyQuery &Q, in expandCommutativeBinOp() argument
281 if (Value *V = expandBinOp(Opcode, L, R, OpcodeToExpand, Q, MaxRecurse)) in expandCommutativeBinOp()
283 if (Value *V = expandBinOp(Opcode, R, L, OpcodeToExpand, Q, MaxRecurse)) in expandCommutativeBinOp()
292 const SimplifyQuery &Q, in simplifyAssociativeBinOp() argument
310 if (Value *V = simplifyBinOp(Opcode, B, C, Q, MaxRecurse)) { in simplifyAssociativeBinOp()
316 if (Value *W = simplifyBinOp(Opcode, A, V, Q, MaxRecurse)) { in simplifyAssociativeBinOp()
330 if (Value *V = simplifyBinOp(Opcode, A, B, Q, MaxRecurse)) { in simplifyAssociativeBinOp()
336 if (Value *W = simplifyBinOp(Opcode, V, C, Q, MaxRecurse)) { in simplifyAssociativeBinOp()
354 if (Value *V = simplifyBinOp(Opcode, C, A, Q, MaxRecurse)) { in simplifyAssociativeBinOp()
360 if (Value *W = simplifyBinOp(Opcode, V, B, Q, MaxRecurse)) { in simplifyAssociativeBinOp()
374 if (Value *V = simplifyBinOp(Opcode, C, A, Q, MaxRecurse)) { in simplifyAssociativeBinOp()
380 if (Value *W = simplifyBinOp(Opcode, B, V, Q, MaxRecurse)) { in simplifyAssociativeBinOp()
395 Value *RHS, const SimplifyQuery &Q, in threadBinOpOverSelect() argument
413 TV = simplifyBinOp(Opcode, SI->getTrueValue(), RHS, Q, MaxRecurse); in threadBinOpOverSelect()
414 FV = simplifyBinOp(Opcode, SI->getFalseValue(), RHS, Q, MaxRecurse); in threadBinOpOverSelect()
416 TV = simplifyBinOp(Opcode, LHS, SI->getTrueValue(), Q, MaxRecurse); in threadBinOpOverSelect()
417 FV = simplifyBinOp(Opcode, LHS, SI->getFalseValue(), Q, MaxRecurse); in threadBinOpOverSelect()
426 if (TV && Q.isUndefValue(TV)) in threadBinOpOverSelect()
428 if (FV && Q.isUndefValue(FV)) in threadBinOpOverSelect()
474 Value *RHS, const SimplifyQuery &Q, in threadCmpOverSelect() argument
493 Value *TCmp = simplifyCmpSelTrueCase(Pred, TV, RHS, Cond, Q, MaxRecurse); in threadCmpOverSelect()
498 Value *FCmp = simplifyCmpSelFalseCase(Pred, FV, RHS, Cond, Q, MaxRecurse); in threadCmpOverSelect()
510 return handleOtherCmpSelSimplifications(TCmp, FCmp, Cond, Q, MaxRecurse); in threadCmpOverSelect()
520 Value *RHS, const SimplifyQuery &Q, in threadBinOpOverPHI() argument
530 if (!valueDominatesPHI(RHS, PI, Q.DT)) in threadBinOpOverPHI()
536 if (!valueDominatesPHI(LHS, PI, Q.DT)) in threadBinOpOverPHI()
549 Q.getWithInstruction(InTI), MaxRecurse) in threadBinOpOverPHI()
551 Q.getWithInstruction(InTI), MaxRecurse); in threadBinOpOverPHI()
567 const SimplifyQuery &Q, unsigned MaxRecurse) { in threadCmpOverPHI() argument
581 if (!valueDominatesPHI(RHS, PI, Q.DT)) in threadCmpOverPHI()
595 Value *V = simplifyCmpInst(Pred, Incoming, RHS, Q.getWithInstruction(InTI), in threadCmpOverPHI()
609 const SimplifyQuery &Q) { in foldOrCommuteConstant() argument
620 if (Q.CxtI != nullptr) in foldOrCommuteConstant()
621 return ConstantFoldFPInstOperands(Opcode, CLHS, CRHS, Q.DL, Q.CxtI); in foldOrCommuteConstant()
623 return ConstantFoldBinaryOpOperands(Opcode, CLHS, CRHS, Q.DL); in foldOrCommuteConstant()
636 const SimplifyQuery &Q, unsigned MaxRecurse) { in simplifyAddInst() argument
637 if (Constant *C = foldOrCommuteConstant(Instruction::Add, Op0, Op1, Q)) in simplifyAddInst()
645 if (Q.isUndefValue(Op1)) in simplifyAddInst()
682 if (Value *V = simplifyXorInst(Op0, Op1, Q, MaxRecurse - 1)) in simplifyAddInst()
687 simplifyAssociativeBinOp(Instruction::Add, Op0, Op1, Q, MaxRecurse)) in simplifyAddInst()
754 const SimplifyQuery &Q, unsigned MaxRecurse) { in simplifyByDomEq() argument
760 isImpliedByDomCondition(CmpInst::ICMP_EQ, Op0, Op1, Q.CxtI, Q.DL); in simplifyByDomEq()
788 const SimplifyQuery &Q, unsigned MaxRecurse) { in simplifySubInst() argument
789 if (Constant *C = foldOrCommuteConstant(Instruction::Sub, Op0, Op1, Q)) in simplifySubInst()
799 if (Q.isUndefValue(Op0) || Q.isUndefValue(Op1)) in simplifySubInst()
816 KnownBits Known = computeKnownBits(Op1, /* Depth */ 0, Q); in simplifySubInst()
833 if (Value *V = simplifyBinOp(Instruction::Sub, Y, Z, Q, MaxRecurse - 1)) in simplifySubInst()
835 if (Value *W = simplifyBinOp(Instruction::Add, X, V, Q, MaxRecurse - 1)) { in simplifySubInst()
841 if (Value *V = simplifyBinOp(Instruction::Sub, X, Z, Q, MaxRecurse - 1)) in simplifySubInst()
843 if (Value *W = simplifyBinOp(Instruction::Add, Y, V, Q, MaxRecurse - 1)) { in simplifySubInst()
855 if (Value *V = simplifyBinOp(Instruction::Sub, X, Y, Q, MaxRecurse - 1)) in simplifySubInst()
857 if (Value *W = simplifyBinOp(Instruction::Sub, V, Z, Q, MaxRecurse - 1)) { in simplifySubInst()
863 if (Value *V = simplifyBinOp(Instruction::Sub, X, Z, Q, MaxRecurse - 1)) in simplifySubInst()
865 if (Value *W = simplifyBinOp(Instruction::Sub, V, Y, Q, MaxRecurse - 1)) { in simplifySubInst()
877 if (Value *V = simplifyBinOp(Instruction::Sub, Z, X, Q, MaxRecurse - 1)) in simplifySubInst()
879 if (Value *W = simplifyBinOp(Instruction::Add, V, Y, Q, MaxRecurse - 1)) { in simplifySubInst()
890 if (Value *V = simplifyBinOp(Instruction::Sub, X, Y, Q, MaxRecurse - 1)) in simplifySubInst()
893 Q, MaxRecurse - 1)) in simplifySubInst()
899 if (Constant *Result = computePointerDifference(Q.DL, X, Y)) in simplifySubInst()
901 Q.DL); in simplifySubInst()
905 if (Value *V = simplifyXorInst(Op0, Op1, Q, MaxRecurse - 1)) in simplifySubInst()
917 if (Value *V = simplifyByDomEq(Instruction::Sub, Op0, Op1, Q, MaxRecurse)) in simplifySubInst()
924 const SimplifyQuery &Q) { in simplifySubInst() argument
925 return ::simplifySubInst(Op0, Op1, IsNSW, IsNUW, Q, RecursionLimit); in simplifySubInst()
931 const SimplifyQuery &Q, unsigned MaxRecurse) { in simplifyMulInst() argument
932 if (Constant *C = foldOrCommuteConstant(Instruction::Mul, Op0, Op1, Q)) in simplifyMulInst()
941 if (Q.isUndefValue(Op1) || match(Op1, m_Zero())) in simplifyMulInst()
950 if (Q.IIQ.UseInstrInfo && in simplifyMulInst()
964 if (Value *V = simplifyAndInst(Op0, Op1, Q, MaxRecurse - 1)) in simplifyMulInst()
970 simplifyAssociativeBinOp(Instruction::Mul, Op0, Op1, Q, MaxRecurse)) in simplifyMulInst()
975 Instruction::Add, Q, MaxRecurse)) in simplifyMulInst()
982 threadBinOpOverSelect(Instruction::Mul, Op0, Op1, Q, MaxRecurse)) in simplifyMulInst()
989 threadBinOpOverPHI(Instruction::Mul, Op0, Op1, Q, MaxRecurse)) in simplifyMulInst()
996 const SimplifyQuery &Q) { in simplifyMulInst() argument
997 return ::simplifyMulInst(Op0, Op1, IsNSW, IsNUW, Q, RecursionLimit); in simplifyMulInst()
1004 const SimplifyQuery &Q, unsigned MaxRecurse) { in isICmpTrue() argument
1005 Value *V = simplifyICmpInst(Pred, LHS, RHS, Q, MaxRecurse); in isICmpTrue()
1012 static bool isDivZero(Value *X, Value *Y, const SimplifyQuery &Q, in isDivZero() argument
1038 if (isICmpTrue(CmpInst::ICMP_SLT, Y, NegDividendC, Q, MaxRecurse) || in isDivZero()
1039 isICmpTrue(CmpInst::ICMP_SGT, Y, PosDividendC, Q, MaxRecurse)) in isDivZero()
1047 return isICmpTrue(CmpInst::ICMP_NE, X, Y, Q, MaxRecurse); in isDivZero()
1054 if (isICmpTrue(CmpInst::ICMP_SGT, X, NegDivisorC, Q, MaxRecurse) && in isDivZero()
1055 isICmpTrue(CmpInst::ICMP_SLT, X, PosDivisorC, Q, MaxRecurse)) in isDivZero()
1068 computeKnownBits(X, /* Depth */ 0, Q).getMaxValue().ult(*C)) in isDivZero()
1073 return isICmpTrue(ICmpInst::ICMP_ULT, X, Y, Q, MaxRecurse); in isDivZero()
1079 Value *Op1, const SimplifyQuery &Q, in simplifyDivRem() argument
1088 if (Q.isUndefValue(Op1) || isa<PoisonValue>(Op1)) in simplifyDivRem()
1105 if (Elt && (Elt->isNullValue() || Q.isUndefValue(Elt))) in simplifyDivRem()
1117 if (Q.isUndefValue(Op0)) in simplifyDivRem()
1130 KnownBits Known = computeKnownBits(Op1, /* Depth */ 0, Q); in simplifyDivRem()
1155 if ((IsSigned && Q.IIQ.hasNoSignedWrap(Mul)) || in simplifyDivRem()
1156 (!IsSigned && Q.IIQ.hasNoUnsignedWrap(Mul)) || in simplifyDivRem()
1163 if (isDivZero(Op0, Op1, Q, MaxRecurse, IsSigned)) in simplifyDivRem()
1166 if (Value *V = simplifyByDomEq(Opcode, Op0, Op1, Q, MaxRecurse)) in simplifyDivRem()
1172 if (Value *V = threadBinOpOverSelect(Opcode, Op0, Op1, Q, MaxRecurse)) in simplifyDivRem()
1178 if (Value *V = threadBinOpOverPHI(Opcode, Op0, Op1, Q, MaxRecurse)) in simplifyDivRem()
1186 bool IsExact, const SimplifyQuery &Q, in simplifyDiv() argument
1188 if (Constant *C = foldOrCommuteConstant(Opcode, Op0, Op1, Q)) in simplifyDiv()
1191 if (Value *V = simplifyDivRem(Opcode, Op0, Op1, Q, MaxRecurse)) in simplifyDiv()
1200 KnownBits KnownOp0 = computeKnownBits(Op0, /* Depth */ 0, Q); in simplifyDiv()
1221 const SimplifyQuery &Q, unsigned MaxRecurse) { in simplifyRem() argument
1222 if (Constant *C = foldOrCommuteConstant(Opcode, Op0, Op1, Q)) in simplifyRem()
1225 if (Value *V = simplifyDivRem(Opcode, Op0, Op1, Q, MaxRecurse)) in simplifyRem()
1229 if (Q.IIQ.UseInstrInfo) { in simplifyRem()
1258 const SimplifyQuery &Q, unsigned MaxRecurse) { in simplifySDivInst() argument
1263 return simplifyDiv(Instruction::SDiv, Op0, Op1, IsExact, Q, MaxRecurse); in simplifySDivInst()
1267 const SimplifyQuery &Q) { in simplifySDivInst() argument
1268 return ::simplifySDivInst(Op0, Op1, IsExact, Q, RecursionLimit); in simplifySDivInst()
1274 const SimplifyQuery &Q, unsigned MaxRecurse) { in simplifyUDivInst() argument
1275 return simplifyDiv(Instruction::UDiv, Op0, Op1, IsExact, Q, MaxRecurse); in simplifyUDivInst()
1279 const SimplifyQuery &Q) { in simplifyUDivInst() argument
1280 return ::simplifyUDivInst(Op0, Op1, IsExact, Q, RecursionLimit); in simplifyUDivInst()
1285 static Value *simplifySRemInst(Value *Op0, Value *Op1, const SimplifyQuery &Q, in simplifySRemInst() argument
1297 return simplifyRem(Instruction::SRem, Op0, Op1, Q, MaxRecurse); in simplifySRemInst()
1300 Value *llvm::simplifySRemInst(Value *Op0, Value *Op1, const SimplifyQuery &Q) { in simplifySRemInst() argument
1301 return ::simplifySRemInst(Op0, Op1, Q, RecursionLimit); in simplifySRemInst()
1306 static Value *simplifyURemInst(Value *Op0, Value *Op1, const SimplifyQuery &Q, in simplifyURemInst() argument
1308 return simplifyRem(Instruction::URem, Op0, Op1, Q, MaxRecurse); in simplifyURemInst()
1311 Value *llvm::simplifyURemInst(Value *Op0, Value *Op1, const SimplifyQuery &Q) { in simplifyURemInst() argument
1312 return ::simplifyURemInst(Op0, Op1, Q, RecursionLimit); in simplifyURemInst()
1316 static bool isPoisonShift(Value *Amount, const SimplifyQuery &Q) { in isPoisonShift() argument
1322 if (Q.isUndefValue(C)) in isPoisonShift()
1337 if (!isPoisonShift(C->getAggregateElement(I), Q)) in isPoisonShift()
1348 Value *Op1, bool IsNSW, const SimplifyQuery &Q, in simplifyShift() argument
1350 if (Constant *C = foldOrCommuteConstant(Opcode, Op0, Op1, Q)) in simplifyShift()
1370 if (isPoisonShift(Op1, Q)) in simplifyShift()
1376 if (Value *V = threadBinOpOverSelect(Opcode, Op0, Op1, Q, MaxRecurse)) in simplifyShift()
1382 if (Value *V = threadBinOpOverPHI(Opcode, Op0, Op1, Q, MaxRecurse)) in simplifyShift()
1387 KnownBits KnownAmt = computeKnownBits(Op1, /* Depth */ 0, Q); in simplifyShift()
1400 KnownBits KnownVal = computeKnownBits(Op0, /* Depth */ 0, Q); in simplifyShift()
1419 const SimplifyQuery &Q, unsigned MaxRecurse) { in simplifyRightShift() argument
1421 simplifyShift(Opcode, Op0, Op1, /*IsNSW*/ false, Q, MaxRecurse)) in simplifyRightShift()
1430 if (Q.isUndefValue(Op0)) in simplifyRightShift()
1436 KnownBits Op0Known = computeKnownBits(Op0, /* Depth */ 0, Q); in simplifyRightShift()
1447 const SimplifyQuery &Q, unsigned MaxRecurse) { in simplifyShlInst() argument
1449 simplifyShift(Instruction::Shl, Op0, Op1, IsNSW, Q, MaxRecurse)) in simplifyShlInst()
1455 if (Q.isUndefValue(Op0)) in simplifyShlInst()
1460 if (Q.IIQ.UseInstrInfo && in simplifyShlInst()
1481 const SimplifyQuery &Q) { in simplifyShlInst() argument
1482 return ::simplifyShlInst(Op0, Op1, IsNSW, IsNUW, Q, RecursionLimit); in simplifyShlInst()
1488 const SimplifyQuery &Q, unsigned MaxRecurse) { in simplifyLShrInst() argument
1489 if (Value *V = simplifyRightShift(Instruction::LShr, Op0, Op1, IsExact, Q, in simplifyLShrInst()
1495 if (Q.IIQ.UseInstrInfo && match(Op0, m_NUWShl(m_Value(X), m_Specific(Op1)))) in simplifyLShrInst()
1505 if (Q.IIQ.UseInstrInfo && match(Op1, m_APInt(ShRAmt)) && in simplifyLShrInst()
1508 const KnownBits YKnown = computeKnownBits(Y, /* Depth */ 0, Q); in simplifyLShrInst()
1518 const SimplifyQuery &Q) { in simplifyLShrInst() argument
1519 return ::simplifyLShrInst(Op0, Op1, IsExact, Q, RecursionLimit); in simplifyLShrInst()
1525 const SimplifyQuery &Q, unsigned MaxRecurse) { in simplifyAShrInst() argument
1526 if (Value *V = simplifyRightShift(Instruction::AShr, Op0, Op1, IsExact, Q, in simplifyAShrInst()
1539 if (Q.IIQ.UseInstrInfo && match(Op0, m_NSWShl(m_Value(X), m_Specific(Op1)))) in simplifyAShrInst()
1543 unsigned NumSignBits = ComputeNumSignBits(Op0, Q.DL, 0, Q.AC, Q.CxtI, Q.DT); in simplifyAShrInst()
1551 const SimplifyQuery &Q) { in simplifyAShrInst() argument
1552 return ::simplifyAShrInst(Op0, Op1, IsExact, Q, RecursionLimit); in simplifyAShrInst()
1559 const SimplifyQuery &Q) { in simplifyUnsignedRangeCheck() argument
1605 EqPred == ICmpInst::ICMP_NE && isKnownNonZero(B, Q)) in simplifyUnsignedRangeCheck()
1608 EqPred == ICmpInst::ICMP_EQ && isKnownNonZero(B, Q)) in simplifyUnsignedRangeCheck()
1626 isKnownNonZero(X, Q)) in simplifyUnsignedRangeCheck()
1632 isKnownNonZero(X, Q)) in simplifyUnsignedRangeCheck()
1772 const SimplifyQuery &Q) { in simplifyAndOfICmps() argument
1773 if (Value *X = simplifyUnsignedRangeCheck(Op0, Op1, /*IsAnd=*/true, Q)) in simplifyAndOfICmps()
1775 if (Value *X = simplifyUnsignedRangeCheck(Op1, Op0, /*IsAnd=*/true, Q)) in simplifyAndOfICmps()
1786 if (Value *X = simplifyAndOfICmpsWithAdd(Op0, Op1, Q.IIQ)) in simplifyAndOfICmps()
1788 if (Value *X = simplifyAndOfICmpsWithAdd(Op1, Op0, Q.IIQ)) in simplifyAndOfICmps()
1842 const SimplifyQuery &Q) { in simplifyOrOfICmps() argument
1843 if (Value *X = simplifyUnsignedRangeCheck(Op0, Op1, /*IsAnd=*/false, Q)) in simplifyOrOfICmps()
1845 if (Value *X = simplifyUnsignedRangeCheck(Op1, Op0, /*IsAnd=*/false, Q)) in simplifyOrOfICmps()
1856 if (Value *X = simplifyOrOfICmpsWithAdd(Op0, Op1, Q.IIQ)) in simplifyOrOfICmps()
1858 if (Value *X = simplifyOrOfICmpsWithAdd(Op1, Op0, Q.IIQ)) in simplifyOrOfICmps()
1864 static Value *simplifyAndOrOfFCmps(const SimplifyQuery &Q, FCmpInst *LHS, in simplifyAndOrOfFCmps() argument
1901 static Value *simplifyAndOrOfCmps(const SimplifyQuery &Q, Value *Op0, in simplifyAndOrOfCmps() argument
1916 V = IsAnd ? simplifyAndOfICmps(ICmp0, ICmp1, Q) in simplifyAndOrOfCmps()
1917 : simplifyOrOfICmps(ICmp0, ICmp1, Q); in simplifyAndOrOfCmps()
1922 V = simplifyAndOrOfFCmps(Q, FCmp0, FCmp1, IsAnd); in simplifyAndOrOfCmps()
1933 Q.DL); in simplifyAndOrOfCmps()
1939 const SimplifyQuery &Q,
1945 const SimplifyQuery &Q, in simplifyAndOrWithICmpEq() argument
1981 if (Value *Res = simplifyWithOpReplaced(Op1, A, B, Q.getWithoutUndef(), in simplifyAndOrWithICmpEq()
1985 if (Value *Res = simplifyWithOpReplaced(Op1, B, A, Q.getWithoutUndef(), in simplifyAndOrWithICmpEq()
2019 const SimplifyQuery &Q, in simplifyAndCommutative() argument
2043 isKnownToBeAPowerOfTwo(Op1, Q.DL, /*OrZero*/ true, 0, Q.AC, Q.CxtI, Q.DT)) in simplifyAndCommutative()
2049 isKnownToBeAPowerOfTwo(Op1, Q.DL, /*OrZero*/ true, 0, Q.AC, Q.CxtI, Q.DT)) in simplifyAndCommutative()
2057 isKnownToBeAPowerOfTwo(X, Q.DL, /*OrZero*/ true, /*Depth*/ 0, Q.AC, in simplifyAndCommutative()
2058 Q.CxtI) && in simplifyAndCommutative()
2063 simplifyAndOrWithICmpEq(Instruction::And, Op0, Op1, Q, MaxRecurse)) in simplifyAndCommutative()
2071 static Value *simplifyAndInst(Value *Op0, Value *Op1, const SimplifyQuery &Q, in simplifyAndInst() argument
2073 if (Constant *C = foldOrCommuteConstant(Instruction::And, Op0, Op1, Q)) in simplifyAndInst()
2081 if (Q.isUndefValue(Op1)) in simplifyAndInst()
2096 if (Value *Res = simplifyAndCommutative(Op0, Op1, Q, MaxRecurse)) in simplifyAndInst()
2098 if (Value *Res = simplifyAndCommutative(Op1, Op0, Q, MaxRecurse)) in simplifyAndInst()
2127 isKnownToBeAPowerOfTwo(Shift, Q.DL, /*OrZero*/ false, 0, Q.AC, Q.CxtI, in simplifyAndInst()
2128 Q.DT)) { in simplifyAndInst()
2129 KnownBits Known = computeKnownBits(Shift, /* Depth */ 0, Q); in simplifyAndInst()
2135 if (Value *V = simplifyAndOrOfCmps(Q, Op0, Op1, true)) in simplifyAndInst()
2140 simplifyAssociativeBinOp(Instruction::And, Op0, Op1, Q, MaxRecurse)) in simplifyAndInst()
2145 Instruction::Or, Q, MaxRecurse)) in simplifyAndInst()
2150 Instruction::Xor, Q, MaxRecurse)) in simplifyAndInst()
2165 threadBinOpOverSelect(Instruction::And, Op0, Op1, Q, MaxRecurse)) in simplifyAndInst()
2173 threadBinOpOverPHI(Instruction::And, Op0, Op1, Q, MaxRecurse)) in simplifyAndInst()
2187 if (Q.IIQ.UseInstrInfo && match(Op1, m_APInt(Mask)) && in simplifyAndInst()
2193 const KnownBits YKnown = computeKnownBits(Y, /* Depth */ 0, Q); in simplifyAndInst()
2196 const KnownBits XKnown = computeKnownBits(X, /* Depth */ 0, Q); in simplifyAndInst()
2226 if (std::optional<bool> Implied = isImpliedCondition(Op0, Op1, Q.DL)) { in simplifyAndInst()
2234 if (std::optional<bool> Implied = isImpliedCondition(Op1, Op0, Q.DL)) { in simplifyAndInst()
2244 if (Value *V = simplifyByDomEq(Instruction::And, Op0, Op1, Q, MaxRecurse)) in simplifyAndInst()
2250 Value *llvm::simplifyAndInst(Value *Op0, Value *Op1, const SimplifyQuery &Q) { in simplifyAndInst() argument
2251 return ::simplifyAndInst(Op0, Op1, Q, RecursionLimit); in simplifyAndInst()
2346 static Value *simplifyOrInst(Value *Op0, Value *Op1, const SimplifyQuery &Q, in simplifyOrInst() argument
2348 if (Constant *C = foldOrCommuteConstant(Instruction::Or, Op0, Op1, Q)) in simplifyOrInst()
2358 if (Q.isUndefValue(Op1) || match(Op1, m_AllOnes())) in simplifyOrInst()
2417 simplifyAndOrWithICmpEq(Instruction::Or, Op0, Op1, Q, MaxRecurse)) in simplifyOrInst()
2420 simplifyAndOrWithICmpEq(Instruction::Or, Op1, Op0, Q, MaxRecurse)) in simplifyOrInst()
2423 if (Value *V = simplifyAndOrOfCmps(Q, Op0, Op1, false)) in simplifyOrInst()
2436 simplifyAssociativeBinOp(Instruction::Or, Op0, Op1, Q, MaxRecurse)) in simplifyOrInst()
2441 Instruction::And, Q, MaxRecurse)) in simplifyOrInst()
2456 threadBinOpOverSelect(Instruction::Or, Op0, Op1, Q, MaxRecurse)) in simplifyOrInst()
2474 if (MaskedValueIsZero(N, *C2, Q)) in simplifyOrInst()
2480 if (MaskedValueIsZero(N, *C1, Q)) in simplifyOrInst()
2489 if (Value *V = threadBinOpOverPHI(Instruction::Or, Op0, Op1, Q, MaxRecurse)) in simplifyOrInst()
2499 isImpliedCondition(Op0, Op1, Q.DL, false)) { in simplifyOrInst()
2508 isImpliedCondition(Op1, Op0, Q.DL, false)) { in simplifyOrInst()
2518 if (Value *V = simplifyByDomEq(Instruction::Or, Op0, Op1, Q, MaxRecurse)) in simplifyOrInst()
2524 Value *llvm::simplifyOrInst(Value *Op0, Value *Op1, const SimplifyQuery &Q) { in simplifyOrInst() argument
2525 return ::simplifyOrInst(Op0, Op1, Q, RecursionLimit); in simplifyOrInst()
2530 static Value *simplifyXorInst(Value *Op0, Value *Op1, const SimplifyQuery &Q, in simplifyXorInst() argument
2532 if (Constant *C = foldOrCommuteConstant(Instruction::Xor, Op0, Op1, Q)) in simplifyXorInst()
2540 if (Q.isUndefValue(Op1)) in simplifyXorInst()
2583 simplifyAssociativeBinOp(Instruction::Xor, Op0, Op1, Q, MaxRecurse)) in simplifyXorInst()
2595 if (Value *V = simplifyByDomEq(Instruction::Xor, Op0, Op1, Q, MaxRecurse)) in simplifyXorInst()
2601 Value *llvm::simplifyXorInst(Value *Op0, Value *Op1, const SimplifyQuery &Q) { in simplifyXorInst() argument
2602 return ::simplifyXorInst(Op0, Op1, Q, RecursionLimit); in simplifyXorInst()
2722 Value *RHS, const SimplifyQuery &Q) { in computePointerICmp() argument
2724 const DataLayout &DL = Q.DL; in computePointerICmp()
2725 const TargetLibraryInfo *TLI = Q.TLI; in computePointerICmp()
2830 if (isAllocLikeFn(LHS, TLI) && llvm::isKnownNonZero(RHS, Q)) in computePointerICmp()
2832 else if (isAllocLikeFn(RHS, TLI) && llvm::isKnownNonZero(LHS, Q)) in computePointerICmp()
2871 Value *RHS, const SimplifyQuery &Q) { in simplifyICmpOfBools() argument
2944 if (isImpliedCondition(RHS, LHS, Q.DL).value_or(false)) in simplifyICmpOfBools()
2955 if (isImpliedCondition(LHS, RHS, Q.DL).value_or(false)) in simplifyICmpOfBools()
2959 if (isImpliedCondition(LHS, RHS, Q.DL).value_or(false)) in simplifyICmpOfBools()
2964 if (isImpliedCondition(RHS, LHS, Q.DL).value_or(false)) in simplifyICmpOfBools()
2974 Value *RHS, const SimplifyQuery &Q) { in simplifyICmpWithZero() argument
2988 if (isKnownNonZero(LHS, Q)) in simplifyICmpWithZero()
2993 if (isKnownNonZero(LHS, Q)) in simplifyICmpWithZero()
2997 KnownBits LHSKnown = computeKnownBits(LHS, /* Depth */ 0, Q); in simplifyICmpWithZero()
3005 KnownBits LHSKnown = computeKnownBits(LHS, /* Depth */ 0, Q); in simplifyICmpWithZero()
3008 if (LHSKnown.isNonNegative() && isKnownNonZero(LHS, Q)) in simplifyICmpWithZero()
3013 KnownBits LHSKnown = computeKnownBits(LHS, /* Depth */ 0, Q); in simplifyICmpWithZero()
3021 KnownBits LHSKnown = computeKnownBits(LHS, /* Depth */ 0, Q); in simplifyICmpWithZero()
3024 if (LHSKnown.isNonNegative() && isKnownNonZero(LHS, Q)) 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)) { 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)) 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()
3753 const SimplifyQuery &Q, unsigned MaxRecurse) { in simplifyICmpInst() argument
3759 return ConstantFoldCompareInstOperands(Pred, CLHS, CRHS, Q.DL, Q.TLI); in simplifyICmpInst()
3776 if (Q.isUndefValue(RHS) && ICmpInst::isEquality(Pred)) in simplifyICmpInst()
3781 if (LHS == RHS || Q.isUndefValue(RHS)) in simplifyICmpInst()
3784 if (Value *V = simplifyICmpOfBools(Pred, LHS, RHS, Q)) in simplifyICmpInst()
3789 if (Value *V = simplifyICmpWithZero(Pred, LHS, RHS, Q)) in simplifyICmpInst()
3792 if (Value *V = simplifyICmpWithConstant(Pred, LHS, RHS, Q.IIQ)) in simplifyICmpInst()
3797 if (std::optional<ConstantRange> RhsCr = getRange(RHS, Q.IIQ)) in simplifyICmpInst()
3798 if (std::optional<ConstantRange> LhsCr = getRange(LHS, Q.IIQ)) { in simplifyICmpInst()
3816 Q.DL.getTypeSizeInBits(SrcTy) == DstTy->getPrimitiveSizeInBits()) { in simplifyICmpInst()
3821 Q, MaxRecurse - 1)) in simplifyICmpInst()
3826 if (Value *V = simplifyICmpInst(Pred, SrcOp, RI->getOperand(0), Q, in simplifyICmpInst()
3840 RI->getOperand(0), Q, MaxRecurse - 1)) in simplifyICmpInst()
3861 ConstantFoldCastOperand(Instruction::Trunc, C, SrcTy, Q.DL); in simplifyICmpInst()
3864 ConstantFoldCastOperand(CastInst::ZExt, Trunc, DstTy, Q.DL); in simplifyICmpInst()
3867 ConstantFoldCompareInstOperands(ICmpInst::ICMP_EQ, RExt, C, Q.DL); in simplifyICmpInst()
3875 SrcOp, Trunc, Q, MaxRecurse - 1)) in simplifyICmpInst()
3901 Q.DL); in simplifyICmpInst()
3906 Q.DL); in simplifyICmpInst()
3918 if (Value *V = simplifyICmpInst(Pred, SrcOp, RI->getOperand(0), Q, in simplifyICmpInst()
3939 ConstantFoldCastOperand(Instruction::Trunc, C, SrcTy, Q.DL); in simplifyICmpInst()
3942 ConstantFoldCastOperand(CastInst::SExt, Trunc, DstTy, Q.DL); in simplifyICmpInst()
3945 ConstantFoldCompareInstOperands(ICmpInst::ICMP_EQ, RExt, C, Q.DL); in simplifyICmpInst()
3952 simplifyICmpInst(Pred, SrcOp, Trunc, Q, MaxRecurse - 1)) in simplifyICmpInst()
3972 Q.DL); in simplifyICmpInst()
3977 Q.DL); in simplifyICmpInst()
3986 Constant::getNullValue(SrcTy), Q, in simplifyICmpInst()
3995 Constant::getNullValue(SrcTy), Q, in simplifyICmpInst()
4009 isKnownNonEqual(LHS, RHS, Q.DL, Q.AC, Q.CxtI, Q.DT, Q.IIQ.UseInstrInfo)) { in simplifyICmpInst()
4013 if (Value *V = simplifyICmpWithBinOp(Pred, LHS, RHS, Q, MaxRecurse)) in simplifyICmpInst()
4016 if (Value *V = simplifyICmpWithMinMax(Pred, LHS, RHS, Q, MaxRecurse)) in simplifyICmpInst()
4025 if (Value *V = simplifyICmpWithDominatingAssume(Pred, LHS, RHS, Q)) in simplifyICmpInst()
4029 isImpliedByDomCondition(Pred, LHS, RHS, Q.CxtI, Q.DL)) in simplifyICmpInst()
4035 if (auto *C = computePointerICmp(Pred, LHS, RHS, Q)) in simplifyICmpInst()
4040 Q.DL.getTypeSizeInBits(CLHS->getPointerOperandType()) == in simplifyICmpInst()
4041 Q.DL.getTypeSizeInBits(CLHS->getType())) in simplifyICmpInst()
4043 CRHS->getPointerOperand(), Q)) in simplifyICmpInst()
4049 if (Value *V = threadCmpOverSelect(Pred, LHS, RHS, Q, MaxRecurse)) in simplifyICmpInst()
4055 if (Value *V = threadCmpOverPHI(Pred, LHS, RHS, Q, MaxRecurse)) in simplifyICmpInst()
4062 const SimplifyQuery &Q) { in simplifyICmpInst() argument
4063 return ::simplifyICmpInst(Predicate, LHS, RHS, Q, RecursionLimit); in simplifyICmpInst()
4069 FastMathFlags FMF, const SimplifyQuery &Q, in simplifyFCmpInst() argument
4076 return ConstantFoldCompareInstOperands(Pred, CLHS, CRHS, Q.DL, Q.TLI, in simplifyFCmpInst()
4077 Q.CxtI); in simplifyFCmpInst()
4098 if (Q.isUndefValue(LHS) || Q.isUndefValue(RHS)) { in simplifyFCmpInst()
4118 computeKnownFPClass(RHS, fcAllFlags, /*Depth=*/0, Q); in simplifyFCmpInst()
4120 computeKnownFPClass(LHS, fcAllFlags, /*Depth=*/0, Q); in simplifyFCmpInst()
4140 return computeKnownFPClass(LHS, FMF, InterestedFlags, 0, Q); in simplifyFCmpInst()
4143 if (C && Q.CxtI) { in simplifyFCmpInst()
4149 const Function *ParentF = Q.CxtI->getFunction(); in simplifyFCmpInst()
4284 if (Value *V = threadCmpOverSelect(Pred, LHS, RHS, Q, MaxRecurse)) in simplifyFCmpInst()
4290 if (Value *V = threadCmpOverPHI(Pred, LHS, RHS, Q, MaxRecurse)) in simplifyFCmpInst()
4297 FastMathFlags FMF, const SimplifyQuery &Q) { in simplifyFCmpInst() argument
4298 return ::simplifyFCmpInst(Predicate, LHS, RHS, FMF, Q, RecursionLimit); in simplifyFCmpInst()
4302 const SimplifyQuery &Q, in simplifyWithOpReplaced() argument
4306 assert((AllowRefinement || !Q.CanUseUndef) && in simplifyWithOpReplaced()
4350 InstOp, Op, RepOp, Q, AllowRefinement, DropFlags, MaxRecurse)) { in simplifyWithOpReplaced()
4359 if (isa<UndefValue>(NewOps.back()) && !Q.CanUseUndef) in simplifyWithOpReplaced()
4436 ::simplifyInstructionWithOperands(I, NewOps, Q, MaxRecurse)); in simplifyWithOpReplaced()
4468 Constant *Res = ConstantFoldInstOperands(I, ConstOps, Q.DL, Q.TLI); in simplifyWithOpReplaced()
4474 return ConstantFoldInstOperands(I, ConstOps, Q.DL, Q.TLI); in simplifyWithOpReplaced()
4478 const SimplifyQuery &Q, in simplifyWithOpReplaced() argument
4484 return ::simplifyWithOpReplaced(V, Op, RepOp, Q.getWithoutUndef(), in simplifyWithOpReplaced()
4486 return ::simplifyWithOpReplaced(V, Op, RepOp, Q, AllowRefinement, DropFlags, in simplifyWithOpReplaced()
4623 const SimplifyQuery &Q, in simplifySelectWithICmpEq() argument
4625 if (simplifyWithOpReplaced(FalseVal, CmpLHS, CmpRHS, Q.getWithoutUndef(), in simplifySelectWithICmpEq()
4629 if (simplifyWithOpReplaced(TrueVal, CmpLHS, CmpRHS, Q, in simplifySelectWithICmpEq()
4641 const SimplifyQuery &Q, in simplifySelectWithICmpCond() argument
4726 Q, MaxRecurse)) in simplifySelectWithICmpCond()
4729 Q, MaxRecurse)) in simplifySelectWithICmpCond()
4738 if (Value *V = simplifySelectWithICmpEq(X, CmpRHS, TrueVal, FalseVal, Q, in simplifySelectWithICmpCond()
4741 if (Value *V = simplifySelectWithICmpEq(Y, CmpRHS, TrueVal, FalseVal, Q, in simplifySelectWithICmpCond()
4750 if (Value *V = simplifySelectWithICmpEq(X, CmpRHS, TrueVal, FalseVal, Q, in simplifySelectWithICmpCond()
4753 if (Value *V = simplifySelectWithICmpEq(Y, CmpRHS, TrueVal, FalseVal, Q, in simplifySelectWithICmpCond()
4765 const SimplifyQuery &Q) { in simplifySelectWithFCmp() argument
4775 Q.CxtI && isa<FPMathOperator>(Q.CxtI) && Q.CxtI->hasNoSignedZeros(); in simplifySelectWithFCmp()
4796 const SimplifyQuery &Q, unsigned MaxRecurse) { in simplifySelectInst() argument
4808 if (Q.isUndefValue(CondC)) in simplifySelectInst()
4915 (Q.isUndefValue(TrueVal) && impliesPoison(FalseVal, Cond))) in simplifySelectInst()
4920 (Q.isUndefValue(FalseVal) && impliesPoison(TrueVal, Cond))) in simplifySelectInst()
4943 (Q.isUndefValue(TEltC) && isGuaranteedNotToBePoison(FEltC))) in simplifySelectInst()
4946 (Q.isUndefValue(FEltC) && isGuaranteedNotToBePoison(TEltC))) in simplifySelectInst()
4956 simplifySelectWithICmpCond(Cond, TrueVal, FalseVal, Q, MaxRecurse)) in simplifySelectInst()
4959 if (Value *V = simplifySelectWithFCmp(Cond, TrueVal, FalseVal, Q)) in simplifySelectInst()
4965 std::optional<bool> Imp = isImpliedByDomCondition(Cond, Q.CxtI, Q.DL); in simplifySelectInst()
4973 const SimplifyQuery &Q) { in simplifySelectInst() argument
4974 return ::simplifySelectInst(Cond, TrueVal, FalseVal, Q, RecursionLimit); in simplifySelectInst()
4981 const SimplifyQuery &Q, unsigned) { in simplifyGEPInst() argument
5016 if (Q.isUndefValue(Ptr)) in simplifyGEPInst()
5029 uint64_t TyAllocSize = Q.DL.getTypeAllocSize(Ty); in simplifyGEPInst()
5037 Q.DL.getPointerSizeInBits(AS)) { in simplifyGEPInst()
5068 if (!IsScalableVec && Q.DL.getTypeAllocSize(LastType) == 1 && in simplifyGEPInst()
5072 Q.DL.getIndexSizeInBits(Ptr->getType()->getPointerAddressSpace()); in simplifyGEPInst()
5073 if (Q.DL.getTypeSizeInBits(Indices.back()->getType()) == IdxWidth) { in simplifyGEPInst()
5076 Ptr->stripAndAccumulateInBoundsConstantOffsets(Q.DL, BasePtrOffset); in simplifyGEPInst()
5110 return ConstantFoldConstant(CE, Q.DL); in simplifyGEPInst()
5114 GEPNoWrapFlags NW, const SimplifyQuery &Q) { in simplifyGEPInst() argument
5115 return ::simplifyGEPInst(SrcTy, Ptr, Indices, NW, Q, RecursionLimit); in simplifyGEPInst()
5122 const SimplifyQuery &Q, unsigned) { in simplifyInsertValueInst() argument
5130 (Q.isUndefValue(Val) && isGuaranteedNotToBePoison(Agg))) in simplifyInsertValueInst()
5140 (Q.isUndefValue(Agg) && in simplifyInsertValueInst()
5154 const SimplifyQuery &Q) { in simplifyInsertValueInst() argument
5155 return ::simplifyInsertValueInst(Agg, Val, Idxs, Q, RecursionLimit); in simplifyInsertValueInst()
5159 const SimplifyQuery &Q) { in simplifyInsertElementInst() argument
5175 if (Q.isUndefValue(Idx)) in simplifyInsertElementInst()
5181 (Q.isUndefValue(Val) && isGuaranteedNotToBePoison(Vec))) in simplifyInsertElementInst()
5219 const SimplifyQuery &Q) { in simplifyExtractValueInst() argument
5220 return ::simplifyExtractValueInst(Agg, Idxs, Q, RecursionLimit); in simplifyExtractValueInst()
5226 const SimplifyQuery &Q, unsigned) { in simplifyExtractElementInst() argument
5232 if (Q.isUndefValue(Vec)) in simplifyExtractElementInst()
5238 if (Q.isUndefValue(Idx)) in simplifyExtractElementInst()
5271 const SimplifyQuery &Q) { in simplifyExtractElementInst() argument
5272 return ::simplifyExtractElementInst(Vec, Idx, Q, RecursionLimit); in simplifyExtractElementInst()
5277 const SimplifyQuery &Q) { in simplifyPHINode() argument
5295 if (Q.isUndefValue(Incoming)) { in simplifyPHINode()
5315 return valueDominatesPHI(CommonValue, PN, Q.DT) ? CommonValue : nullptr; in simplifyPHINode()
5322 const SimplifyQuery &Q, unsigned MaxRecurse) { in simplifyCastInst() argument
5324 return ConstantFoldCastOperand(CastOpc, C, Ty, Q.DL); in simplifyCastInst()
5335 SrcTy->isPtrOrPtrVectorTy() ? Q.DL.getIntPtrType(SrcTy) : nullptr; in simplifyCastInst()
5337 MidTy->isPtrOrPtrVectorTy() ? Q.DL.getIntPtrType(MidTy) : nullptr; in simplifyCastInst()
5339 DstTy->isPtrOrPtrVectorTy() ? Q.DL.getIntPtrType(DstTy) : nullptr; in simplifyCastInst()
5357 X->getType() == Ty && Ty == Q.DL.getIndexType(Ptr->getType())) in simplifyCastInst()
5364 const SimplifyQuery &Q) { in simplifyCastInst() argument
5365 return ::simplifyCastInst(CastOpc, Op, Ty, Q, RecursionLimit); in simplifyCastInst()
5418 const SimplifyQuery &Q, in simplifyShuffleVectorInst() argument
5498 if (Q.isUndefValue(Op1) && RetTy == InVecTy && in simplifyShuffleVectorInst()
5534 const SimplifyQuery &Q) { in simplifyShuffleVectorInst() argument
5535 return ::simplifyShuffleVectorInst(Op0, Op1, Mask, RetTy, Q, RecursionLimit); in simplifyShuffleVectorInst()
5539 const SimplifyQuery &Q) { in foldConstant() argument
5541 return ConstantFoldUnaryOpOperand(Opcode, C, Q.DL); in foldConstant()
5548 const SimplifyQuery &Q, unsigned MaxRecurse) { in simplifyFNegInst() argument
5549 if (Constant *C = foldConstant(Instruction::FNeg, Op, Q)) in simplifyFNegInst()
5561 const SimplifyQuery &Q) { in simplifyFNegInst() argument
5562 return ::simplifyFNegInst(Op, FMF, Q, RecursionLimit); in simplifyFNegInst()
5610 const SimplifyQuery &Q, in simplifyFPOp() argument
5621 bool IsUndef = Q.isUndefValue(V); in simplifyFPOp()
5652 const SimplifyQuery &Q, unsigned MaxRecurse, in simplifyFAddInst() argument
5656 if (Constant *C = foldOrCommuteConstant(Instruction::FAdd, Op0, Op1, Q)) in simplifyFAddInst()
5659 if (Constant *C = simplifyFPOp({Op0, Op1}, FMF, Q, ExBehavior, Rounding)) in simplifyFAddInst()
5676 (FMF.noSignedZeros() || cannotBeNegativeZero(Op0, /*Depth=*/0, Q))) in simplifyFAddInst()
5718 const SimplifyQuery &Q, unsigned MaxRecurse, in simplifyFSubInst() argument
5722 if (Constant *C = foldOrCommuteConstant(Instruction::FSub, Op0, Op1, Q)) in simplifyFSubInst()
5725 if (Constant *C = simplifyFPOp({Op0, Op1}, FMF, Q, ExBehavior, Rounding)) in simplifyFSubInst()
5738 (FMF.noSignedZeros() || cannotBeNegativeZero(Op0, /*Depth=*/0, Q))) in simplifyFSubInst()
5770 return foldConstant(Instruction::FNeg, Op1, Q); in simplifyFSubInst()
5784 const SimplifyQuery &Q, unsigned MaxRecurse, in simplifyFMAFMul() argument
5787 if (Constant *C = simplifyFPOp({Op0, Op1}, FMF, Q, ExBehavior, Rounding)) in simplifyFMAFMul()
5807 computeKnownFPClass(Op0, FMF, fcInf | fcNan, /*Depth=*/0, Q); in simplifyFMAFMul()
5814 return foldConstant(Instruction::FNeg, Op1, Q); in simplifyFMAFMul()
5833 const SimplifyQuery &Q, unsigned MaxRecurse, in simplifyFMulInst() argument
5837 if (Constant *C = foldOrCommuteConstant(Instruction::FMul, Op0, Op1, Q)) in simplifyFMulInst()
5841 return simplifyFMAFMul(Op0, Op1, FMF, Q, MaxRecurse, ExBehavior, Rounding); in simplifyFMulInst()
5845 const SimplifyQuery &Q, in simplifyFAddInst() argument
5848 return ::simplifyFAddInst(Op0, Op1, FMF, Q, RecursionLimit, ExBehavior, in simplifyFAddInst()
5853 const SimplifyQuery &Q, in simplifyFSubInst() argument
5856 return ::simplifyFSubInst(Op0, Op1, FMF, Q, RecursionLimit, ExBehavior, in simplifyFSubInst()
5861 const SimplifyQuery &Q, in simplifyFMulInst() argument
5864 return ::simplifyFMulInst(Op0, Op1, FMF, Q, RecursionLimit, ExBehavior, in simplifyFMulInst()
5869 const SimplifyQuery &Q, in simplifyFMAFMul() argument
5872 return ::simplifyFMAFMul(Op0, Op1, FMF, Q, RecursionLimit, ExBehavior, in simplifyFMAFMul()
5878 const SimplifyQuery &Q, unsigned, in simplifyFDivInst() argument
5882 if (Constant *C = foldOrCommuteConstant(Instruction::FDiv, Op0, Op1, Q)) in simplifyFDivInst()
5885 if (Constant *C = simplifyFPOp({Op0, Op1}, FMF, Q, ExBehavior, Rounding)) in simplifyFDivInst()
5928 const SimplifyQuery &Q, in simplifyFDivInst() argument
5931 return ::simplifyFDivInst(Op0, Op1, FMF, Q, RecursionLimit, ExBehavior, in simplifyFDivInst()
5937 const SimplifyQuery &Q, unsigned, in simplifyFRemInst() argument
5941 if (Constant *C = foldOrCommuteConstant(Instruction::FRem, Op0, Op1, Q)) in simplifyFRemInst()
5944 if (Constant *C = simplifyFPOp({Op0, Op1}, FMF, Q, ExBehavior, Rounding)) in simplifyFRemInst()
5966 const SimplifyQuery &Q, in simplifyFRemInst() argument
5969 return ::simplifyFRemInst(Op0, Op1, FMF, Q, RecursionLimit, ExBehavior, in simplifyFRemInst()
5977 static Value *simplifyUnOp(unsigned Opcode, Value *Op, const SimplifyQuery &Q, in simplifyUnOp() argument
5981 return simplifyFNegInst(Op, FastMathFlags(), Q, MaxRecurse); in simplifyUnOp()
5991 const FastMathFlags &FMF, const SimplifyQuery &Q, in simplifyFPUnOp() argument
5995 return simplifyFNegInst(Op, FMF, Q, MaxRecurse); in simplifyFPUnOp()
5997 return simplifyUnOp(Opcode, Op, Q, MaxRecurse); in simplifyFPUnOp()
6001 Value *llvm::simplifyUnOp(unsigned Opcode, Value *Op, const SimplifyQuery &Q) { in simplifyUnOp() argument
6002 return ::simplifyUnOp(Opcode, Op, Q, RecursionLimit); in simplifyUnOp()
6006 const SimplifyQuery &Q) { in simplifyUnOp() argument
6007 return ::simplifyFPUnOp(Opcode, Op, FMF, Q, RecursionLimit); in simplifyUnOp()
6013 const SimplifyQuery &Q, unsigned MaxRecurse) { in simplifyBinOp() argument
6016 return simplifyAddInst(LHS, RHS, /* IsNSW */ false, /* IsNUW */ false, Q, in simplifyBinOp()
6019 return simplifySubInst(LHS, RHS, /* IsNSW */ false, /* IsNUW */ false, Q, in simplifyBinOp()
6022 return simplifyMulInst(LHS, RHS, /* IsNSW */ false, /* IsNUW */ false, Q, in simplifyBinOp()
6025 return simplifySDivInst(LHS, RHS, /* IsExact */ false, Q, MaxRecurse); in simplifyBinOp()
6027 return simplifyUDivInst(LHS, RHS, /* IsExact */ false, Q, MaxRecurse); in simplifyBinOp()
6029 return simplifySRemInst(LHS, RHS, Q, MaxRecurse); in simplifyBinOp()
6031 return simplifyURemInst(LHS, RHS, Q, MaxRecurse); in simplifyBinOp()
6033 return simplifyShlInst(LHS, RHS, /* IsNSW */ false, /* IsNUW */ false, Q, in simplifyBinOp()
6036 return simplifyLShrInst(LHS, RHS, /* IsExact */ false, Q, MaxRecurse); in simplifyBinOp()
6038 return simplifyAShrInst(LHS, RHS, /* IsExact */ false, Q, MaxRecurse); in simplifyBinOp()
6040 return simplifyAndInst(LHS, RHS, Q, MaxRecurse); in simplifyBinOp()
6042 return simplifyOrInst(LHS, RHS, Q, MaxRecurse); in simplifyBinOp()
6044 return simplifyXorInst(LHS, RHS, Q, MaxRecurse); in simplifyBinOp()
6046 return simplifyFAddInst(LHS, RHS, FastMathFlags(), Q, MaxRecurse); in simplifyBinOp()
6048 return simplifyFSubInst(LHS, RHS, FastMathFlags(), Q, MaxRecurse); in simplifyBinOp()
6050 return simplifyFMulInst(LHS, RHS, FastMathFlags(), Q, MaxRecurse); in simplifyBinOp()
6052 return simplifyFDivInst(LHS, RHS, FastMathFlags(), Q, MaxRecurse); in simplifyBinOp()
6054 return simplifyFRemInst(LHS, RHS, FastMathFlags(), Q, MaxRecurse); in simplifyBinOp()
6064 const FastMathFlags &FMF, const SimplifyQuery &Q, in simplifyBinOp() argument
6068 return simplifyFAddInst(LHS, RHS, FMF, Q, MaxRecurse); in simplifyBinOp()
6070 return simplifyFSubInst(LHS, RHS, FMF, Q, MaxRecurse); in simplifyBinOp()
6072 return simplifyFMulInst(LHS, RHS, FMF, Q, MaxRecurse); in simplifyBinOp()
6074 return simplifyFDivInst(LHS, RHS, FMF, Q, MaxRecurse); in simplifyBinOp()
6076 return simplifyBinOp(Opcode, LHS, RHS, Q, MaxRecurse); in simplifyBinOp()
6081 const SimplifyQuery &Q) { in simplifyBinOp() argument
6082 return ::simplifyBinOp(Opcode, LHS, RHS, Q, RecursionLimit); in simplifyBinOp()
6086 FastMathFlags FMF, const SimplifyQuery &Q) { in simplifyBinOp() argument
6087 return ::simplifyBinOp(Opcode, LHS, RHS, FMF, Q, RecursionLimit); in simplifyBinOp()
6092 const SimplifyQuery &Q, unsigned MaxRecurse) { in simplifyCmpInst() argument
6094 return simplifyICmpInst(Predicate, LHS, RHS, Q, MaxRecurse); in simplifyCmpInst()
6095 return simplifyFCmpInst(Predicate, LHS, RHS, FastMathFlags(), Q, MaxRecurse); in simplifyCmpInst()
6099 const SimplifyQuery &Q) { in simplifyCmpInst() argument
6100 return ::simplifyCmpInst(Predicate, LHS, RHS, Q, RecursionLimit); in simplifyCmpInst()
6194 static Value *simplifyLdexp(Value *Op0, Value *Op1, const SimplifyQuery &Q, in simplifyLdexp() argument
6202 if (Q.isUndefValue(Op0)) in simplifyLdexp()
6209 if (Q.isUndefValue(Op1)) in simplifyLdexp()
6244 const SimplifyQuery &Q, in simplifyUnaryIntrinsic() argument
6268 if (computeKnownFPSignBit(Op0, /*Depth=*/0, Q) == false) in simplifyUnaryIntrinsic()
6283 if (isKnownToBeAPowerOfTwo(Op0, Q.DL, /*OrZero*/ false, 0, Q.AC, Q.CxtI, in simplifyUnaryIntrinsic()
6284 Q.DT)) in simplifyUnaryIntrinsic()
6290 Q)) in simplifyUnaryIntrinsic()
6431 const SimplifyQuery &Q, in simplifyBinaryIntrinsic() argument
6463 if (Q.isUndefValue(Op0) || match(Op0, m_Zero())) in simplifyBinaryIntrinsic()
6467 Q.DL.getIndexTypeSizeInBits(Op0->getType()) && in simplifyBinaryIntrinsic()
6477 if (match(Op1, m_AllOnes()) || Q.isUndefValue(Op1)) in simplifyBinaryIntrinsic()
6482 KnownBits PtrKnown = computeKnownBits(Op0, /*Depth=*/0, Q); in simplifyBinaryIntrinsic()
6489 Q.DL); in simplifyBinaryIntrinsic()
6508 if (Q.isUndefValue(Op1)) in simplifyBinaryIntrinsic()
6548 if (isICmpTrue(Pred, Op0, Op1, Q.getWithoutUndef(), RecursionLimit)) in simplifyBinaryIntrinsic()
6550 if (isICmpTrue(Pred, Op1, Op0, Q.getWithoutUndef(), RecursionLimit)) in simplifyBinaryIntrinsic()
6559 if (isICmpTrue(CmpInst::ICMP_EQ, Op0, Op1, Q, RecursionLimit)) in simplifyBinaryIntrinsic()
6564 if (isICmpTrue(PredGT, Op0, Op1, Q, RecursionLimit)) in simplifyBinaryIntrinsic()
6569 if (isICmpTrue(PredLT, Op0, Op1, Q, RecursionLimit)) in simplifyBinaryIntrinsic()
6579 if (Op0 == Op1 || Q.isUndefValue(Op0) || Q.isUndefValue(Op1)) in simplifyBinaryIntrinsic()
6586 if (Q.isUndefValue(Op0) || Q.isUndefValue(Op1)) { in simplifyBinaryIntrinsic()
6601 if (Q.isUndefValue(Op0) || Q.isUndefValue(Op1)) in simplifyBinaryIntrinsic()
6615 if (Q.isUndefValue(Op0) || Q.isUndefValue(Op1)) in simplifyBinaryIntrinsic()
6632 if (Op0 == Op1 || Q.isUndefValue(Op0) || Q.isUndefValue(Op1)) in simplifyBinaryIntrinsic()
6641 return simplifyRelativeLoad(C0, C1, Q.DL); in simplifyBinaryIntrinsic()
6654 return simplifyLdexp(Op0, Op1, Q, false); in simplifyBinaryIntrinsic()
6675 if (Q.isUndefValue(Op0)) in simplifyBinaryIntrinsic()
6692 if (Q.isUndefValue(Op1)) in simplifyBinaryIntrinsic()
6756 const SimplifyQuery &Q) { in simplifyIntrinsic() argument
6780 return simplifyUnaryIntrinsic(F, Args[0], Q, Call); in simplifyIntrinsic()
6783 return simplifyBinaryIntrinsic(IID, F->getReturnType(), Args[0], Args[1], Q, in simplifyIntrinsic()
6802 if (Q.isUndefValue(Op0) && Q.isUndefValue(Op1)) in simplifyIntrinsic()
6806 if (Q.isUndefValue(ShAmtArg)) in simplifyIntrinsic()
6829 if (Value *V = simplifyFPOp(Args, {}, Q, *FPI->getExceptionBehavior(), in simplifyIntrinsic()
6836 if (Value *V = simplifyFPOp(Args, {}, Q, fp::ebIgnore, in simplifyIntrinsic()
6859 if (Q.isUndefValue(Op1)) in simplifyIntrinsic()
6883 (Q.isUndefValue(Vec) || Vec == X) && IdxN == 0 && in simplifyIntrinsic()
6891 return simplifyFAddInst(Args[0], Args[1], FPI->getFastMathFlags(), Q, in simplifyIntrinsic()
6897 return simplifyFSubInst(Args[0], Args[1], FPI->getFastMathFlags(), Q, in simplifyIntrinsic()
6903 return simplifyFMulInst(Args[0], Args[1], FPI->getFastMathFlags(), Q, in simplifyIntrinsic()
6909 return simplifyFDivInst(Args[0], Args[1], FPI->getFastMathFlags(), Q, in simplifyIntrinsic()
6915 return simplifyFRemInst(Args[0], Args[1], FPI->getFastMathFlags(), Q, in simplifyIntrinsic()
6920 return simplifyLdexp(Args[0], Args[1], Q, true); in simplifyIntrinsic()
6949 const SimplifyQuery &Q) { in tryConstantFoldCall() argument
6966 return ConstantFoldCall(Call, F, ConstantArgs, Q.TLI); in tryConstantFoldCall()
6970 const SimplifyQuery &Q) { in simplifyCall() argument
6984 if (Value *V = tryConstantFoldCall(Call, Callee, Args, Q)) in simplifyCall()
6989 if (Value *Ret = simplifyIntrinsic(Call, Callee, Args, Q)) in simplifyCall()
6995 Value *llvm::simplifyConstrainedFPCall(CallBase *Call, const SimplifyQuery &Q) { in simplifyConstrainedFPCall() argument
6998 if (Value *V = tryConstantFoldCall(Call, Call->getCalledOperand(), Args, Q)) in simplifyConstrainedFPCall()
7000 if (Value *Ret = simplifyIntrinsic(Call, Call->getCalledOperand(), Args, Q)) in simplifyConstrainedFPCall()
7006 static Value *simplifyFreezeInst(Value *Op0, const SimplifyQuery &Q) { in simplifyFreezeInst() argument
7008 if (llvm::isGuaranteedNotToBeUndefOrPoison(Op0, Q.AC, Q.CxtI, Q.DT)) in simplifyFreezeInst()
7014 Value *llvm::simplifyFreezeInst(Value *Op0, const SimplifyQuery &Q) { in simplifyFreezeInst() argument
7015 return ::simplifyFreezeInst(Op0, Q); in simplifyFreezeInst()
7019 const SimplifyQuery &Q) { in simplifyLoadInst() argument
7024 return ConstantFoldLoadFromConstPtr(PtrOpC, LI->getType(), Q.DL); in simplifyLoadInst()
7035 LI->getType(), Q.DL)) in simplifyLoadInst()
7040 APInt Offset(Q.DL.getIndexTypeSizeInBits(PtrOp->getType()), 0); in simplifyLoadInst()
7042 Q.DL, Offset, /* AllowNonInbounts */ true, in simplifyLoadInst()
7046 Offset = Offset.sextOrTrunc(Q.DL.getIndexTypeSizeInBits(PtrOp->getType())); in simplifyLoadInst()
7048 Q.DL); in simplifyLoadInst()
7065 const SimplifyQuery Q = SQ.CxtI ? SQ : SQ.getWithInstruction(I); in simplifyInstructionWithOperands() local
7073 return ConstantFoldInstOperands(I, NewConstOps, Q.DL, Q.TLI); in simplifyInstructionWithOperands()
7077 return simplifyFNegInst(NewOps[0], I->getFastMathFlags(), Q, MaxRecurse); in simplifyInstructionWithOperands()
7079 return simplifyFAddInst(NewOps[0], NewOps[1], I->getFastMathFlags(), Q, in simplifyInstructionWithOperands()
7083 NewOps[0], NewOps[1], Q.IIQ.hasNoSignedWrap(cast<BinaryOperator>(I)), in simplifyInstructionWithOperands()
7084 Q.IIQ.hasNoUnsignedWrap(cast<BinaryOperator>(I)), Q, MaxRecurse); in simplifyInstructionWithOperands()
7086 return simplifyFSubInst(NewOps[0], NewOps[1], I->getFastMathFlags(), Q, in simplifyInstructionWithOperands()
7090 NewOps[0], NewOps[1], Q.IIQ.hasNoSignedWrap(cast<BinaryOperator>(I)), in simplifyInstructionWithOperands()
7091 Q.IIQ.hasNoUnsignedWrap(cast<BinaryOperator>(I)), Q, MaxRecurse); in simplifyInstructionWithOperands()
7093 return simplifyFMulInst(NewOps[0], NewOps[1], I->getFastMathFlags(), Q, in simplifyInstructionWithOperands()
7097 NewOps[0], NewOps[1], Q.IIQ.hasNoSignedWrap(cast<BinaryOperator>(I)), in simplifyInstructionWithOperands()
7098 Q.IIQ.hasNoUnsignedWrap(cast<BinaryOperator>(I)), Q, MaxRecurse); in simplifyInstructionWithOperands()
7101 Q.IIQ.isExact(cast<BinaryOperator>(I)), Q, in simplifyInstructionWithOperands()
7105 Q.IIQ.isExact(cast<BinaryOperator>(I)), Q, in simplifyInstructionWithOperands()
7108 return simplifyFDivInst(NewOps[0], NewOps[1], I->getFastMathFlags(), Q, in simplifyInstructionWithOperands()
7111 return simplifySRemInst(NewOps[0], NewOps[1], Q, MaxRecurse); in simplifyInstructionWithOperands()
7113 return simplifyURemInst(NewOps[0], NewOps[1], Q, MaxRecurse); in simplifyInstructionWithOperands()
7115 return simplifyFRemInst(NewOps[0], NewOps[1], I->getFastMathFlags(), Q, in simplifyInstructionWithOperands()
7119 NewOps[0], NewOps[1], Q.IIQ.hasNoSignedWrap(cast<BinaryOperator>(I)), in simplifyInstructionWithOperands()
7120 Q.IIQ.hasNoUnsignedWrap(cast<BinaryOperator>(I)), Q, MaxRecurse); in simplifyInstructionWithOperands()
7123 Q.IIQ.isExact(cast<BinaryOperator>(I)), Q, in simplifyInstructionWithOperands()
7127 Q.IIQ.isExact(cast<BinaryOperator>(I)), Q, in simplifyInstructionWithOperands()
7130 return simplifyAndInst(NewOps[0], NewOps[1], Q, MaxRecurse); in simplifyInstructionWithOperands()
7132 return simplifyOrInst(NewOps[0], NewOps[1], Q, MaxRecurse); in simplifyInstructionWithOperands()
7134 return simplifyXorInst(NewOps[0], NewOps[1], Q, MaxRecurse); in simplifyInstructionWithOperands()
7137 NewOps[1], Q, MaxRecurse); in simplifyInstructionWithOperands()
7140 NewOps[1], I->getFastMathFlags(), Q, MaxRecurse); in simplifyInstructionWithOperands()
7142 return simplifySelectInst(NewOps[0], NewOps[1], NewOps[2], Q, MaxRecurse); in simplifyInstructionWithOperands()
7147 ArrayRef(NewOps).slice(1), GEPI->getNoWrapFlags(), Q, in simplifyInstructionWithOperands()
7152 return simplifyInsertValueInst(NewOps[0], NewOps[1], IV->getIndices(), Q, in simplifyInstructionWithOperands()
7156 return simplifyInsertElementInst(NewOps[0], NewOps[1], NewOps[2], Q); in simplifyInstructionWithOperands()
7159 return simplifyExtractValueInst(NewOps[0], EVI->getIndices(), Q, in simplifyInstructionWithOperands()
7163 return simplifyExtractElementInst(NewOps[0], NewOps[1], Q, MaxRecurse); in simplifyInstructionWithOperands()
7167 SVI->getShuffleMask(), SVI->getType(), Q, in simplifyInstructionWithOperands()
7171 return simplifyPHINode(cast<PHINode>(I), NewOps, Q); in simplifyInstructionWithOperands()
7175 NewOps.drop_back(1 + cast<CallInst>(I)->getNumTotalBundleOperands()), Q); in simplifyInstructionWithOperands()
7177 return llvm::simplifyFreezeInst(NewOps[0], Q); in simplifyInstructionWithOperands()
7181 return simplifyCastInst(I->getOpcode(), NewOps[0], I->getType(), Q, in simplifyInstructionWithOperands()
7187 return simplifyLoadInst(cast<LoadInst>(I), NewOps[0], Q); in simplifyInstructionWithOperands()