Lines Matching refs:TrueVal
402 Instruction *InstCombinerImpl::foldSelectIntoOp(SelectInst &SI, Value *TrueVal, in foldSelectIntoOp() argument
406 if (auto *TVI = dyn_cast<BinaryOperator>(TrueVal)) { in foldSelectIntoOp()
439 if (FVI->hasOneUse() && !isa<Constant>(TrueVal)) { in foldSelectIntoOp()
442 if ((SFO & 1) && TrueVal == FVI->getOperand(0)) { in foldSelectIntoOp()
444 } else if ((SFO & 2) && TrueVal == FVI->getOperand(1)) { in foldSelectIntoOp()
461 TrueVal, NewSel); in foldSelectIntoOp()
519 static Value *foldSelectICmpLshrAshr(const ICmpInst *IC, Value *TrueVal, in foldSelectICmpLshrAshr() argument
540 std::swap(TrueVal, FalseVal); in foldSelectICmpLshrAshr()
542 if (match(TrueVal, m_LShr(m_Value(X), m_Value(Y))) && in foldSelectICmpLshrAshr()
547 bool IsExact = Ashr->isExact() && cast<Instruction>(TrueVal)->isExact(); in foldSelectICmpLshrAshr()
567 static Value *foldSelectICmpAndOr(const ICmpInst *IC, Value *TrueVal, in foldSelectICmpAndOr() argument
572 if (!TrueVal->getType()->isIntOrIntVectorTy() || in foldSelectICmpAndOr()
573 TrueVal->getType()->isVectorTy() != IC->getType()->isVectorTy()) in foldSelectICmpAndOr()
614 bool OrOnFalseVal = match(FalseVal, m_Or(m_Specific(TrueVal), m_Power2(C2))); in foldSelectICmpAndOr()
616 OrOnTrueVal = match(TrueVal, m_Or(m_Specific(FalseVal), m_Power2(C2))); in foldSelectICmpAndOr()
621 Value *Y = OrOnFalseVal ? TrueVal : FalseVal; in foldSelectICmpAndOr()
631 Value *Or = OrOnFalseVal ? FalseVal : TrueVal; in foldSelectICmpAndOr()
693 const Value *TrueVal, in canonicalizeSaturatedSubtract() argument
701 if (match(TrueVal, m_Zero())) { in canonicalizeSaturatedSubtract()
703 std::swap(TrueVal, FalseVal); in canonicalizeSaturatedSubtract()
725 if (match(TrueVal, m_Sub(m_Specific(B), m_Specific(A))) || in canonicalizeSaturatedSubtract()
727 match(TrueVal, m_Add(m_Specific(B), m_SpecificInt(-*C))))) in canonicalizeSaturatedSubtract()
729 else if (!match(TrueVal, m_Sub(m_Specific(A), m_Specific(B))) && in canonicalizeSaturatedSubtract()
731 match(TrueVal, m_Add(m_Specific(A), m_SpecificInt(-*C))))) in canonicalizeSaturatedSubtract()
736 if (IsNegative && !TrueVal->hasOneUse() && !ICI->hasOneUse()) in canonicalizeSaturatedSubtract()
825 static Instruction *foldSelectCtlzToCttz(ICmpInst *ICI, Value *TrueVal, in foldSelectCtlzToCttz() argument
828 unsigned BitWidth = TrueVal->getType()->getScalarSizeInBits(); in foldSelectCtlzToCttz()
833 std::swap(TrueVal, FalseVal); in foldSelectCtlzToCttz()
836 m_Xor(m_Deferred(TrueVal), m_SpecificInt(BitWidth - 1)))) in foldSelectCtlzToCttz()
839 if (!match(TrueVal, m_Intrinsic<Intrinsic::ctlz>())) in foldSelectCtlzToCttz()
843 auto *II = cast<IntrinsicInst>(TrueVal); in foldSelectCtlzToCttz()
864 static Value *foldSelectCttzCtlz(ICmpInst *ICI, Value *TrueVal, Value *FalseVal, in foldSelectCttzCtlz() argument
875 Value *ValueOnZero = TrueVal; in foldSelectCttzCtlz()
920 Value *TrueVal = Sel.getTrueValue(); in adjustMinMax() local
945 if ((CmpLHS == TrueVal && AdjustedRHS == FalseVal) || in adjustMinMax()
946 (CmpLHS == FalseVal && AdjustedRHS == TrueVal)) { in adjustMinMax()
959 if (match(TrueVal, m_SExt(m_Specific(CmpLHS))) && SextRHS == FalseVal) { in adjustMinMax()
960 CmpLHS = TrueVal; in adjustMinMax()
963 SextRHS == TrueVal) { in adjustMinMax()
972 if (match(TrueVal, m_ZExt(m_Specific(CmpLHS))) && ZextRHS == FalseVal) { in adjustMinMax()
973 CmpLHS = TrueVal; in adjustMinMax()
976 ZextRHS == TrueVal) { in adjustMinMax()
991 std::swap(FalseVal, TrueVal); in adjustMinMax()
995 Sel.setOperand(1, TrueVal); in adjustMinMax()
1158 Value *TrueVal = Sel.getTrueValue(), *FalseVal = Sel.getFalseValue(); in foldSelectValueEquivalence() local
1161 std::swap(TrueVal, FalseVal); in foldSelectValueEquivalence()
1171 if (TrueVal != CmpLHS && in foldSelectValueEquivalence()
1173 if (Value *V = SimplifyWithOpReplaced(TrueVal, CmpLHS, CmpRHS, SQ, in foldSelectValueEquivalence()
1176 if (TrueVal != CmpRHS && in foldSelectValueEquivalence()
1178 if (Value *V = SimplifyWithOpReplaced(TrueVal, CmpRHS, CmpLHS, SQ, in foldSelectValueEquivalence()
1210 /* AllowRefinement */ false) == TrueVal || in foldSelectValueEquivalence()
1212 /* AllowRefinement */ false) == TrueVal) { in foldSelectValueEquivalence()
1473 Value *TrueVal = SI.getTrueValue(); in foldSelectInstWithICmp() local
1479 if (CmpLHS == TrueVal && Pred == ICmpInst::ICMP_EQ) { in foldSelectInstWithICmp()
1494 DL.getTypeSizeInBits(TrueVal->getType()->getScalarType()); in foldSelectInstWithICmp()
1519 if (TrueWhenUnset && TrueVal == X && in foldSelectInstWithICmp()
1524 match(TrueVal, m_Xor(m_Specific(X), m_APInt(C))) && *Y == *C) in foldSelectInstWithICmp()
1528 match(TrueVal, m_Xor(m_Specific(X), m_APInt(C))) && *Y == *C) in foldSelectInstWithICmp()
1531 else if (!TrueWhenUnset && TrueVal == X && in foldSelectInstWithICmp()
1541 foldSelectICmpAndAnd(SI.getType(), ICI, TrueVal, FalseVal, Builder)) in foldSelectInstWithICmp()
1544 if (Instruction *V = foldSelectCtlzToCttz(ICI, TrueVal, FalseVal, Builder)) in foldSelectInstWithICmp()
1547 if (Value *V = foldSelectICmpAndOr(ICI, TrueVal, FalseVal, Builder)) in foldSelectInstWithICmp()
1550 if (Value *V = foldSelectICmpLshrAshr(ICI, TrueVal, FalseVal, Builder)) in foldSelectInstWithICmp()
1553 if (Value *V = foldSelectCttzCtlz(ICI, TrueVal, FalseVal, Builder)) in foldSelectInstWithICmp()
1556 if (Value *V = canonicalizeSaturatedSubtract(ICI, TrueVal, FalseVal, Builder)) in foldSelectInstWithICmp()
1559 if (Value *V = canonicalizeSaturatedAdd(ICI, TrueVal, FalseVal, Builder)) in foldSelectInstWithICmp()
1734 Value *TrueVal = SI.getTrueValue(); in foldAddSubSelect() local
1736 auto *TI = dyn_cast<Instruction>(TrueVal); in foldAddSubSelect()
1809 Value *TrueVal = SI.getTrueValue(); in foldOverflowingAddSubSelect() local
1824 Value *TrueVal, *FalseVal, *Op; in foldOverflowingAddSubSelect() local
1827 m_Value(TrueVal), m_Value(FalseVal)))) in foldOverflowingAddSubSelect()
1849 IsMinMax(TrueVal, FalseVal)) in foldOverflowingAddSubSelect()
1856 IsMinMax(FalseVal, TrueVal)) in foldOverflowingAddSubSelect()
1862 IsMinMax(TrueVal, FalseVal)) in foldOverflowingAddSubSelect()
1867 IsMinMax(FalseVal, TrueVal)) in foldOverflowingAddSubSelect()
1872 IsMinMax(FalseVal, TrueVal)) in foldOverflowingAddSubSelect()
1877 IsMinMax(TrueVal, FalseVal)) in foldOverflowingAddSubSelect()
1886 match(TrueVal, m_AllOnes())) in foldOverflowingAddSubSelect()
1890 match(TrueVal, m_Zero())) in foldOverflowingAddSubSelect()
1894 IsSignedSaturateLimit(TrueVal, /*IsAdd=*/true)) in foldOverflowingAddSubSelect()
1905 IsSignedSaturateLimit(TrueVal, /*IsAdd=*/false)) in foldOverflowingAddSubSelect()
2575 Value *TrueVal = Sel.getTrueValue(), *FalseVal = Sel.getFalseValue(); in foldSelectWithFrozenICmp() local
2587 match(Cond, m_c_ICmp(Pred, m_Specific(TrueVal), m_Specific(FalseVal))) && in foldSelectWithFrozenICmp()
2589 return Pred == ICmpInst::ICMP_EQ ? FalseVal : TrueVal; in foldSelectWithFrozenICmp()
2597 Value *TrueVal = SI.getTrueValue(); in visitSelectInst() local
2606 if (isa<UndefValue>(TrueVal) || isa<UndefValue>(FalseVal)) { in visitSelectInst()
2617 if (Value *V = SimplifySelectInst(CondVal, TrueVal, FalseVal, in visitSelectInst()
2630 TrueVal->getType() == CondVal->getType()) { in visitSelectInst()
2631 if (match(TrueVal, m_One())) { in visitSelectInst()
2635 if (match(TrueVal, m_Zero())) { in visitSelectInst()
2642 return BinaryOperator::CreateAnd(CondVal, TrueVal); in visitSelectInst()
2647 return BinaryOperator::CreateOr(NotCond, TrueVal); in visitSelectInst()
2652 if (CondVal == TrueVal) in visitSelectInst()
2655 return BinaryOperator::CreateAnd(CondVal, TrueVal); in visitSelectInst()
2659 if (match(TrueVal, m_Not(m_Specific(CondVal)))) in visitSelectInst()
2660 return BinaryOperator::CreateAnd(TrueVal, FalseVal); in visitSelectInst()
2662 return BinaryOperator::CreateOr(TrueVal, FalseVal); in visitSelectInst()
2674 if (match(TrueVal, m_One()) && match(FalseVal, m_Zero())) in visitSelectInst()
2678 if (match(TrueVal, m_AllOnes()) && match(FalseVal, m_Zero())) in visitSelectInst()
2682 if (match(TrueVal, m_Zero()) && match(FalseVal, m_One())) { in visitSelectInst()
2688 if (match(TrueVal, m_Zero()) && match(FalseVal, m_AllOnes())) { in visitSelectInst()
2697 if ((Cmp0 == TrueVal && Cmp1 == FalseVal) || in visitSelectInst()
2698 (Cmp0 == FalseVal && Cmp1 == TrueVal)) { in visitSelectInst()
2711 Value *NewSel = Builder.CreateSelect(NewCond, FalseVal, TrueVal); in visitSelectInst()
2728 match(TrueVal, m_FSub(m_PosZeroFP(), m_Specific(FalseVal))) && in visitSelectInst()
2729 match(TrueVal, m_Instruction(FSub)) && FSub->hasNoNaNs() && in visitSelectInst()
2735 if (match(CondVal, m_FCmp(Pred, m_Specific(TrueVal), m_AnyZeroFP())) && in visitSelectInst()
2736 match(FalseVal, m_FSub(m_PosZeroFP(), m_Specific(TrueVal))) && in visitSelectInst()
2739 Value *Fabs = Builder.CreateUnaryIntrinsic(Intrinsic::fabs, TrueVal, FSub); in visitSelectInst()
2747 match(TrueVal, m_FNeg(m_Specific(FalseVal))) && in visitSelectInst()
2748 match(TrueVal, m_Instruction(FNeg)) && in visitSelectInst()
2758 if (match(CondVal, m_FCmp(Pred, m_Specific(TrueVal), m_AnyZeroFP())) && in visitSelectInst()
2759 match(FalseVal, m_FNeg(m_Specific(TrueVal))) && in visitSelectInst()
2764 Value *Fabs = Builder.CreateUnaryIntrinsic(Intrinsic::fabs, TrueVal, FNeg); in visitSelectInst()
2781 auto *TI = dyn_cast<Instruction>(TrueVal); in visitSelectInst()
2792 if (Instruction *FoldI = foldSelectIntoOp(SI, TrueVal, FalseVal)) in visitSelectInst()
2904 if (canSelectOperandBeMappingIntoPredBlock(TrueVal, SI) && in visitSelectInst()
2909 if (SelectInst *TrueSI = dyn_cast<SelectInst>(TrueVal)) { in visitSelectInst()
2938 if (FalseSI->getTrueValue() == TrueVal && FalseSI->hasOneUse()) { in visitSelectInst()
2964 if (match(TrueVal, m_OneUse(m_BinOp(TrueBO))) && in visitSelectInst()
3022 return replaceInstUsesWith(SI, TrueVal); in visitSelectInst()