Lines Matching refs:TrueVal

504 Instruction *InstCombinerImpl::foldSelectIntoOp(SelectInst &SI, Value *TrueVal,  in foldSelectIntoOp()  argument
508 auto TryFoldSelectIntoOp = [&](SelectInst &SI, Value *TrueVal, in foldSelectIntoOp()
511 auto *TVI = dyn_cast<BinaryOperator>(TrueVal); in foldSelectIntoOp()
553 if (Instruction *R = TryFoldSelectIntoOp(SI, TrueVal, FalseVal, false)) in foldSelectIntoOp()
556 if (Instruction *R = TryFoldSelectIntoOp(SI, FalseVal, TrueVal, true)) in foldSelectIntoOp()
656 static Value *foldSelectICmpLshrAshr(const ICmpInst *IC, Value *TrueVal, in foldSelectICmpLshrAshr() argument
677 std::swap(TrueVal, FalseVal); in foldSelectICmpLshrAshr()
679 if (match(TrueVal, m_LShr(m_Value(X), m_Value(Y))) && in foldSelectICmpLshrAshr()
684 bool IsExact = Ashr->isExact() && cast<Instruction>(TrueVal)->isExact(); in foldSelectICmpLshrAshr()
711 static Value *foldSelectICmpAndBinOp(const ICmpInst *IC, Value *TrueVal, in foldSelectICmpAndBinOp() argument
716 if (!TrueVal->getType()->isIntOrIntVectorTy() || in foldSelectICmpAndBinOp()
717 TrueVal->getType()->isVectorTy() != IC->getType()->isVectorTy()) in foldSelectICmpAndBinOp()
749 if (match(FalseVal, m_BinOp(m_Specific(TrueVal), m_Power2(C2)))) { in foldSelectICmpAndBinOp()
750 Y = TrueVal; in foldSelectICmpAndBinOp()
753 } else if (match(TrueVal, m_BinOp(m_Specific(FalseVal), m_Power2(C2)))) { in foldSelectICmpAndBinOp()
755 BinOp = cast<BinaryOperator>(TrueVal); in foldSelectICmpAndBinOp()
844 auto *TrueVal = SI.getTrueValue(); in foldSelectZeroOrMul() local
857 std::swap(TrueVal, FalseVal); in foldSelectZeroOrMul()
863 auto *TrueValC = dyn_cast<Constant>(TrueVal); in foldSelectZeroOrMul()
888 const Value *TrueVal, in canonicalizeSaturatedSubtract() argument
897 if (match(TrueVal, m_Zero())) { in canonicalizeSaturatedSubtract()
899 std::swap(TrueVal, FalseVal); in canonicalizeSaturatedSubtract()
908 if (match(B, m_Zero()) && match(TrueVal, m_Add(m_Specific(A), m_AllOnes()))) in canonicalizeSaturatedSubtract()
932 if (match(TrueVal, m_Sub(m_Specific(B), m_Specific(A))) || in canonicalizeSaturatedSubtract()
934 match(TrueVal, m_Add(m_Specific(B), m_SpecificInt(-*C))))) in canonicalizeSaturatedSubtract()
936 else if (!match(TrueVal, m_Sub(m_Specific(A), m_Specific(B))) && in canonicalizeSaturatedSubtract()
938 match(TrueVal, m_Add(m_Specific(A), m_SpecificInt(-*C))))) in canonicalizeSaturatedSubtract()
943 if (IsNegative && !TrueVal->hasOneUse() && !ICI->hasOneUse()) in canonicalizeSaturatedSubtract()
1075 static Instruction *foldSelectCtlzToCttz(ICmpInst *ICI, Value *TrueVal, in foldSelectCtlzToCttz() argument
1078 unsigned BitWidth = TrueVal->getType()->getScalarSizeInBits(); in foldSelectCtlzToCttz()
1083 std::swap(TrueVal, FalseVal); in foldSelectCtlzToCttz()
1093 if (TrueVal != Ctlz && !match(TrueVal, m_SpecificInt(BitWidth))) in foldSelectCtlzToCttz()
1118 static Value *foldSelectCttzCtlz(ICmpInst *ICI, Value *TrueVal, Value *FalseVal, in foldSelectCttzCtlz() argument
1129 Value *ValueOnZero = TrueVal; in foldSelectCttzCtlz()
1174 static Value *canonicalizeSPF(ICmpInst &Cmp, Value *TrueVal, Value *FalseVal, in canonicalizeSPF() argument
1178 if (!TrueVal->getType()->isIntOrIntVectorTy()) in canonicalizeSPF()
1182 matchDecomposedSelectPattern(&Cmp, TrueVal, FalseVal, LHS, RHS).Flavor; in canonicalizeSPF()
1270 Value *TrueVal = Sel.getTrueValue(), *FalseVal = Sel.getFalseValue(); in foldSelectValueEquivalence() local
1273 std::swap(TrueVal, FalseVal); in foldSelectValueEquivalence()
1283 if (TrueVal != CmpLHS && in foldSelectValueEquivalence()
1285 if (Value *V = simplifyWithOpReplaced(TrueVal, CmpLHS, CmpRHS, SQ, in foldSelectValueEquivalence()
1302 if (replaceInInstruction(TrueVal, CmpLHS, CmpRHS)) in foldSelectValueEquivalence()
1305 if (TrueVal != CmpRHS && in foldSelectValueEquivalence()
1307 if (Value *V = simplifyWithOpReplaced(TrueVal, CmpRHS, CmpLHS, SQ, in foldSelectValueEquivalence()
1327 &DropFlags) == TrueVal || in foldSelectValueEquivalence()
1330 &DropFlags) == TrueVal) { in foldSelectValueEquivalence()
1704 Value *TrueVal = SI.getTrueValue(); in foldSelectInstWithICmp() local
1710 if (CmpLHS == TrueVal && Pred == ICmpInst::ICMP_EQ) { in foldSelectInstWithICmp()
1726 !match(TrueVal, m_Constant()) && !match(FalseVal, m_Constant()) && in foldSelectInstWithICmp()
1739 if (TrueVal->getType()->isIntOrIntVectorTy()) { in foldSelectInstWithICmp()
1741 DL.getTypeSizeInBits(TrueVal->getType()->getScalarType()); in foldSelectInstWithICmp()
1766 if (TrueWhenUnset && TrueVal == X && in foldSelectInstWithICmp()
1771 match(TrueVal, m_Xor(m_Specific(X), m_APInt(C))) && *Y == *C) in foldSelectInstWithICmp()
1775 match(TrueVal, m_Xor(m_Specific(X), m_APInt(C))) && *Y == *C) in foldSelectInstWithICmp()
1778 else if (!TrueWhenUnset && TrueVal == X && in foldSelectInstWithICmp()
1788 foldSelectICmpAndAnd(SI.getType(), ICI, TrueVal, FalseVal, Builder)) in foldSelectInstWithICmp()
1791 if (Value *V = foldSelectICmpAndZeroShl(ICI, TrueVal, FalseVal, Builder)) in foldSelectInstWithICmp()
1794 if (Instruction *V = foldSelectCtlzToCttz(ICI, TrueVal, FalseVal, Builder)) in foldSelectInstWithICmp()
1797 if (Instruction *V = foldSelectZeroOrOnes(ICI, TrueVal, FalseVal, Builder)) in foldSelectInstWithICmp()
1800 if (Value *V = foldSelectICmpAndBinOp(ICI, TrueVal, FalseVal, Builder)) in foldSelectInstWithICmp()
1803 if (Value *V = foldSelectICmpLshrAshr(ICI, TrueVal, FalseVal, Builder)) in foldSelectInstWithICmp()
1806 if (Value *V = foldSelectCttzCtlz(ICI, TrueVal, FalseVal, Builder)) in foldSelectInstWithICmp()
1809 if (Value *V = canonicalizeSaturatedSubtract(ICI, TrueVal, FalseVal, Builder)) in foldSelectInstWithICmp()
1812 if (Value *V = canonicalizeSaturatedAdd(ICI, TrueVal, FalseVal, Builder)) in foldSelectInstWithICmp()
1815 if (Value *V = foldAbsDiff(ICI, TrueVal, FalseVal, Builder)) in foldSelectInstWithICmp()
1882 Value *TrueVal = SI.getTrueValue(); in foldAddSubSelect() local
1884 auto *TI = dyn_cast<Instruction>(TrueVal); in foldAddSubSelect()
1957 Value *TrueVal = SI.getTrueValue(); in foldOverflowingAddSubSelect() local
1972 Value *TrueVal, *FalseVal, *Op; in foldOverflowingAddSubSelect() local
1975 m_Value(TrueVal), m_Value(FalseVal)))) in foldOverflowingAddSubSelect()
1995 IsMinMax(TrueVal, FalseVal)) in foldOverflowingAddSubSelect()
2002 IsMinMax(FalseVal, TrueVal)) in foldOverflowingAddSubSelect()
2008 IsMinMax(TrueVal, FalseVal)) in foldOverflowingAddSubSelect()
2013 IsMinMax(FalseVal, TrueVal)) in foldOverflowingAddSubSelect()
2018 IsMinMax(FalseVal, TrueVal)) in foldOverflowingAddSubSelect()
2023 IsMinMax(TrueVal, FalseVal)) in foldOverflowingAddSubSelect()
2032 match(TrueVal, m_AllOnes())) in foldOverflowingAddSubSelect()
2036 match(TrueVal, m_Zero())) in foldOverflowingAddSubSelect()
2040 IsSignedSaturateLimit(TrueVal, /*IsAdd=*/true)) in foldOverflowingAddSubSelect()
2051 IsSignedSaturateLimit(TrueVal, /*IsAdd=*/false)) in foldOverflowingAddSubSelect()
2581 Value *TrueVal = SI.getTrueValue(); in foldSelectWithSRem() local
2596 std::swap(TrueVal, FalseVal); in foldSelectWithSRem()
2609 if (match(TrueVal, m_Add(m_Specific(RemRes), m_Value(Remainder))) && in foldSelectWithSRem()
2619 if (match(TrueVal, m_One()) && in foldSelectWithSRem()
2633 Value *TrueVal = Sel.getTrueValue(), *FalseVal = Sel.getFalseValue(); in foldSelectWithFrozenICmp() local
2645 match(Cond, m_c_ICmp(Pred, m_Specific(TrueVal), m_Specific(FalseVal))) && in foldSelectWithFrozenICmp()
2647 return Pred == ICmpInst::ICMP_EQ ? FalseVal : TrueVal; in foldSelectWithFrozenICmp()
2703 Value *TrueVal = SI.getTrueValue(); in foldSelectWithFCmpToFabs() local
2708 std::swap(TrueVal, X); in foldSelectWithFCmpToFabs()
2715 if (match(TrueVal, m_FSub(m_PosZeroFP(), m_Specific(X)))) { in foldSelectWithFCmpToFabs()
2726 if (!match(TrueVal, m_FNeg(m_Specific(X)))) in foldSelectWithFCmpToFabs()
2732 FastMathFlags FMF = cast<FPMathOperator>(TrueVal)->getFastMathFlags(); in foldSelectWithFCmpToFabs()
2854 Value *TrueVal = nullptr; member
2871 m_Select(m_Value(OuterSel.Cond), m_Value(OuterSel.TrueVal), in foldNestedSelects()
2876 std::swap(OuterSel.TrueVal, OuterSel.FalseVal); in foldNestedSelects()
2884 Value *InnerSelVal = IsAndVariant ? OuterSel.FalseVal : OuterSel.TrueVal; in foldNestedSelects()
2894 m_Select(m_Value(InnerSel.Cond), m_Value(InnerSel.TrueVal), in foldNestedSelects()
2900 std::swap(InnerSel.TrueVal, InnerSel.FalseVal); in foldNestedSelects()
2923 std::swap(InnerSel.TrueVal, InnerSel.FalseVal); in foldNestedSelects()
2929 AltCond, IsAndVariant ? OuterSel.TrueVal : InnerSel.FalseVal, in foldNestedSelects()
2930 IsAndVariant ? InnerSel.TrueVal : OuterSel.FalseVal); in foldNestedSelects()
2933 IsAndVariant ? SelInner : InnerSel.TrueVal, in foldNestedSelects()
2939 Value *TrueVal = SI.getTrueValue(); in foldSelectOfBools() local
2947 TrueVal->getType() != CondVal->getType()) in foldSelectOfBools()
2957 if (match(TrueVal, m_One())) { in foldSelectOfBools()
2999 if (impliesPoison(TrueVal, CondVal)) { in foldSelectOfBools()
3001 return BinaryOperator::CreateAnd(CondVal, TrueVal); in foldSelectOfBools()
3005 if (auto *RHS = dyn_cast<FCmpInst>(TrueVal)) in foldSelectOfBools()
3012 match(TrueVal, m_LogicalOr(m_Value(C), m_Value(D))) && in foldSelectOfBools()
3013 (CondVal->hasOneUse() || TrueVal->hasOneUse())) { in foldSelectOfBools()
3015 bool TrueLogicOr = isa<SelectInst>(TrueVal); in foldSelectOfBools()
3042 if (match(TrueVal, m_Specific(Zero))) { in foldSelectOfBools()
3049 return SelectInst::Create(NotCond, One, TrueVal); in foldSelectOfBools()
3055 (CondVal->hasOneUse() || TrueVal->hasOneUse()) && in foldSelectOfBools()
3068 match(TrueVal, m_One()) && match(FalseVal, m_Specific(B))) in foldSelectOfBools()
3072 match(TrueVal, m_Specific(B)) && match(FalseVal, m_Zero())) in foldSelectOfBools()
3082 m_OneUse(m_c_Or(m_Not(m_Specific(TrueVal)), m_Value(C))))) { in foldSelectOfBools()
3084 return SelectInst::Create(TrueVal, OrV, Zero); in foldSelectOfBools()
3089 Value *OrV = Builder.CreateSelect(NotC, One, TrueVal); in foldSelectOfBools()
3094 if (match(CondVal, m_OneUse(m_c_Or(m_Specific(TrueVal), m_Value(C))))) { in foldSelectOfBools()
3097 return SelectInst::Create(TrueVal, One, AndV); in foldSelectOfBools()
3103 Value *AndV = Builder.CreateSelect(C, TrueVal, Zero); in foldSelectOfBools()
3107 if (match(FalseVal, m_Zero()) || match(TrueVal, m_One())) { in foldSelectOfBools()
3110 Value *Op1 = IsAnd ? TrueVal : FalseVal; in foldSelectOfBools()
3135 std::optional<bool> Res = isImpliedCondition(TrueVal, B, DL); in foldSelectOfBools()
3139 if (match(TrueVal, m_LogicalOr(m_Value(A), m_Value(B))) && in foldSelectOfBools()
3148 if (match(TrueVal, m_One()) && in foldSelectOfBools()
3155 match(TrueVal, m_One())) { in foldSelectOfBools()
3161 if (match(TrueVal, m_One())) { in foldSelectOfBools()
3301 Value *TrueVal = SI.getTrueValue(); in foldBitCeil() local
3308 if (match(TrueVal, m_One())) { in foldBitCeil()
3309 std::swap(FalseVal, TrueVal); in foldBitCeil()
3316 !match(TrueVal, in foldBitCeil()
3347 Value *Cmp1, Value *TrueVal, in matchFMulByZeroIfResultEqZero() argument
3352 match(TrueVal, m_c_FMul(m_Specific(Cmp0), m_Value(MulRHS)))) { in matchFMulByZeroIfResultEqZero()
3353 FastMathFlags FMF = cast<FPMathOperator>(TrueVal)->getFastMathFlags(); in matchFMulByZeroIfResultEqZero()
3365 Value *TrueVal = SI.getTrueValue(); in visitSelectInst() local
3369 if (Value *V = simplifySelectInst(CondVal, TrueVal, FalseVal, in visitSelectInst()
3385 if (Value *S = simplifyWithOpReplaced(TrueVal, CondVal, in visitSelectInst()
3411 if (match(TrueVal, m_One()) && match(FalseVal, m_Zero())) in visitSelectInst()
3415 if (match(TrueVal, m_AllOnes()) && match(FalseVal, m_Zero())) in visitSelectInst()
3419 if (match(TrueVal, m_Zero()) && match(FalseVal, m_One())) { in visitSelectInst()
3425 if (match(TrueVal, m_Zero()) && match(FalseVal, m_AllOnes())) { in visitSelectInst()
3437 if ((Cmp0 == TrueVal && Cmp1 == FalseVal) || in visitSelectInst()
3438 (Cmp0 == FalseVal && Cmp1 == TrueVal)) { in visitSelectInst()
3451 Value *NewSel = Builder.CreateSelect(NewCond, FalseVal, TrueVal); in visitSelectInst()
3477 MatchCmp1 = TrueVal; in visitSelectInst()
3479 MatchCmp0 = TrueVal; in visitSelectInst()
3526 auto *TI = dyn_cast<Instruction>(TrueVal); in visitSelectInst()
3560 if (auto *TrueGep = dyn_cast<GetElementPtrInst>(TrueVal)) in visitSelectInst()
3564 if (auto *NewGep = SelectGepWithBase(FalseGep, TrueVal, true)) in visitSelectInst()
3569 if (Instruction *FoldI = foldSelectIntoOp(SI, TrueVal, FalseVal)) in visitSelectInst()
3626 if (canSelectOperandBeMappingIntoPredBlock(TrueVal, SI) && in visitSelectInst()
3631 if (SelectInst *TrueSI = dyn_cast<SelectInst>(TrueVal)) { in visitSelectInst()
3660 if (FalseSI->getTrueValue() == TrueVal && FalseSI->hasOneUse()) { in visitSelectInst()
3676 if (match(TrueVal, m_OneUse(m_BinOp(TrueBO))) && !TrueBO->isIntDivRem()) { in visitSelectInst()
3733 return replaceInstUsesWith(SI, TrueVal); in visitSelectInst()
3766 (match(TrueVal, m_MaskedLoad(m_Value(), m_Value(), m_Specific(CondVal), in visitSelectInst()
3768 match(TrueVal, m_MaskedGather(m_Value(), m_Value(), m_Specific(CondVal), in visitSelectInst()
3770 auto *MaskedInst = cast<IntrinsicInst>(TrueVal); in visitSelectInst()
3777 if (match(TrueVal, m_Zero()) && in visitSelectInst()
3794 MaskedInst->setArgOperand(3, TrueVal /* Zero */); in visitSelectInst()
3819 if (Value *V = simplifySelectInst(B, TrueVal, FalseVal, in visitSelectInst()
3821 return SelectInst::Create(A, IsAnd ? V : TrueVal, IsAnd ? FalseVal : V); in visitSelectInst()
3826 if (Value *V = canonicalizeSPF(*Cmp, TrueVal, FalseVal, *this)) in visitSelectInst()
3827 return SelectInst::Create(A, IsAnd ? V : TrueVal, in visitSelectInst()