Lines Matching refs:TrueVal

431 Instruction *InstCombinerImpl::foldSelectIntoOp(SelectInst &SI, Value *TrueVal,  in foldSelectIntoOp()  argument
435 if (auto *TVI = dyn_cast<BinaryOperator>(TrueVal)) { in foldSelectIntoOp()
468 if (FVI->hasOneUse() && !isa<Constant>(TrueVal)) { in foldSelectIntoOp()
471 if ((SFO & 1) && TrueVal == FVI->getOperand(0)) { in foldSelectIntoOp()
473 } else if ((SFO & 2) && TrueVal == FVI->getOperand(1)) { in foldSelectIntoOp()
490 TrueVal, NewSel); in foldSelectIntoOp()
548 static Value *foldSelectICmpLshrAshr(const ICmpInst *IC, Value *TrueVal, in foldSelectICmpLshrAshr() argument
569 std::swap(TrueVal, FalseVal); in foldSelectICmpLshrAshr()
571 if (match(TrueVal, m_LShr(m_Value(X), m_Value(Y))) && in foldSelectICmpLshrAshr()
576 bool IsExact = Ashr->isExact() && cast<Instruction>(TrueVal)->isExact(); in foldSelectICmpLshrAshr()
596 static Value *foldSelectICmpAndOr(const ICmpInst *IC, Value *TrueVal, in foldSelectICmpAndOr() argument
601 if (!TrueVal->getType()->isIntOrIntVectorTy() || in foldSelectICmpAndOr()
602 TrueVal->getType()->isVectorTy() != IC->getType()->isVectorTy()) in foldSelectICmpAndOr()
643 bool OrOnFalseVal = match(FalseVal, m_Or(m_Specific(TrueVal), m_Power2(C2))); in foldSelectICmpAndOr()
645 OrOnTrueVal = match(TrueVal, m_Or(m_Specific(FalseVal), m_Power2(C2))); in foldSelectICmpAndOr()
650 Value *Y = OrOnFalseVal ? TrueVal : FalseVal; in foldSelectICmpAndOr()
660 Value *Or = OrOnFalseVal ? FalseVal : TrueVal; in foldSelectICmpAndOr()
722 const Value *TrueVal, in canonicalizeSaturatedSubtract() argument
730 if (match(TrueVal, m_Zero())) { in canonicalizeSaturatedSubtract()
732 std::swap(TrueVal, FalseVal); in canonicalizeSaturatedSubtract()
754 if (match(TrueVal, m_Sub(m_Specific(B), m_Specific(A))) || in canonicalizeSaturatedSubtract()
756 match(TrueVal, m_Add(m_Specific(B), m_SpecificInt(-*C))))) in canonicalizeSaturatedSubtract()
758 else if (!match(TrueVal, m_Sub(m_Specific(A), m_Specific(B))) && in canonicalizeSaturatedSubtract()
760 match(TrueVal, m_Add(m_Specific(A), m_SpecificInt(-*C))))) in canonicalizeSaturatedSubtract()
765 if (IsNegative && !TrueVal->hasOneUse() && !ICI->hasOneUse()) in canonicalizeSaturatedSubtract()
854 static Instruction *foldSelectCtlzToCttz(ICmpInst *ICI, Value *TrueVal, in foldSelectCtlzToCttz() argument
857 unsigned BitWidth = TrueVal->getType()->getScalarSizeInBits(); in foldSelectCtlzToCttz()
862 std::swap(TrueVal, FalseVal); in foldSelectCtlzToCttz()
865 m_Xor(m_Deferred(TrueVal), m_SpecificInt(BitWidth - 1)))) in foldSelectCtlzToCttz()
868 if (!match(TrueVal, m_Intrinsic<Intrinsic::ctlz>())) in foldSelectCtlzToCttz()
872 auto *II = cast<IntrinsicInst>(TrueVal); in foldSelectCtlzToCttz()
893 static Value *foldSelectCttzCtlz(ICmpInst *ICI, Value *TrueVal, Value *FalseVal, in foldSelectCttzCtlz() argument
904 Value *ValueOnZero = TrueVal; in foldSelectCttzCtlz()
949 Value *TrueVal = Sel.getTrueValue(); in adjustMinMax() local
974 if ((CmpLHS == TrueVal && AdjustedRHS == FalseVal) || in adjustMinMax()
975 (CmpLHS == FalseVal && AdjustedRHS == TrueVal)) { in adjustMinMax()
988 if (match(TrueVal, m_SExt(m_Specific(CmpLHS))) && SextRHS == FalseVal) { in adjustMinMax()
989 CmpLHS = TrueVal; in adjustMinMax()
992 SextRHS == TrueVal) { in adjustMinMax()
1001 if (match(TrueVal, m_ZExt(m_Specific(CmpLHS))) && ZextRHS == FalseVal) { in adjustMinMax()
1002 CmpLHS = TrueVal; in adjustMinMax()
1005 ZextRHS == TrueVal) { in adjustMinMax()
1020 std::swap(FalseVal, TrueVal); in adjustMinMax()
1024 Sel.setOperand(1, TrueVal); in adjustMinMax()
1130 Value *TrueVal = Sel.getTrueValue(), *FalseVal = Sel.getFalseValue(); in foldSelectValueEquivalence() local
1133 std::swap(TrueVal, FalseVal); in foldSelectValueEquivalence()
1143 if (TrueVal != CmpLHS && in foldSelectValueEquivalence()
1145 if (Value *V = simplifyWithOpReplaced(TrueVal, CmpLHS, CmpRHS, SQ, in foldSelectValueEquivalence()
1157 if (auto *I = dyn_cast<Instruction>(TrueVal)) in foldSelectValueEquivalence()
1165 if (TrueVal != CmpRHS && in foldSelectValueEquivalence()
1167 if (Value *V = simplifyWithOpReplaced(TrueVal, CmpRHS, CmpLHS, SQ, in foldSelectValueEquivalence()
1199 /* AllowRefinement */ false) == TrueVal || in foldSelectValueEquivalence()
1201 /* AllowRefinement */ false) == TrueVal) { in foldSelectValueEquivalence()
1462 Value *TrueVal = SI.getTrueValue(); in foldSelectInstWithICmp() local
1468 if (CmpLHS == TrueVal && Pred == ICmpInst::ICMP_EQ) { in foldSelectInstWithICmp()
1483 DL.getTypeSizeInBits(TrueVal->getType()->getScalarType()); in foldSelectInstWithICmp()
1508 if (TrueWhenUnset && TrueVal == X && in foldSelectInstWithICmp()
1513 match(TrueVal, m_Xor(m_Specific(X), m_APInt(C))) && *Y == *C) in foldSelectInstWithICmp()
1517 match(TrueVal, m_Xor(m_Specific(X), m_APInt(C))) && *Y == *C) in foldSelectInstWithICmp()
1520 else if (!TrueWhenUnset && TrueVal == X && in foldSelectInstWithICmp()
1530 foldSelectICmpAndAnd(SI.getType(), ICI, TrueVal, FalseVal, Builder)) in foldSelectInstWithICmp()
1533 if (Instruction *V = foldSelectCtlzToCttz(ICI, TrueVal, FalseVal, Builder)) in foldSelectInstWithICmp()
1536 if (Value *V = foldSelectICmpAndOr(ICI, TrueVal, FalseVal, Builder)) in foldSelectInstWithICmp()
1539 if (Value *V = foldSelectICmpLshrAshr(ICI, TrueVal, FalseVal, Builder)) in foldSelectInstWithICmp()
1542 if (Value *V = foldSelectCttzCtlz(ICI, TrueVal, FalseVal, Builder)) in foldSelectInstWithICmp()
1545 if (Value *V = canonicalizeSaturatedSubtract(ICI, TrueVal, FalseVal, Builder)) in foldSelectInstWithICmp()
1548 if (Value *V = canonicalizeSaturatedAdd(ICI, TrueVal, FalseVal, Builder)) in foldSelectInstWithICmp()
1723 Value *TrueVal = SI.getTrueValue(); in foldAddSubSelect() local
1725 auto *TI = dyn_cast<Instruction>(TrueVal); in foldAddSubSelect()
1798 Value *TrueVal = SI.getTrueValue(); in foldOverflowingAddSubSelect() local
1813 Value *TrueVal, *FalseVal, *Op; in foldOverflowingAddSubSelect() local
1816 m_Value(TrueVal), m_Value(FalseVal)))) in foldOverflowingAddSubSelect()
1838 IsMinMax(TrueVal, FalseVal)) in foldOverflowingAddSubSelect()
1845 IsMinMax(FalseVal, TrueVal)) in foldOverflowingAddSubSelect()
1851 IsMinMax(TrueVal, FalseVal)) in foldOverflowingAddSubSelect()
1856 IsMinMax(FalseVal, TrueVal)) in foldOverflowingAddSubSelect()
1861 IsMinMax(FalseVal, TrueVal)) in foldOverflowingAddSubSelect()
1866 IsMinMax(TrueVal, FalseVal)) in foldOverflowingAddSubSelect()
1875 match(TrueVal, m_AllOnes())) in foldOverflowingAddSubSelect()
1879 match(TrueVal, m_Zero())) in foldOverflowingAddSubSelect()
1883 IsSignedSaturateLimit(TrueVal, /*IsAdd=*/true)) in foldOverflowingAddSubSelect()
1894 IsSignedSaturateLimit(TrueVal, /*IsAdd=*/false)) in foldOverflowingAddSubSelect()
2564 Value *TrueVal = Sel.getTrueValue(), *FalseVal = Sel.getFalseValue(); in foldSelectWithFrozenICmp() local
2576 match(Cond, m_c_ICmp(Pred, m_Specific(TrueVal), m_Specific(FalseVal))) && in foldSelectWithFrozenICmp()
2578 return Pred == ICmpInst::ICMP_EQ ? FalseVal : TrueVal; in foldSelectWithFrozenICmp()
2628 Value *TrueVal = SI.getTrueValue(); in visitSelectInst() local
2637 if (match(TrueVal, m_Undef()) || match(FalseVal, m_Undef())) { in visitSelectInst()
2648 if (Value *V = SimplifySelectInst(CondVal, TrueVal, FalseVal, in visitSelectInst()
2664 TrueVal->getType() == CondVal->getType()) { in visitSelectInst()
2668 if (match(TrueVal, m_One()) && impliesPoison(FalseVal, CondVal)) { in visitSelectInst()
2672 if (match(FalseVal, m_Zero()) && impliesPoison(TrueVal, CondVal)) { in visitSelectInst()
2674 return BinaryOperator::CreateAnd(CondVal, TrueVal); in visitSelectInst()
2683 if (match(TrueVal, m_Specific(Zero))) { in visitSelectInst()
2690 return SelectInst::Create(NotCond, One, TrueVal); in visitSelectInst()
2694 if (CondVal == TrueVal) in visitSelectInst()
2701 if (match(TrueVal, m_Not(m_Specific(CondVal)))) in visitSelectInst()
2702 return SelectInst::Create(TrueVal, FalseVal, Zero); in visitSelectInst()
2705 return SelectInst::Create(FalseVal, One, TrueVal); in visitSelectInst()
2712 (CondVal->hasOneUse() || TrueVal->hasOneUse()) && in visitSelectInst()
2725 match(TrueVal, m_One()) && match(FalseVal, m_Specific(B))) in visitSelectInst()
2729 match(TrueVal, m_Specific(B)) && match(FalseVal, m_Zero())) in visitSelectInst()
2733 if (Value *S = simplifyWithOpReplaced(TrueVal, CondVal, One, SQ, in visitSelectInst()
2741 if (match(FalseVal, m_Zero()) || match(TrueVal, m_One())) { in visitSelectInst()
2744 Value *Op1 = IsAnd ? TrueVal : FalseVal; in visitSelectInst()
2769 Optional<bool> Res = isImpliedCondition(TrueVal, B, DL); in visitSelectInst()
2773 if (match(TrueVal, m_Select(m_Value(A), m_One(), m_Value(B))) && in visitSelectInst()
2782 if (match(TrueVal, m_One()) && in visitSelectInst()
2789 match(TrueVal, m_One())) { in visitSelectInst()
2799 match(TrueVal, m_One()) && in visitSelectInst()
2820 if (match(TrueVal, m_One()) && match(FalseVal, m_Zero())) in visitSelectInst()
2824 if (match(TrueVal, m_AllOnes()) && match(FalseVal, m_Zero())) in visitSelectInst()
2828 if (match(TrueVal, m_Zero()) && match(FalseVal, m_One())) { in visitSelectInst()
2834 if (match(TrueVal, m_Zero()) && match(FalseVal, m_AllOnes())) { in visitSelectInst()
2843 if ((Cmp0 == TrueVal && Cmp1 == FalseVal) || in visitSelectInst()
2844 (Cmp0 == FalseVal && Cmp1 == TrueVal)) { in visitSelectInst()
2857 Value *NewSel = Builder.CreateSelect(NewCond, FalseVal, TrueVal); in visitSelectInst()
2872 match(TrueVal, m_FSub(m_PosZeroFP(), m_Specific(FalseVal))) && in visitSelectInst()
2873 match(TrueVal, m_Instruction(FSub)) && FSub->hasNoNaNs() && in visitSelectInst()
2879 if (match(CondVal, m_FCmp(Pred, m_Specific(TrueVal), m_AnyZeroFP())) && in visitSelectInst()
2880 match(FalseVal, m_FSub(m_PosZeroFP(), m_Specific(TrueVal))) && in visitSelectInst()
2883 Value *Fabs = Builder.CreateUnaryIntrinsic(Intrinsic::fabs, TrueVal, &SI); in visitSelectInst()
2891 match(TrueVal, m_FNeg(m_Specific(FalseVal))) && in visitSelectInst()
2892 match(TrueVal, m_Instruction(FNeg)) && FNeg->hasNoNaNs() && in visitSelectInst()
2902 if (match(CondVal, m_FCmp(Pred, m_Specific(TrueVal), m_AnyZeroFP())) && in visitSelectInst()
2903 match(FalseVal, m_FNeg(m_Specific(TrueVal))) && in visitSelectInst()
2908 Value *Fabs = Builder.CreateUnaryIntrinsic(Intrinsic::fabs, TrueVal, &SI); in visitSelectInst()
2925 auto *TI = dyn_cast<Instruction>(TrueVal); in visitSelectInst()
2952 if (auto *TrueGep = dyn_cast<GetElementPtrInst>(TrueVal)) in visitSelectInst()
2956 if (auto *NewGep = SelectGepWithBase(FalseGep, TrueVal, true)) in visitSelectInst()
2961 if (Instruction *FoldI = foldSelectIntoOp(SI, TrueVal, FalseVal)) in visitSelectInst()
3073 if (canSelectOperandBeMappingIntoPredBlock(TrueVal, SI) && in visitSelectInst()
3078 if (SelectInst *TrueSI = dyn_cast<SelectInst>(TrueVal)) { in visitSelectInst()
3107 if (FalseSI->getTrueValue() == TrueVal && FalseSI->hasOneUse()) { in visitSelectInst()
3133 if (match(TrueVal, m_OneUse(m_BinOp(TrueBO))) && in visitSelectInst()
3192 return replaceInstUsesWith(SI, TrueVal); in visitSelectInst()
3222 match(TrueVal, m_MaskedLoad(m_Value(), m_Value(), m_Specific(CondVal), in visitSelectInst()
3224 auto *MaskedLoad = cast<IntrinsicInst>(TrueVal); in visitSelectInst()
3231 if (match(TrueVal, m_Zero()) && in visitSelectInst()
3246 MaskedLoad->setArgOperand(3, TrueVal /* Zero */); in visitSelectInst()