• Home
  • History
  • Annotate
  • Raw
  • Download
  • only in /freebsd-12-stable/contrib/llvm-project/llvm/lib/Transforms/InstCombine/

Lines Matching defs:TrueVal

424 Instruction *InstCombiner::foldSelectIntoOp(SelectInst &SI, Value *TrueVal,
428 if (auto *TVI = dyn_cast<BinaryOperator>(TrueVal)) {
460 if (FVI->hasOneUse() && !isa<Constant>(TrueVal)) {
463 if ((SFO & 1) && TrueVal == FVI->getOperand(0)) {
465 } else if ((SFO & 2) && TrueVal == FVI->getOperand(1)) {
481 TrueVal, NewSel);
509 // The TrueVal has general form of: and %B, 1
539 static Value *foldSelectICmpLshrAshr(const ICmpInst *IC, Value *TrueVal,
560 std::swap(TrueVal, FalseVal);
562 if (match(TrueVal, m_LShr(m_Value(X), m_Value(Y))) &&
567 bool IsExact = Ashr->isExact() && cast<Instruction>(TrueVal)->isExact();
587 static Value *foldSelectICmpAndOr(const ICmpInst *IC, Value *TrueVal,
592 if (!TrueVal->getType()->isIntOrIntVectorTy() ||
593 TrueVal->getType()->isVectorTy() != IC->getType()->isVectorTy())
634 bool OrOnFalseVal = match(FalseVal, m_Or(m_Specific(TrueVal), m_Power2(C2)));
636 OrOnTrueVal = match(TrueVal, m_Or(m_Specific(FalseVal), m_Power2(C2)));
641 Value *Y = OrOnFalseVal ? TrueVal : FalseVal;
651 Value *Or = OrOnFalseVal ? FalseVal : TrueVal;
681 const Value *TrueVal,
689 if (match(TrueVal, m_Zero())) {
691 std::swap(TrueVal, FalseVal);
713 if (match(TrueVal, m_Sub(m_Specific(B), m_Specific(A))) ||
715 match(TrueVal, m_Add(m_Specific(B), m_SpecificInt(-*C)))))
717 else if (!match(TrueVal, m_Sub(m_Specific(A), m_Specific(B))) &&
719 match(TrueVal, m_Add(m_Specific(A), m_SpecificInt(-*C)))))
724 if (IsNegative && !TrueVal->hasOneUse() && !ICI->hasOneUse())
811 static Instruction *foldSelectCtlzToCttz(ICmpInst *ICI, Value *TrueVal,
814 unsigned BitWidth = TrueVal->getType()->getScalarSizeInBits();
819 std::swap(TrueVal, FalseVal);
822 m_Xor(m_Deferred(TrueVal), m_SpecificInt(BitWidth - 1))))
825 if (!match(TrueVal, m_Intrinsic<Intrinsic::ctlz>()))
829 auto *II = cast<IntrinsicInst>(TrueVal);
850 static Value *foldSelectCttzCtlz(ICmpInst *ICI, Value *TrueVal, Value *FalseVal,
861 Value *ValueOnZero = TrueVal;
906 Value *TrueVal = Sel.getTrueValue();
931 if ((CmpLHS == TrueVal && AdjustedRHS == FalseVal) ||
932 (CmpLHS == FalseVal && AdjustedRHS == TrueVal)) {
945 if (match(TrueVal, m_SExt(m_Specific(CmpLHS))) && SextRHS == FalseVal) {
946 CmpLHS = TrueVal;
949 SextRHS == TrueVal) {
958 if (match(TrueVal, m_ZExt(m_Specific(CmpLHS))) && ZextRHS == FalseVal) {
959 CmpLHS = TrueVal;
962 ZextRHS == TrueVal) {
977 std::swap(FalseVal, TrueVal);
981 Sel.setOperand(1, TrueVal);
1157 Value *TrueVal = Sel.getTrueValue(), *FalseVal = Sel.getFalseValue();
1159 std::swap(TrueVal, FalseVal);
1167 if (simplifyWithOpReplaced(FalseVal, CmpLHS, CmpRHS, Q) == TrueVal ||
1168 simplifyWithOpReplaced(FalseVal, CmpRHS, CmpLHS, Q) == TrueVal ||
1169 simplifyWithOpReplaced(TrueVal, CmpLHS, CmpRHS, Q) == FalseVal ||
1170 simplifyWithOpReplaced(TrueVal, CmpRHS, CmpLHS, Q) == FalseVal) {
1421 Value *TrueVal = SI.getTrueValue();
1427 if (CmpLHS == TrueVal && Pred == ICmpInst::ICMP_EQ) {
1442 DL.getTypeSizeInBits(TrueVal->getType()->getScalarType());
1467 if (TrueWhenUnset && TrueVal == X &&
1472 match(TrueVal, m_Xor(m_Specific(X), m_APInt(C))) && *Y == *C)
1476 match(TrueVal, m_Xor(m_Specific(X), m_APInt(C))) && *Y == *C)
1479 else if (!TrueWhenUnset && TrueVal == X &&
1489 foldSelectICmpAndAnd(SI.getType(), ICI, TrueVal, FalseVal, Builder))
1492 if (Instruction *V = foldSelectCtlzToCttz(ICI, TrueVal, FalseVal, Builder))
1495 if (Value *V = foldSelectICmpAndOr(ICI, TrueVal, FalseVal, Builder))
1498 if (Value *V = foldSelectICmpLshrAshr(ICI, TrueVal, FalseVal, Builder))
1501 if (Value *V = foldSelectCttzCtlz(ICI, TrueVal, FalseVal, Builder))
1504 if (Value *V = canonicalizeSaturatedSubtract(ICI, TrueVal, FalseVal, Builder))
1507 if (Value *V = canonicalizeSaturatedAdd(ICI, TrueVal, FalseVal, Builder))
1682 Value *TrueVal = SI.getTrueValue();
1684 auto *TI = dyn_cast<Instruction>(TrueVal);
1757 Value *TrueVal = SI.getTrueValue();
1772 Value *TrueVal, *FalseVal, *Op;
1775 m_Value(TrueVal), m_Value(FalseVal))))
1797 IsMinMax(TrueVal, FalseVal))
1804 IsMinMax(FalseVal, TrueVal))
1810 IsMinMax(TrueVal, FalseVal))
1815 IsMinMax(FalseVal, TrueVal))
1820 IsMinMax(FalseVal, TrueVal))
1825 IsMinMax(TrueVal, FalseVal))
1834 match(TrueVal, m_AllOnes()))
1838 match(TrueVal, m_Zero()))
1842 IsSignedSaturateLimit(TrueVal, /*IsAdd=*/true))
1853 IsSignedSaturateLimit(TrueVal, /*IsAdd=*/false))
2328 Value *TrueVal = SI.getTrueValue();
2337 if (isa<UndefValue>(TrueVal) || isa<UndefValue>(FalseVal)) {
2348 if (Value *V = SimplifySelectInst(CondVal, TrueVal, FalseVal,
2369 SI.setOperand(2, TrueVal);
2376 TrueVal->getType() == CondVal->getType()) {
2377 if (match(TrueVal, m_One())) {
2381 if (match(TrueVal, m_Zero())) {
2388 return BinaryOperator::CreateAnd(CondVal, TrueVal);
2393 return BinaryOperator::CreateOr(NotCond, TrueVal);
2398 if (CondVal == TrueVal)
2401 return BinaryOperator::CreateAnd(CondVal, TrueVal);
2405 if (match(TrueVal, m_Not(m_Specific(CondVal))))
2406 return BinaryOperator::CreateAnd(TrueVal, FalseVal);
2408 return BinaryOperator::CreateOr(TrueVal, FalseVal);
2420 if (match(TrueVal, m_One()) && match(FalseVal, m_Zero()))
2424 if (match(TrueVal, m_AllOnes()) && match(FalseVal, m_Zero()))
2428 if (match(TrueVal, m_Zero()) && match(FalseVal, m_One())) {
2434 if (match(TrueVal, m_Zero()) && match(FalseVal, m_AllOnes())) {
2443 if ((Cmp0 == TrueVal && Cmp1 == FalseVal) ||
2444 (Cmp0 == FalseVal && Cmp1 == TrueVal)) {
2457 Value *NewSel = Builder.CreateSelect(NewCond, FalseVal, TrueVal);
2474 match(TrueVal, m_FSub(m_PosZeroFP(), m_Specific(FalseVal))) &&
2475 match(TrueVal, m_Instruction(FSub)) && FSub->hasNoNaNs() &&
2481 if (match(CondVal, m_FCmp(Pred, m_Specific(TrueVal), m_AnyZeroFP())) &&
2482 match(FalseVal, m_FSub(m_PosZeroFP(), m_Specific(TrueVal))) &&
2485 Value *Fabs = Builder.CreateUnaryIntrinsic(Intrinsic::fabs, TrueVal, FSub);
2493 match(TrueVal, m_FNeg(m_Specific(FalseVal))) &&
2494 match(TrueVal, m_Instruction(FNeg)) &&
2504 if (match(CondVal, m_FCmp(Pred, m_Specific(TrueVal), m_AnyZeroFP())) &&
2505 match(FalseVal, m_FNeg(m_Specific(TrueVal))) &&
2510 Value *Fabs = Builder.CreateUnaryIntrinsic(Intrinsic::fabs, TrueVal, FNeg);
2525 auto *TI = dyn_cast<Instruction>(TrueVal);
2536 if (Instruction *FoldI = foldSelectIntoOp(SI, TrueVal, FalseVal))
2648 if (canSelectOperandBeMappingIntoPredBlock(TrueVal, SI) &&
2653 if (SelectInst *TrueSI = dyn_cast<SelectInst>(TrueVal)) {
2683 if (FalseSI->getTrueValue() == TrueVal && FalseSI->hasOneUse()) {
2709 if (match(TrueVal, m_OneUse(m_BinOp(TrueBO))) &&
2751 SI.setOperand(2, TrueVal);
2776 return replaceInstUsesWith(SI, TrueVal);