Lines Matching defs:TrueVal
523 Instruction *InstCombinerImpl::foldSelectIntoOp(SelectInst &SI, Value *TrueVal,
527 auto TryFoldSelectIntoOp = [&](SelectInst &SI, Value *TrueVal,
530 auto *TVI = dyn_cast<BinaryOperator>(TrueVal);
587 if (Instruction *R = TryFoldSelectIntoOp(SI, TrueVal, FalseVal, false))
590 if (Instruction *R = TryFoldSelectIntoOp(SI, FalseVal, TrueVal, true))
612 // The TrueVal has general form of: and %B, 1
690 static Value *foldSelectICmpLshrAshr(const ICmpInst *IC, Value *TrueVal,
711 std::swap(TrueVal, FalseVal);
713 if (match(TrueVal, m_LShr(m_Value(X), m_Value(Y))) &&
718 bool IsExact = Ashr->isExact() && cast<Instruction>(TrueVal)->isExact();
745 static Value *foldSelectICmpAndBinOp(const ICmpInst *IC, Value *TrueVal,
750 if (!TrueVal->getType()->isIntOrIntVectorTy() ||
751 TrueVal->getType()->isVectorTy() != IC->getType()->isVectorTy())
784 if (match(FalseVal, m_BinOp(m_Specific(TrueVal), m_Power2(C2)))) {
785 Y = TrueVal;
788 } else if (match(TrueVal, m_BinOp(m_Specific(FalseVal), m_Power2(C2)))) {
790 BinOp = cast<BinaryOperator>(TrueVal);
879 auto *TrueVal = SI.getTrueValue();
892 std::swap(TrueVal, FalseVal);
894 // Check that TrueVal is a constant instead of matching it with m_Zero()
898 auto *TrueValC = dyn_cast<Constant>(TrueVal);
906 // If X is compared with 0 then TrueVal could be either zero or undef.
922 const Value *TrueVal,
931 if (match(TrueVal, m_Zero())) {
933 std::swap(TrueVal, FalseVal);
942 if (match(B, m_Zero()) && match(TrueVal, m_Add(m_Specific(A), m_AllOnes())))
966 if (match(TrueVal, m_Sub(m_Specific(B), m_Specific(A))) ||
968 match(TrueVal, m_Add(m_Specific(B), m_SpecificInt(-*C)))))
970 else if (!match(TrueVal, m_Sub(m_Specific(A), m_Specific(B))) &&
972 match(TrueVal, m_Add(m_Specific(A), m_SpecificInt(-*C)))))
977 if (IsNegative && !TrueVal->hasOneUse() && !ICI->hasOneUse())
1142 static Instruction *foldSelectCtlzToCttz(ICmpInst *ICI, Value *TrueVal,
1145 unsigned BitWidth = TrueVal->getType()->getScalarSizeInBits();
1150 std::swap(TrueVal, FalseVal);
1160 if (TrueVal != Ctlz && !match(TrueVal, m_SpecificInt(BitWidth)))
1185 static Value *foldSelectCttzCtlz(ICmpInst *ICI, Value *TrueVal, Value *FalseVal,
1196 Value *ValueOnZero = TrueVal;
1248 static Value *canonicalizeSPF(ICmpInst &Cmp, Value *TrueVal, Value *FalseVal,
1252 if (!TrueVal->getType()->isIntOrIntVectorTy())
1256 matchDecomposedSelectPattern(&Cmp, TrueVal, FalseVal, LHS, RHS).Flavor;
1333 Value *TrueVal = Sel.getTrueValue(), *FalseVal = Sel.getFalseValue();
1336 std::swap(TrueVal, FalseVal);
1351 if (TrueVal == OldOp && (isa<Constant>(OldOp) || !isa<Constant>(NewOp)))
1354 if (Value *V = simplifyWithOpReplaced(TrueVal, OldOp, NewOp, SQ,
1372 // Even if TrueVal does not simplify, we can directly replace a use of
1381 if (replaceInInstruction(TrueVal, OldOp, NewOp))
1406 &DropFlags) == TrueVal ||
1409 &DropFlags) == TrueVal) {
1800 Value *TrueVal,
1814 if (!match(TrueVal, m_SpecificICmp(ICmpInst::ICMP_NE, m_Specific(B),
1843 Value *TrueVal = SI.getTrueValue();
1849 std::swap(TrueVal, FalseVal);
1852 foldSelectWithExtremeEqCond(CmpLHS, CmpRHS, TrueVal, FalseVal))
1860 static Value *foldSelectWithConstOpToBinOp(ICmpInst *Cmp, Value *TrueVal,
1874 if (match(TrueVal, m_Constant())) {
1875 std::swap(FalseVal, TrueVal);
1879 if (!match(TrueVal, m_BinOp(BOp)) || !match(FalseVal, m_Constant(C3)))
1936 Value *TrueVal = SI.getTrueValue();
1950 !match(TrueVal, m_Constant()) && !match(FalseVal, m_Constant()) &&
1962 foldSelectICmpAndAnd(SI.getType(), ICI, TrueVal, FalseVal, Builder))
1965 if (Value *V = foldSelectICmpAndZeroShl(ICI, TrueVal, FalseVal, Builder))
1968 if (Instruction *V = foldSelectCtlzToCttz(ICI, TrueVal, FalseVal, Builder))
1971 if (Instruction *V = foldSelectZeroOrOnes(ICI, TrueVal, FalseVal, Builder))
1974 if (Value *V = foldSelectICmpAndBinOp(ICI, TrueVal, FalseVal, Builder))
1977 if (Value *V = foldSelectICmpLshrAshr(ICI, TrueVal, FalseVal, Builder))
1980 if (Value *V = foldSelectCttzCtlz(ICI, TrueVal, FalseVal, *this))
1983 if (Value *V = canonicalizeSaturatedSubtract(ICI, TrueVal, FalseVal, Builder))
1986 if (Value *V = canonicalizeSaturatedAdd(ICI, TrueVal, FalseVal, Builder))
1989 if (Value *V = foldAbsDiff(ICI, TrueVal, FalseVal, Builder))
1992 if (Value *V = foldSelectWithConstOpToBinOp(ICI, TrueVal, FalseVal, Builder))
2024 Value *TrueVal = SI.getTrueValue();
2026 auto *TI = dyn_cast<Instruction>(TrueVal);
2099 Value *TrueVal = SI.getTrueValue();
2114 Value *TrueVal, *FalseVal, *Op;
2117 m_Value(TrueVal), m_Value(FalseVal))))
2137 IsMinMax(TrueVal, FalseVal))
2144 IsMinMax(FalseVal, TrueVal))
2150 IsMinMax(TrueVal, FalseVal))
2155 IsMinMax(FalseVal, TrueVal))
2160 IsMinMax(FalseVal, TrueVal))
2165 IsMinMax(TrueVal, FalseVal))
2174 match(TrueVal, m_AllOnes()))
2178 match(TrueVal, m_Zero()))
2182 IsSignedSaturateLimit(TrueVal, /*IsAdd=*/true))
2193 IsSignedSaturateLimit(TrueVal, /*IsAdd=*/false))
2720 Value *TrueVal = SI.getTrueValue();
2735 std::swap(TrueVal, FalseVal);
2748 if (match(TrueVal, m_c_Add(m_Specific(RemRes), m_Value(Remainder))) &&
2758 if (match(TrueVal, m_One()) &&
2772 Value *TrueVal = Sel.getTrueValue(), *FalseVal = Sel.getFalseValue();
2784 match(Cond, m_c_ICmp(Pred, m_Specific(TrueVal), m_Specific(FalseVal))) &&
2786 return Pred == ICmpInst::ICMP_EQ ? FalseVal : TrueVal;
2829 Value *TrueVal = SI.getTrueValue();
2834 std::swap(TrueVal, X);
2841 if (match(TrueVal, m_FSub(m_PosZeroFP(), m_Specific(X)))) {
2852 if (!match(TrueVal, m_FNeg(m_Specific(X))))
2858 FastMathFlags FMF = cast<FPMathOperator>(TrueVal)->getFastMathFlags();
2905 Value *TrueVal = SI.getTrueValue();
2909 std::swap(TrueVal, X);
2918 if (!match(TrueVal, m_FNeg(m_Specific(X))))
2920 if (Swap == TrueIfSigned && !CondVal->hasOneUse() && !TrueVal->hasOneUse())
3011 Value *TrueVal = nullptr;
3054 m_Select(m_Value(OuterSel.Cond), m_Value(OuterSel.TrueVal),
3059 std::swap(OuterSel.TrueVal, OuterSel.FalseVal);
3067 Value *InnerSelVal = IsAndVariant ? OuterSel.FalseVal : OuterSel.TrueVal;
3077 m_Select(m_Value(InnerSel.Cond), m_Value(InnerSel.TrueVal),
3083 std::swap(InnerSel.TrueVal, InnerSel.FalseVal);
3106 std::swap(InnerSel.TrueVal, InnerSel.FalseVal);
3112 AltCond, IsAndVariant ? OuterSel.TrueVal : InnerSel.FalseVal,
3113 IsAndVariant ? InnerSel.TrueVal : OuterSel.FalseVal);
3116 IsAndVariant ? SelInner : InnerSel.TrueVal,
3155 Value *TrueVal = SI.getTrueValue();
3163 TrueVal->getType() != CondVal->getType())
3173 if (match(TrueVal, m_One())) {
3216 if (impliesPoisonOrCond(TrueVal, CondVal, /*Expected=*/true)) {
3218 return BinaryOperator::CreateAnd(CondVal, TrueVal);
3222 impliesPoisonOrCond(TrueVal, B, /*Expected=*/true)) {
3225 SI, Builder.CreateLogicalAnd(A, Builder.CreateAnd(B, TrueVal)));
3230 match(TrueVal, m_LogicalOr(m_Value(C), m_Value(D))) &&
3231 (CondVal->hasOneUse() || TrueVal->hasOneUse())) {
3233 bool TrueLogicOr = isa<SelectInst>(TrueVal);
3260 if (match(TrueVal, m_Specific(Zero))) {
3267 return SelectInst::Create(NotCond, One, TrueVal);
3273 (CondVal->hasOneUse() || TrueVal->hasOneUse()) &&
3286 match(TrueVal, m_One()) && match(FalseVal, m_Specific(B)))
3290 match(TrueVal, m_Specific(B)) && match(FalseVal, m_Zero()))
3300 m_OneUse(m_c_Or(m_Not(m_Specific(TrueVal)), m_Value(C))))) {
3302 return SelectInst::Create(TrueVal, OrV, Zero);
3307 Value *OrV = Builder.CreateSelect(NotC, One, TrueVal);
3312 if (match(CondVal, m_OneUse(m_c_Or(m_Specific(TrueVal), m_Value(C))))) {
3315 return SelectInst::Create(TrueVal, One, AndV);
3321 Value *AndV = Builder.CreateSelect(C, TrueVal, Zero);
3325 if (match(FalseVal, m_Zero()) || match(TrueVal, m_One())) {
3328 Value *Op1 = IsAnd ? TrueVal : FalseVal;
3346 std::optional<bool> Res = isImpliedCondition(TrueVal, B, DL);
3350 if (match(TrueVal, m_LogicalOr(m_Value(A), m_Value(B))) &&
3359 if (match(TrueVal, m_One()) &&
3366 match(TrueVal, m_One())) {
3372 if (match(TrueVal, m_One())) {
3513 Value *TrueVal = SI.getTrueValue();
3520 if (match(TrueVal, m_One())) {
3521 std::swap(FalseVal, TrueVal);
3528 !match(TrueVal,
3645 Value *Cmp1, Value *TrueVal,
3650 match(TrueVal, m_c_FMul(m_Specific(Cmp0), m_Value(MulRHS)))) {
3651 FastMathFlags FMF = cast<FPMathOperator>(TrueVal)->getFastMathFlags();
3752 Value *TrueVal = SI.getTrueValue();
3756 if (Value *V = simplifySelectInst(CondVal, TrueVal, FalseVal,
3772 if (Value *S = simplifyWithOpReplaced(TrueVal, CondVal,
3782 if (replaceInInstruction(TrueVal, CondVal,
3799 // Do not handle i1 TrueVal and FalseVal otherwise would result in
3804 if (match(TrueVal, m_One()) && match(FalseVal, m_Zero()))
3808 if (match(TrueVal, m_AllOnes()) && match(FalseVal, m_Zero()))
3812 if (match(TrueVal, m_Zero()) && match(FalseVal, m_One())) {
3818 if (match(TrueVal, m_Zero()) && match(FalseVal, m_AllOnes())) {
3830 if ((Cmp0 == TrueVal && Cmp1 == FalseVal) ||
3831 (Cmp0 == FalseVal && Cmp1 == TrueVal)) {
3843 Builder.CreateSelectFMF(NewCond, FalseVal, TrueVal, FCmp);
3869 MatchCmp1 = TrueVal;
3871 MatchCmp0 = TrueVal;
3932 auto *TI = dyn_cast<Instruction>(TrueVal);
3965 if (auto *TrueGep = dyn_cast<GetElementPtrInst>(TrueVal))
3969 if (auto *NewGep = SelectGepWithBase(FalseGep, TrueVal, true))
3974 if (Instruction *FoldI = foldSelectIntoOp(SI, TrueVal, FalseVal))
4029 if (SelectInst *TrueSI = dyn_cast<SelectInst>(TrueVal)) {
4058 if (FalseSI->getTrueValue() == TrueVal && FalseSI->hasOneUse()) {
4074 if (match(TrueVal, m_OneUse(m_BinOp(TrueBO))) && !TrueBO->isIntDivRem()) {
4131 return replaceInstUsesWith(SI, TrueVal);
4167 (match(TrueVal, m_MaskedLoad(m_Value(), m_Value(), m_Specific(CondVal),
4169 match(TrueVal, m_MaskedGather(m_Value(), m_Value(), m_Specific(CondVal),
4171 auto *MaskedInst = cast<IntrinsicInst>(TrueVal);
4178 if (match(TrueVal, m_Zero()) &&
4195 MaskedInst->setArgOperand(3, TrueVal /* Zero */);
4229 if (Value *V = simplifySelectInst(B, TrueVal, FalseVal,
4231 return SelectInst::Create(A, IsAnd ? V : TrueVal, IsAnd ? FalseVal : V);
4236 if (Value *V = canonicalizeSPF(*Cmp, TrueVal, FalseVal, *this))
4237 return SelectInst::Create(A, IsAnd ? V : TrueVal,
4268 if (CondVal->getType() == SI.getType() && isKnownInversion(FalseVal, TrueVal))
4274 (!isa<Constant>(TrueVal) || !isa<Constant>(FalseVal))) {
4282 if (!isa<Constant>(TrueVal) &&
4283 hasAffectedValue(TrueVal, CC.AffectedValues, /*Depth=*/0)) {
4284 KnownBits Known = llvm::computeKnownBits(TrueVal, /*Depth=*/0, Q);
4307 if (TrueVal == Trunc)
4308 return replaceOperand(SI, 1, ConstantInt::get(TrueVal->getType(), 1));
4313 if (TrueVal == Trunc)
4315 Constant::getAllOnesValue(TrueVal->getType()));