Lines Matching refs:TrueVal
510 Instruction *InstCombinerImpl::foldSelectIntoOp(SelectInst &SI, Value *TrueVal, in foldSelectIntoOp() argument
514 auto TryFoldSelectIntoOp = [&](SelectInst &SI, Value *TrueVal, in foldSelectIntoOp()
517 auto *TVI = dyn_cast<BinaryOperator>(TrueVal); in foldSelectIntoOp()
569 if (Instruction *R = TryFoldSelectIntoOp(SI, TrueVal, FalseVal, false)) in foldSelectIntoOp()
572 if (Instruction *R = TryFoldSelectIntoOp(SI, FalseVal, TrueVal, true)) in foldSelectIntoOp()
672 static Value *foldSelectICmpLshrAshr(const ICmpInst *IC, Value *TrueVal, in foldSelectICmpLshrAshr() argument
693 std::swap(TrueVal, FalseVal); in foldSelectICmpLshrAshr()
695 if (match(TrueVal, m_LShr(m_Value(X), m_Value(Y))) && in foldSelectICmpLshrAshr()
700 bool IsExact = Ashr->isExact() && cast<Instruction>(TrueVal)->isExact(); in foldSelectICmpLshrAshr()
727 static Value *foldSelectICmpAndBinOp(const ICmpInst *IC, Value *TrueVal, in foldSelectICmpAndBinOp() argument
732 if (!TrueVal->getType()->isIntOrIntVectorTy() || in foldSelectICmpAndBinOp()
733 TrueVal->getType()->isVectorTy() != IC->getType()->isVectorTy()) in foldSelectICmpAndBinOp()
765 if (match(FalseVal, m_BinOp(m_Specific(TrueVal), m_Power2(C2)))) { in foldSelectICmpAndBinOp()
766 Y = TrueVal; in foldSelectICmpAndBinOp()
769 } else if (match(TrueVal, m_BinOp(m_Specific(FalseVal), m_Power2(C2)))) { in foldSelectICmpAndBinOp()
771 BinOp = cast<BinaryOperator>(TrueVal); in foldSelectICmpAndBinOp()
860 auto *TrueVal = SI.getTrueValue(); in foldSelectZeroOrMul() local
873 std::swap(TrueVal, FalseVal); in foldSelectZeroOrMul()
879 auto *TrueValC = dyn_cast<Constant>(TrueVal); in foldSelectZeroOrMul()
904 const Value *TrueVal, in canonicalizeSaturatedSubtract() argument
913 if (match(TrueVal, m_Zero())) { in canonicalizeSaturatedSubtract()
915 std::swap(TrueVal, FalseVal); in canonicalizeSaturatedSubtract()
924 if (match(B, m_Zero()) && match(TrueVal, m_Add(m_Specific(A), m_AllOnes()))) in canonicalizeSaturatedSubtract()
948 if (match(TrueVal, m_Sub(m_Specific(B), m_Specific(A))) || in canonicalizeSaturatedSubtract()
950 match(TrueVal, m_Add(m_Specific(B), m_SpecificInt(-*C))))) in canonicalizeSaturatedSubtract()
952 else if (!match(TrueVal, m_Sub(m_Specific(A), m_Specific(B))) && in canonicalizeSaturatedSubtract()
954 match(TrueVal, m_Add(m_Specific(A), m_SpecificInt(-*C))))) in canonicalizeSaturatedSubtract()
959 if (IsNegative && !TrueVal->hasOneUse() && !ICI->hasOneUse()) in canonicalizeSaturatedSubtract()
1091 static Instruction *foldSelectCtlzToCttz(ICmpInst *ICI, Value *TrueVal, in foldSelectCtlzToCttz() argument
1094 unsigned BitWidth = TrueVal->getType()->getScalarSizeInBits(); in foldSelectCtlzToCttz()
1099 std::swap(TrueVal, FalseVal); in foldSelectCtlzToCttz()
1109 if (TrueVal != Ctlz && !match(TrueVal, m_SpecificInt(BitWidth))) in foldSelectCtlzToCttz()
1134 static Value *foldSelectCttzCtlz(ICmpInst *ICI, Value *TrueVal, Value *FalseVal, in foldSelectCttzCtlz() argument
1145 Value *ValueOnZero = TrueVal; in foldSelectCttzCtlz()
1193 static Value *canonicalizeSPF(ICmpInst &Cmp, Value *TrueVal, Value *FalseVal, in canonicalizeSPF() argument
1197 if (!TrueVal->getType()->isIntOrIntVectorTy()) in canonicalizeSPF()
1201 matchDecomposedSelectPattern(&Cmp, TrueVal, FalseVal, LHS, RHS).Flavor; in canonicalizeSPF()
1292 Value *TrueVal = Sel.getTrueValue(), *FalseVal = Sel.getFalseValue(); in foldSelectValueEquivalence() local
1295 std::swap(TrueVal, FalseVal); in foldSelectValueEquivalence()
1308 if (TrueVal == OldOp) in foldSelectValueEquivalence()
1311 if (Value *V = simplifyWithOpReplaced(TrueVal, OldOp, NewOp, SQ, in foldSelectValueEquivalence()
1339 if (replaceInInstruction(TrueVal, OldOp, NewOp)) in foldSelectValueEquivalence()
1364 &DropFlags) == TrueVal || in foldSelectValueEquivalence()
1367 &DropFlags) == TrueVal) { in foldSelectValueEquivalence()
1723 Value *TrueVal = SI.getTrueValue(); in foldSelectICmpEq() local
1729 std::swap(TrueVal, FalseVal); in foldSelectICmpEq()
1738 !match(TrueVal, m_c_BitwiseLogic(m_Specific(X), m_Specific(Y)))) in foldSelectICmpEq()
1766 if (match(TrueVal, m_c_Or(m_Specific(X), m_Specific(Y)))) { in foldSelectICmpEq()
1772 } else if (match(TrueVal, m_c_Xor(m_Specific(X), m_Specific(Y)))) { in foldSelectICmpEq()
1784 if (match(TrueVal, m_c_And(m_Specific(X), m_Specific(Y)))) { in foldSelectICmpEq()
1790 } else if (match(TrueVal, m_c_Xor(m_Specific(X), m_Specific(Y)))) { in foldSelectICmpEq()
1802 if ((match(TrueVal, m_c_And(m_Specific(X), m_Specific(Y))))) { in foldSelectICmpEq()
1808 } else if (match(TrueVal, m_c_Or(m_Specific(X), m_Specific(Y)))) { in foldSelectICmpEq()
1845 Value *TrueVal = SI.getTrueValue(); in foldSelectInstWithICmp() local
1851 if (CmpLHS == TrueVal && Pred == ICmpInst::ICMP_EQ) { in foldSelectInstWithICmp()
1870 !match(TrueVal, m_Constant()) && !match(FalseVal, m_Constant()) && in foldSelectInstWithICmp()
1883 if (TrueVal->getType()->isIntOrIntVectorTy()) { in foldSelectInstWithICmp()
1885 DL.getTypeSizeInBits(TrueVal->getType()->getScalarType()); in foldSelectInstWithICmp()
1910 if (TrueWhenUnset && TrueVal == X && in foldSelectInstWithICmp()
1915 match(TrueVal, m_Xor(m_Specific(X), m_APInt(C))) && *Y == *C) in foldSelectInstWithICmp()
1919 match(TrueVal, m_Xor(m_Specific(X), m_APInt(C))) && *Y == *C) in foldSelectInstWithICmp()
1922 else if (!TrueWhenUnset && TrueVal == X && in foldSelectInstWithICmp()
1932 foldSelectICmpAndAnd(SI.getType(), ICI, TrueVal, FalseVal, Builder)) in foldSelectInstWithICmp()
1935 if (Value *V = foldSelectICmpAndZeroShl(ICI, TrueVal, FalseVal, Builder)) in foldSelectInstWithICmp()
1938 if (Instruction *V = foldSelectCtlzToCttz(ICI, TrueVal, FalseVal, Builder)) in foldSelectInstWithICmp()
1941 if (Instruction *V = foldSelectZeroOrOnes(ICI, TrueVal, FalseVal, Builder)) in foldSelectInstWithICmp()
1944 if (Value *V = foldSelectICmpAndBinOp(ICI, TrueVal, FalseVal, Builder)) in foldSelectInstWithICmp()
1947 if (Value *V = foldSelectICmpLshrAshr(ICI, TrueVal, FalseVal, Builder)) in foldSelectInstWithICmp()
1950 if (Value *V = foldSelectCttzCtlz(ICI, TrueVal, FalseVal, *this)) in foldSelectInstWithICmp()
1953 if (Value *V = canonicalizeSaturatedSubtract(ICI, TrueVal, FalseVal, Builder)) in foldSelectInstWithICmp()
1956 if (Value *V = canonicalizeSaturatedAdd(ICI, TrueVal, FalseVal, Builder)) in foldSelectInstWithICmp()
1959 if (Value *V = foldAbsDiff(ICI, TrueVal, FalseVal, Builder)) in foldSelectInstWithICmp()
2026 Value *TrueVal = SI.getTrueValue(); in foldAddSubSelect() local
2028 auto *TI = dyn_cast<Instruction>(TrueVal); in foldAddSubSelect()
2101 Value *TrueVal = SI.getTrueValue(); in foldOverflowingAddSubSelect() local
2116 Value *TrueVal, *FalseVal, *Op; in foldOverflowingAddSubSelect() local
2119 m_Value(TrueVal), m_Value(FalseVal)))) in foldOverflowingAddSubSelect()
2139 IsMinMax(TrueVal, FalseVal)) in foldOverflowingAddSubSelect()
2146 IsMinMax(FalseVal, TrueVal)) in foldOverflowingAddSubSelect()
2152 IsMinMax(TrueVal, FalseVal)) in foldOverflowingAddSubSelect()
2157 IsMinMax(FalseVal, TrueVal)) in foldOverflowingAddSubSelect()
2162 IsMinMax(FalseVal, TrueVal)) in foldOverflowingAddSubSelect()
2167 IsMinMax(TrueVal, FalseVal)) in foldOverflowingAddSubSelect()
2176 match(TrueVal, m_AllOnes())) in foldOverflowingAddSubSelect()
2180 match(TrueVal, m_Zero())) in foldOverflowingAddSubSelect()
2184 IsSignedSaturateLimit(TrueVal, /*IsAdd=*/true)) in foldOverflowingAddSubSelect()
2195 IsSignedSaturateLimit(TrueVal, /*IsAdd=*/false)) in foldOverflowingAddSubSelect()
2722 Value *TrueVal = SI.getTrueValue(); in foldSelectWithSRem() local
2737 std::swap(TrueVal, FalseVal); in foldSelectWithSRem()
2750 if (match(TrueVal, m_Add(m_Specific(RemRes), m_Value(Remainder))) && in foldSelectWithSRem()
2760 if (match(TrueVal, m_One()) && in foldSelectWithSRem()
2774 Value *TrueVal = Sel.getTrueValue(), *FalseVal = Sel.getFalseValue(); in foldSelectWithFrozenICmp() local
2786 match(Cond, m_c_ICmp(Pred, m_Specific(TrueVal), m_Specific(FalseVal))) && in foldSelectWithFrozenICmp()
2788 return Pred == ICmpInst::ICMP_EQ ? FalseVal : TrueVal; in foldSelectWithFrozenICmp()
2831 Value *TrueVal = SI.getTrueValue(); in foldSelectWithFCmpToFabs() local
2836 std::swap(TrueVal, X); in foldSelectWithFCmpToFabs()
2843 if (match(TrueVal, m_FSub(m_PosZeroFP(), m_Specific(X)))) { in foldSelectWithFCmpToFabs()
2854 if (!match(TrueVal, m_FNeg(m_Specific(X)))) in foldSelectWithFCmpToFabs()
2860 FastMathFlags FMF = cast<FPMathOperator>(TrueVal)->getFastMathFlags(); in foldSelectWithFCmpToFabs()
2907 Value *TrueVal = SI.getTrueValue(); in foldSelectWithFCmpToFabs() local
2911 std::swap(TrueVal, X); in foldSelectWithFCmpToFabs()
2920 if (!match(TrueVal, m_FNeg(m_Specific(X)))) in foldSelectWithFCmpToFabs()
2922 if (Swap == TrueIfSigned && !CondVal->hasOneUse() && !TrueVal->hasOneUse()) in foldSelectWithFCmpToFabs()
3013 Value *TrueVal = nullptr; member
3056 m_Select(m_Value(OuterSel.Cond), m_Value(OuterSel.TrueVal), in foldNestedSelects()
3061 std::swap(OuterSel.TrueVal, OuterSel.FalseVal); in foldNestedSelects()
3069 Value *InnerSelVal = IsAndVariant ? OuterSel.FalseVal : OuterSel.TrueVal; in foldNestedSelects()
3079 m_Select(m_Value(InnerSel.Cond), m_Value(InnerSel.TrueVal), in foldNestedSelects()
3085 std::swap(InnerSel.TrueVal, InnerSel.FalseVal); in foldNestedSelects()
3108 std::swap(InnerSel.TrueVal, InnerSel.FalseVal); in foldNestedSelects()
3114 AltCond, IsAndVariant ? OuterSel.TrueVal : InnerSel.FalseVal, in foldNestedSelects()
3115 IsAndVariant ? InnerSel.TrueVal : OuterSel.FalseVal); in foldNestedSelects()
3118 IsAndVariant ? SelInner : InnerSel.TrueVal, in foldNestedSelects()
3124 Value *TrueVal = SI.getTrueValue(); in foldSelectOfBools() local
3132 TrueVal->getType() != CondVal->getType()) in foldSelectOfBools()
3142 if (match(TrueVal, m_One())) { in foldSelectOfBools()
3191 if (impliesPoison(TrueVal, CondVal)) { in foldSelectOfBools()
3193 return BinaryOperator::CreateAnd(CondVal, TrueVal); in foldSelectOfBools()
3197 impliesPoison(TrueVal, B)) { in foldSelectOfBools()
3200 SI, Builder.CreateLogicalAnd(A, Builder.CreateAnd(B, TrueVal))); in foldSelectOfBools()
3204 if (auto *RHS = dyn_cast<FCmpInst>(TrueVal)) in foldSelectOfBools()
3211 match(TrueVal, m_LogicalOr(m_Value(C), m_Value(D))) && in foldSelectOfBools()
3212 (CondVal->hasOneUse() || TrueVal->hasOneUse())) { in foldSelectOfBools()
3214 bool TrueLogicOr = isa<SelectInst>(TrueVal); in foldSelectOfBools()
3241 if (match(TrueVal, m_Specific(Zero))) { in foldSelectOfBools()
3248 return SelectInst::Create(NotCond, One, TrueVal); in foldSelectOfBools()
3254 (CondVal->hasOneUse() || TrueVal->hasOneUse()) && in foldSelectOfBools()
3267 match(TrueVal, m_One()) && match(FalseVal, m_Specific(B))) in foldSelectOfBools()
3271 match(TrueVal, m_Specific(B)) && match(FalseVal, m_Zero())) in foldSelectOfBools()
3281 m_OneUse(m_c_Or(m_Not(m_Specific(TrueVal)), m_Value(C))))) { in foldSelectOfBools()
3283 return SelectInst::Create(TrueVal, OrV, Zero); in foldSelectOfBools()
3288 Value *OrV = Builder.CreateSelect(NotC, One, TrueVal); in foldSelectOfBools()
3293 if (match(CondVal, m_OneUse(m_c_Or(m_Specific(TrueVal), m_Value(C))))) { in foldSelectOfBools()
3296 return SelectInst::Create(TrueVal, One, AndV); in foldSelectOfBools()
3302 Value *AndV = Builder.CreateSelect(C, TrueVal, Zero); in foldSelectOfBools()
3306 if (match(FalseVal, m_Zero()) || match(TrueVal, m_One())) { in foldSelectOfBools()
3309 Value *Op1 = IsAnd ? TrueVal : FalseVal; in foldSelectOfBools()
3329 std::optional<bool> Res = isImpliedCondition(TrueVal, B, DL); in foldSelectOfBools()
3333 if (match(TrueVal, m_LogicalOr(m_Value(A), m_Value(B))) && in foldSelectOfBools()
3342 if (match(TrueVal, m_One()) && in foldSelectOfBools()
3349 match(TrueVal, m_One())) { in foldSelectOfBools()
3355 if (match(TrueVal, m_One())) { in foldSelectOfBools()
3495 Value *TrueVal = SI.getTrueValue(); in foldBitCeil() local
3502 if (match(TrueVal, m_One())) { in foldBitCeil()
3503 std::swap(FalseVal, TrueVal); in foldBitCeil()
3510 !match(TrueVal, in foldBitCeil()
3541 Value *Cmp1, Value *TrueVal, in matchFMulByZeroIfResultEqZero() argument
3546 match(TrueVal, m_c_FMul(m_Specific(Cmp0), m_Value(MulRHS)))) { in matchFMulByZeroIfResultEqZero()
3547 FastMathFlags FMF = cast<FPMathOperator>(TrueVal)->getFastMathFlags(); in matchFMulByZeroIfResultEqZero()
3586 Value *TrueVal = SI.getTrueValue(); in visitSelectInst() local
3590 if (Value *V = simplifySelectInst(CondVal, TrueVal, FalseVal, in visitSelectInst()
3606 if (Value *S = simplifyWithOpReplaced(TrueVal, CondVal, in visitSelectInst()
3632 if (match(TrueVal, m_One()) && match(FalseVal, m_Zero())) in visitSelectInst()
3636 if (match(TrueVal, m_AllOnes()) && match(FalseVal, m_Zero())) in visitSelectInst()
3640 if (match(TrueVal, m_Zero()) && match(FalseVal, m_One())) { in visitSelectInst()
3646 if (match(TrueVal, m_Zero()) && match(FalseVal, m_AllOnes())) { in visitSelectInst()
3658 if ((Cmp0 == TrueVal && Cmp1 == FalseVal) || in visitSelectInst()
3659 (Cmp0 == FalseVal && Cmp1 == TrueVal)) { in visitSelectInst()
3672 Value *NewSel = Builder.CreateSelect(NewCond, FalseVal, TrueVal); in visitSelectInst()
3698 MatchCmp1 = TrueVal; in visitSelectInst()
3700 MatchCmp0 = TrueVal; in visitSelectInst()
3747 auto *TI = dyn_cast<Instruction>(TrueVal); in visitSelectInst()
3780 if (auto *TrueGep = dyn_cast<GetElementPtrInst>(TrueVal)) in visitSelectInst()
3784 if (auto *NewGep = SelectGepWithBase(FalseGep, TrueVal, true)) in visitSelectInst()
3789 if (Instruction *FoldI = foldSelectIntoOp(SI, TrueVal, FalseVal)) in visitSelectInst()
3846 if (canSelectOperandBeMappingIntoPredBlock(TrueVal, SI) && in visitSelectInst()
3851 if (SelectInst *TrueSI = dyn_cast<SelectInst>(TrueVal)) { in visitSelectInst()
3880 if (FalseSI->getTrueValue() == TrueVal && FalseSI->hasOneUse()) { in visitSelectInst()
3896 if (match(TrueVal, m_OneUse(m_BinOp(TrueBO))) && !TrueBO->isIntDivRem()) { in visitSelectInst()
3953 return replaceInstUsesWith(SI, TrueVal); in visitSelectInst()
3986 (match(TrueVal, m_MaskedLoad(m_Value(), m_Value(), m_Specific(CondVal), in visitSelectInst()
3988 match(TrueVal, m_MaskedGather(m_Value(), m_Value(), m_Specific(CondVal), in visitSelectInst()
3990 auto *MaskedInst = cast<IntrinsicInst>(TrueVal); in visitSelectInst()
3997 if (match(TrueVal, m_Zero()) && in visitSelectInst()
4014 MaskedInst->setArgOperand(3, TrueVal /* Zero */); in visitSelectInst()
4042 if (Value *V = simplifySelectInst(B, TrueVal, FalseVal, in visitSelectInst()
4044 return SelectInst::Create(A, IsAnd ? V : TrueVal, IsAnd ? FalseVal : V); in visitSelectInst()
4049 if (Value *V = canonicalizeSPF(*Cmp, TrueVal, FalseVal, *this)) in visitSelectInst()
4050 return SelectInst::Create(A, IsAnd ? V : TrueVal, in visitSelectInst()
4081 if (CondVal->getType() == SI.getType() && isKnownInversion(FalseVal, TrueVal)) in visitSelectInst()
4087 (!isa<Constant>(TrueVal) || !isa<Constant>(FalseVal))) { in visitSelectInst()
4095 if (!isa<Constant>(TrueVal) && in visitSelectInst()
4096 hasAffectedValue(TrueVal, CC.AffectedValues, /*Depth=*/0)) { in visitSelectInst()
4097 KnownBits Known = llvm::computeKnownBits(TrueVal, /*Depth=*/0, Q); in visitSelectInst()