Lines Matching refs:TrueVal
438 Instruction *InstCombinerImpl::foldSelectIntoOp(SelectInst &SI, Value *TrueVal, in foldSelectIntoOp() argument
442 auto TryFoldSelectIntoOp = [&](SelectInst &SI, Value *TrueVal, in foldSelectIntoOp()
445 if (auto *TVI = dyn_cast<BinaryOperator>(TrueVal)) { in foldSelectIntoOp()
487 if (Instruction *R = TryFoldSelectIntoOp(SI, TrueVal, FalseVal, false)) in foldSelectIntoOp()
490 if (Instruction *R = TryFoldSelectIntoOp(SI, FalseVal, TrueVal, true)) in foldSelectIntoOp()
552 static Value *foldSelectICmpLshrAshr(const ICmpInst *IC, Value *TrueVal, in foldSelectICmpLshrAshr() argument
573 std::swap(TrueVal, FalseVal); in foldSelectICmpLshrAshr()
575 if (match(TrueVal, m_LShr(m_Value(X), m_Value(Y))) && in foldSelectICmpLshrAshr()
580 bool IsExact = Ashr->isExact() && cast<Instruction>(TrueVal)->isExact(); in foldSelectICmpLshrAshr()
600 static Value *foldSelectICmpAndOr(const ICmpInst *IC, Value *TrueVal, in foldSelectICmpAndOr() argument
605 if (!TrueVal->getType()->isIntOrIntVectorTy() || in foldSelectICmpAndOr()
606 TrueVal->getType()->isVectorTy() != IC->getType()->isVectorTy()) in foldSelectICmpAndOr()
647 bool OrOnFalseVal = match(FalseVal, m_Or(m_Specific(TrueVal), m_Power2(C2))); in foldSelectICmpAndOr()
649 OrOnTrueVal = match(TrueVal, m_Or(m_Specific(FalseVal), m_Power2(C2))); in foldSelectICmpAndOr()
654 Value *Y = OrOnFalseVal ? TrueVal : FalseVal; in foldSelectICmpAndOr()
664 Value *Or = OrOnFalseVal ? FalseVal : TrueVal; in foldSelectICmpAndOr()
734 auto *TrueVal = SI.getTrueValue(); in foldSelectZeroOrMul() local
747 std::swap(TrueVal, FalseVal); in foldSelectZeroOrMul()
753 auto *TrueValC = dyn_cast<Constant>(TrueVal); in foldSelectZeroOrMul()
778 const Value *TrueVal, in canonicalizeSaturatedSubtract() argument
786 if (match(TrueVal, m_Zero())) { in canonicalizeSaturatedSubtract()
788 std::swap(TrueVal, FalseVal); in canonicalizeSaturatedSubtract()
810 if (match(TrueVal, m_Sub(m_Specific(B), m_Specific(A))) || in canonicalizeSaturatedSubtract()
812 match(TrueVal, m_Add(m_Specific(B), m_SpecificInt(-*C))))) in canonicalizeSaturatedSubtract()
814 else if (!match(TrueVal, m_Sub(m_Specific(A), m_Specific(B))) && in canonicalizeSaturatedSubtract()
816 match(TrueVal, m_Add(m_Specific(A), m_SpecificInt(-*C))))) in canonicalizeSaturatedSubtract()
821 if (IsNegative && !TrueVal->hasOneUse() && !ICI->hasOneUse()) in canonicalizeSaturatedSubtract()
910 static Instruction *foldSelectCtlzToCttz(ICmpInst *ICI, Value *TrueVal, in foldSelectCtlzToCttz() argument
913 unsigned BitWidth = TrueVal->getType()->getScalarSizeInBits(); in foldSelectCtlzToCttz()
918 std::swap(TrueVal, FalseVal); in foldSelectCtlzToCttz()
921 m_Xor(m_Deferred(TrueVal), m_SpecificInt(BitWidth - 1)))) in foldSelectCtlzToCttz()
924 if (!match(TrueVal, m_Intrinsic<Intrinsic::ctlz>())) in foldSelectCtlzToCttz()
928 auto *II = cast<IntrinsicInst>(TrueVal); in foldSelectCtlzToCttz()
949 static Value *foldSelectCttzCtlz(ICmpInst *ICI, Value *TrueVal, Value *FalseVal, in foldSelectCttzCtlz() argument
960 Value *ValueOnZero = TrueVal; in foldSelectCttzCtlz()
1005 Value *TrueVal = Sel.getTrueValue(); in adjustMinMax() local
1030 if ((CmpLHS == TrueVal && AdjustedRHS == FalseVal) || in adjustMinMax()
1031 (CmpLHS == FalseVal && AdjustedRHS == TrueVal)) { in adjustMinMax()
1044 if (match(TrueVal, m_SExt(m_Specific(CmpLHS))) && SextRHS == FalseVal) { in adjustMinMax()
1045 CmpLHS = TrueVal; in adjustMinMax()
1048 SextRHS == TrueVal) { in adjustMinMax()
1057 if (match(TrueVal, m_ZExt(m_Specific(CmpLHS))) && ZextRHS == FalseVal) { in adjustMinMax()
1058 CmpLHS = TrueVal; in adjustMinMax()
1061 ZextRHS == TrueVal) { in adjustMinMax()
1076 std::swap(FalseVal, TrueVal); in adjustMinMax()
1080 Sel.setOperand(1, TrueVal); in adjustMinMax()
1167 Value *TrueVal = Sel.getTrueValue(), *FalseVal = Sel.getFalseValue(); in foldSelectValueEquivalence() local
1170 std::swap(TrueVal, FalseVal); in foldSelectValueEquivalence()
1180 if (TrueVal != CmpLHS && in foldSelectValueEquivalence()
1182 if (Value *V = simplifyWithOpReplaced(TrueVal, CmpLHS, CmpRHS, SQ, in foldSelectValueEquivalence()
1194 if (auto *I = dyn_cast<Instruction>(TrueVal)) in foldSelectValueEquivalence()
1202 if (TrueVal != CmpRHS && in foldSelectValueEquivalence()
1204 if (Value *V = simplifyWithOpReplaced(TrueVal, CmpRHS, CmpLHS, SQ, in foldSelectValueEquivalence()
1236 /* AllowRefinement */ false) == TrueVal || in foldSelectValueEquivalence()
1238 /* AllowRefinement */ false) == TrueVal) { in foldSelectValueEquivalence()
1593 Value *TrueVal = SI.getTrueValue(); in foldSelectInstWithICmp() local
1599 if (CmpLHS == TrueVal && Pred == ICmpInst::ICMP_EQ) { in foldSelectInstWithICmp()
1615 !match(TrueVal, m_Constant()) && !match(FalseVal, m_Constant()) && in foldSelectInstWithICmp()
1630 DL.getTypeSizeInBits(TrueVal->getType()->getScalarType()); in foldSelectInstWithICmp()
1655 if (TrueWhenUnset && TrueVal == X && in foldSelectInstWithICmp()
1660 match(TrueVal, m_Xor(m_Specific(X), m_APInt(C))) && *Y == *C) in foldSelectInstWithICmp()
1664 match(TrueVal, m_Xor(m_Specific(X), m_APInt(C))) && *Y == *C) in foldSelectInstWithICmp()
1667 else if (!TrueWhenUnset && TrueVal == X && in foldSelectInstWithICmp()
1677 foldSelectICmpAndAnd(SI.getType(), ICI, TrueVal, FalseVal, Builder)) in foldSelectInstWithICmp()
1680 if (Instruction *V = foldSelectCtlzToCttz(ICI, TrueVal, FalseVal, Builder)) in foldSelectInstWithICmp()
1683 if (Instruction *V = foldSelectZeroOrOnes(ICI, TrueVal, FalseVal, Builder)) in foldSelectInstWithICmp()
1686 if (Value *V = foldSelectICmpAndOr(ICI, TrueVal, FalseVal, Builder)) in foldSelectInstWithICmp()
1689 if (Value *V = foldSelectICmpLshrAshr(ICI, TrueVal, FalseVal, Builder)) in foldSelectInstWithICmp()
1692 if (Value *V = foldSelectCttzCtlz(ICI, TrueVal, FalseVal, Builder)) in foldSelectInstWithICmp()
1695 if (Value *V = canonicalizeSaturatedSubtract(ICI, TrueVal, FalseVal, Builder)) in foldSelectInstWithICmp()
1698 if (Value *V = canonicalizeSaturatedAdd(ICI, TrueVal, FalseVal, Builder)) in foldSelectInstWithICmp()
1765 Value *TrueVal = SI.getTrueValue(); in foldAddSubSelect() local
1767 auto *TI = dyn_cast<Instruction>(TrueVal); in foldAddSubSelect()
1840 Value *TrueVal = SI.getTrueValue(); in foldOverflowingAddSubSelect() local
1855 Value *TrueVal, *FalseVal, *Op; in foldOverflowingAddSubSelect() local
1858 m_Value(TrueVal), m_Value(FalseVal)))) in foldOverflowingAddSubSelect()
1878 IsMinMax(TrueVal, FalseVal)) in foldOverflowingAddSubSelect()
1885 IsMinMax(FalseVal, TrueVal)) in foldOverflowingAddSubSelect()
1891 IsMinMax(TrueVal, FalseVal)) in foldOverflowingAddSubSelect()
1896 IsMinMax(FalseVal, TrueVal)) in foldOverflowingAddSubSelect()
1901 IsMinMax(FalseVal, TrueVal)) in foldOverflowingAddSubSelect()
1906 IsMinMax(TrueVal, FalseVal)) in foldOverflowingAddSubSelect()
1915 match(TrueVal, m_AllOnes())) in foldOverflowingAddSubSelect()
1919 match(TrueVal, m_Zero())) in foldOverflowingAddSubSelect()
1923 IsSignedSaturateLimit(TrueVal, /*IsAdd=*/true)) in foldOverflowingAddSubSelect()
1934 IsSignedSaturateLimit(TrueVal, /*IsAdd=*/false)) in foldOverflowingAddSubSelect()
2445 Value *TrueVal = Sel.getTrueValue(), *FalseVal = Sel.getFalseValue(); in foldSelectWithFrozenICmp() local
2457 match(Cond, m_c_ICmp(Pred, m_Specific(TrueVal), m_Specific(FalseVal))) && in foldSelectWithFrozenICmp()
2459 return Pred == ICmpInst::ICMP_EQ ? FalseVal : TrueVal; in foldSelectWithFrozenICmp()
2514 Value *TrueVal = SI.getTrueValue(); in foldSelectWithFCmpToFabs() local
2519 std::swap(TrueVal, X); in foldSelectWithFCmpToFabs()
2526 if (match(TrueVal, m_FSub(m_PosZeroFP(), m_Specific(X)))) { in foldSelectWithFCmpToFabs()
2543 if (!match(TrueVal, m_FNeg(m_Specific(X))) || !SI.hasNoSignedZeros()) in foldSelectWithFCmpToFabs()
2640 Value *TrueVal = SI.getTrueValue(); in visitSelectInst() local
2644 if (Value *V = simplifySelectInst(CondVal, TrueVal, FalseVal, in visitSelectInst()
2658 TrueVal->getType() == CondVal->getType()) { in visitSelectInst()
2662 if (match(TrueVal, m_One())) { in visitSelectInst()
2675 if (impliesPoison(TrueVal, CondVal)) { in visitSelectInst()
2677 return BinaryOperator::CreateAnd(CondVal, TrueVal); in visitSelectInst()
2681 if (auto *RHS = dyn_cast<FCmpInst>(TrueVal)) in visitSelectInst()
2693 if (match(TrueVal, m_Specific(Zero))) { in visitSelectInst()
2700 return SelectInst::Create(NotCond, One, TrueVal); in visitSelectInst()
2704 if (CondVal == TrueVal) in visitSelectInst()
2711 if (match(TrueVal, m_Not(m_Specific(CondVal)))) in visitSelectInst()
2712 return SelectInst::Create(TrueVal, FalseVal, Zero); in visitSelectInst()
2715 return SelectInst::Create(FalseVal, One, TrueVal); in visitSelectInst()
2722 (CondVal->hasOneUse() || TrueVal->hasOneUse()) && in visitSelectInst()
2735 match(TrueVal, m_One()) && match(FalseVal, m_Specific(B))) in visitSelectInst()
2739 match(TrueVal, m_Specific(B)) && match(FalseVal, m_Zero())) in visitSelectInst()
2744 if (match(CondVal, m_c_Or(m_Not(m_Specific(TrueVal)), m_Value(C))) && in visitSelectInst()
2747 return BinaryOperator::CreateAnd(TrueVal, Builder.CreateOr(C, FalseVal)); in visitSelectInst()
2752 TrueVal = Builder.CreateFreeze(TrueVal); in visitSelectInst()
2753 return BinaryOperator::CreateAnd(FalseVal, Builder.CreateOr(C, TrueVal)); in visitSelectInst()
2757 if (Value *S = simplifyWithOpReplaced(TrueVal, CondVal, One, SQ, in visitSelectInst()
2765 if (match(FalseVal, m_Zero()) || match(TrueVal, m_One())) { in visitSelectInst()
2768 Value *Op1 = IsAnd ? TrueVal : FalseVal; in visitSelectInst()
2793 Optional<bool> Res = isImpliedCondition(TrueVal, B, DL); in visitSelectInst()
2797 if (match(TrueVal, m_Select(m_Value(A), m_One(), m_Value(B))) && in visitSelectInst()
2806 if (match(TrueVal, m_One()) && in visitSelectInst()
2813 match(TrueVal, m_One())) { in visitSelectInst()
2823 match(TrueVal, m_One()) && in visitSelectInst()
2844 if (match(TrueVal, m_One()) && match(FalseVal, m_Zero())) in visitSelectInst()
2848 if (match(TrueVal, m_AllOnes()) && match(FalseVal, m_Zero())) in visitSelectInst()
2852 if (match(TrueVal, m_Zero()) && match(FalseVal, m_One())) { in visitSelectInst()
2858 if (match(TrueVal, m_Zero()) && match(FalseVal, m_AllOnes())) { in visitSelectInst()
2867 if ((Cmp0 == TrueVal && Cmp1 == FalseVal) || in visitSelectInst()
2868 (Cmp0 == FalseVal && Cmp1 == TrueVal)) { in visitSelectInst()
2881 Value *NewSel = Builder.CreateSelect(NewCond, FalseVal, TrueVal); in visitSelectInst()
2908 auto *TI = dyn_cast<Instruction>(TrueVal); in visitSelectInst()
2937 if (auto *TrueGep = dyn_cast<GetElementPtrInst>(TrueVal)) in visitSelectInst()
2941 if (auto *NewGep = SelectGepWithBase(FalseGep, TrueVal, true)) in visitSelectInst()
2946 if (Instruction *FoldI = foldSelectIntoOp(SI, TrueVal, FalseVal)) in visitSelectInst()
3016 if (canSelectOperandBeMappingIntoPredBlock(TrueVal, SI) && in visitSelectInst()
3021 if (SelectInst *TrueSI = dyn_cast<SelectInst>(TrueVal)) { in visitSelectInst()
3050 if (FalseSI->getTrueValue() == TrueVal && FalseSI->hasOneUse()) { in visitSelectInst()
3076 if (match(TrueVal, m_OneUse(m_BinOp(TrueBO))) && in visitSelectInst()
3135 return replaceInstUsesWith(SI, TrueVal); in visitSelectInst()
3168 (match(TrueVal, m_MaskedLoad(m_Value(), m_Value(), m_Specific(CondVal), in visitSelectInst()
3170 match(TrueVal, m_MaskedGather(m_Value(), m_Value(), m_Specific(CondVal), in visitSelectInst()
3172 auto *MaskedInst = cast<IntrinsicInst>(TrueVal); in visitSelectInst()
3179 if (match(TrueVal, m_Zero()) && in visitSelectInst()
3196 MaskedInst->setArgOperand(3, TrueVal /* Zero */); in visitSelectInst()