Lines Matching refs:Sel

55 static Instruction *foldSelectBinOpIdentity(SelectInst &Sel,  in foldSelectBinOpIdentity()  argument
62 if (!match(Sel.getCondition(), m_Cmp(Pred, m_Value(X), m_Constant(C)))) in foldSelectBinOpIdentity()
77 if (!match(Sel.getOperand(IsEq ? 1 : 2), m_BinOp(BO))) in foldSelectBinOpIdentity()
108 return IC.replaceOperand(Sel, IsEq ? 1 : 2, Y); in foldSelectBinOpIdentity()
120 static Value *foldSelectICmpAnd(SelectInst &Sel, ICmpInst *Cmp, in foldSelectICmpAnd() argument
123 if (!match(Sel.getTrueValue(), m_APInt(SelTC)) || in foldSelectICmpAnd()
124 !match(Sel.getFalseValue(), m_APInt(SelFC))) in foldSelectICmpAnd()
128 Type *SelType = Sel.getType(); in foldSelectICmpAnd()
692 static Instruction *foldSetClearBits(SelectInst &Sel, in foldSetClearBits() argument
694 Value *Cond = Sel.getCondition(); in foldSetClearBits()
695 Value *T = Sel.getTrueValue(); in foldSetClearBits()
696 Value *F = Sel.getFalseValue(); in foldSetClearBits()
697 Type *Ty = Sel.getType(); in foldSetClearBits()
706 Value *NewSel = Builder.CreateSelect(Cond, Zero, OrC, "masksel", &Sel); in foldSetClearBits()
715 Value *NewSel = Builder.CreateSelect(Cond, OrC, Zero, "masksel", &Sel); in foldSetClearBits()
1001 static bool adjustMinMax(SelectInst &Sel, ICmpInst &Cmp) { in adjustMinMax() argument
1005 Value *TrueVal = Sel.getTrueValue(); in adjustMinMax()
1006 Value *FalseVal = Sel.getFalseValue(); in adjustMinMax()
1015 Type *SelTy = Sel.getType(); in adjustMinMax()
1080 Sel.setOperand(1, TrueVal); in adjustMinMax()
1081 Sel.setOperand(2, FalseVal); in adjustMinMax()
1082 Sel.swapProfMetadata(); in adjustMinMax()
1086 Cmp.moveBefore(&Sel); in adjustMinMax()
1091 static Instruction *canonicalizeSPF(SelectInst &Sel, ICmpInst &Cmp, in canonicalizeSPF() argument
1095 if (!Sel.getType()->isIntOrIntVectorTy()) in canonicalizeSPF()
1098 SelectPatternFlavor SPF = matchSelectPattern(&Sel, LHS, RHS).Flavor; in canonicalizeSPF()
1108 ConstantInt::get(Type::getInt1Ty(Sel.getContext()), IntMinIsPoison); in canonicalizeSPF()
1114 return IC.replaceInstUsesWith(Sel, Abs); in canonicalizeSPF()
1136 Sel, IC.Builder.CreateBinaryIntrinsic(IntrinsicID, LHS, RHS)); in canonicalizeSPF()
1158 Instruction *InstCombinerImpl::foldSelectValueEquivalence(SelectInst &Sel, in foldSelectValueEquivalence() argument
1167 Value *TrueVal = Sel.getTrueValue(), *FalseVal = Sel.getFalseValue(); in foldSelectValueEquivalence()
1181 isGuaranteedNotToBeUndefOrPoison(CmpRHS, SQ.AC, &Sel, &DT)) { in foldSelectValueEquivalence()
1184 return replaceOperand(Sel, Swapped ? 2 : 1, V); in foldSelectValueEquivalence()
1199 return &Sel; in foldSelectValueEquivalence()
1203 isGuaranteedNotToBeUndefOrPoison(CmpLHS, SQ.AC, &Sel, &DT)) in foldSelectValueEquivalence()
1206 return replaceOperand(Sel, Swapped ? 2 : 1, V); in foldSelectValueEquivalence()
1239 return replaceInstUsesWith(Sel, FalseVal); in foldSelectValueEquivalence()
1442 tryToReuseConstantFromSelectInComparison(SelectInst &Sel, ICmpInst &Cmp, in tryToReuseConstantFromSelectInComparison() argument
1463 if (C0->getType() != Sel.getType()) in tryToReuseConstantFromSelectInComparison()
1474 match(&Sel, m_Select(m_Value(), m_Value(SelVal0), m_Value(SelVal1))); in tryToReuseConstantFromSelectInComparison()
1502 IC.Builder.SetInsertPoint(&Sel); in tryToReuseConstantFromSelectInComparison()
1507 IC.replaceOperand(Sel, 0, NewCmp); in tryToReuseConstantFromSelectInComparison()
1508 Sel.swapValues(); in tryToReuseConstantFromSelectInComparison()
1509 Sel.swapProfMetadata(); in tryToReuseConstantFromSelectInComparison()
1511 return &Sel; in tryToReuseConstantFromSelectInComparison()
1952 Instruction *InstCombinerImpl::foldSelectExtConst(SelectInst &Sel) { in foldSelectExtConst() argument
1954 if (!match(Sel.getTrueValue(), m_Constant(C)) && in foldSelectExtConst()
1955 !match(Sel.getFalseValue(), m_Constant(C))) in foldSelectExtConst()
1959 if (!match(Sel.getTrueValue(), m_Instruction(ExtInst)) && in foldSelectExtConst()
1960 !match(Sel.getFalseValue(), m_Instruction(ExtInst))) in foldSelectExtConst()
1971 Value *Cond = Sel.getCondition(); in foldSelectExtConst()
1979 Type *SelType = Sel.getType(); in foldSelectExtConst()
1984 if (ExtInst == Sel.getFalseValue()) in foldSelectExtConst()
1989 Value *NewSel = Builder.CreateSelect(Cond, X, TruncCVal, "narrow", &Sel); in foldSelectExtConst()
1996 if (ExtInst == Sel.getTrueValue()) { in foldSelectExtConst()
2001 return SelectInst::Create(Cond, AllOnesOrOne, C, "", nullptr, &Sel); in foldSelectExtConst()
2006 return SelectInst::Create(Cond, C, Zero, "", nullptr, &Sel); in foldSelectExtConst()
2054 static Instruction *canonicalizeScalarSelectOfVecs(SelectInst &Sel, in canonicalizeScalarSelectOfVecs() argument
2056 auto *Ty = dyn_cast<VectorType>(Sel.getType()); in canonicalizeScalarSelectOfVecs()
2061 Value *Cond = Sel.getCondition(); in canonicalizeScalarSelectOfVecs()
2069 Sel, 0, IC.Builder.CreateVectorSplat(Ty->getElementCount(), Cond)); in canonicalizeScalarSelectOfVecs()
2075 static Instruction *foldSelectCmpBitcasts(SelectInst &Sel, in foldSelectCmpBitcasts() argument
2077 Value *Cond = Sel.getCondition(); in foldSelectCmpBitcasts()
2078 Value *TVal = Sel.getTrueValue(); in foldSelectCmpBitcasts()
2079 Value *FVal = Sel.getFalseValue(); in foldSelectCmpBitcasts()
2108 NewSel = Builder.CreateSelect(Cond, A, B, "", &Sel); in foldSelectCmpBitcasts()
2112 NewSel = Builder.CreateSelect(Cond, B, A, "", &Sel); in foldSelectCmpBitcasts()
2116 return CastInst::CreateBitOrPointerCast(NewSel, Sel.getType()); in foldSelectCmpBitcasts()
2195 static Instruction *foldSelectFunnelShift(SelectInst &Sel, in foldSelectFunnelShift() argument
2198 unsigned Width = Sel.getType()->getScalarSizeInBits(); in foldSelectFunnelShift()
2203 if (!match(Sel.getFalseValue(), m_OneUse(m_Or(m_BinOp(Or0), m_BinOp(Or1))))) in foldSelectFunnelShift()
2238 Value *TVal = Sel.getTrueValue(); in foldSelectFunnelShift()
2243 Value *Cond = Sel.getCondition(); in foldSelectFunnelShift()
2261 Function *F = Intrinsic::getDeclaration(Sel.getModule(), IID, Sel.getType()); in foldSelectFunnelShift()
2262 ShAmt = Builder.CreateZExt(ShAmt, Sel.getType()); in foldSelectFunnelShift()
2266 static Instruction *foldSelectToCopysign(SelectInst &Sel, in foldSelectToCopysign() argument
2268 Value *Cond = Sel.getCondition(); in foldSelectToCopysign()
2269 Value *TVal = Sel.getTrueValue(); in foldSelectToCopysign()
2270 Value *FVal = Sel.getFalseValue(); in foldSelectToCopysign()
2271 Type *SelType = Sel.getType(); in foldSelectToCopysign()
2304 Function *F = Intrinsic::getDeclaration(Sel.getModule(), Intrinsic::copysign, in foldSelectToCopysign()
2305 Sel.getType()); in foldSelectToCopysign()
2309 Instruction *InstCombinerImpl::foldVectorSelect(SelectInst &Sel) { in foldVectorSelect() argument
2310 auto *VecTy = dyn_cast<FixedVectorType>(Sel.getType()); in foldVectorSelect()
2317 if (Value *V = SimplifyDemandedVectorElts(&Sel, AllOnesEltMask, UndefElts)) { in foldVectorSelect()
2318 if (V != &Sel) in foldVectorSelect()
2319 return replaceInstUsesWith(Sel, V); in foldVectorSelect()
2320 return &Sel; in foldVectorSelect()
2326 Value *Cond = Sel.getCondition(); in foldVectorSelect()
2327 Value *TVal = Sel.getTrueValue(); in foldVectorSelect()
2328 Value *FVal = Sel.getFalseValue(); in foldVectorSelect()
2336 Value *NewSel = Builder.CreateSelect(Cond, Y, X, "sel", &Sel); in foldVectorSelect()
2341 Value *NewSel = Builder.CreateSelect(Cond, X, Y, "sel", &Sel); in foldVectorSelect()
2350 Value *NewSel = Builder.CreateSelect(Cond, X, Y, "sel", &Sel); in foldVectorSelect()
2355 Value *NewSel = Builder.CreateSelect(Cond, Y, X, "sel", &Sel); in foldVectorSelect()
2363 static Instruction *foldSelectToPhiImpl(SelectInst &Sel, BasicBlock *BB, in foldSelectToPhiImpl() argument
2373 Value *Cond = Sel.getCondition(); in foldSelectToPhiImpl()
2379 IfTrue = Sel.getTrueValue(); in foldSelectToPhiImpl()
2380 IfFalse = Sel.getFalseValue(); in foldSelectToPhiImpl()
2384 IfTrue = Sel.getFalseValue(); in foldSelectToPhiImpl()
2385 IfFalse = Sel.getTrueValue(); in foldSelectToPhiImpl()
2417 auto *PN = Builder.CreatePHI(Sel.getType(), Inputs.size()); in foldSelectToPhiImpl()
2420 PN->takeName(&Sel); in foldSelectToPhiImpl()
2424 static Instruction *foldSelectToPhi(SelectInst &Sel, const DominatorTree &DT, in foldSelectToPhi() argument
2428 CandidateBlocks.insert(Sel.getParent()); in foldSelectToPhi()
2429 for (Value *V : Sel.operands()) in foldSelectToPhi()
2434 if (auto *PN = foldSelectToPhiImpl(Sel, BB, DT, Builder)) in foldSelectToPhi()
2439 static Value *foldSelectWithFrozenICmp(SelectInst &Sel, InstCombiner::BuilderTy &Builder) { in foldSelectWithFrozenICmp() argument
2440 FreezeInst *FI = dyn_cast<FreezeInst>(Sel.getCondition()); in foldSelectWithFrozenICmp()
2445 Value *TrueVal = Sel.getTrueValue(), *FalseVal = Sel.getFalseValue(); in foldSelectWithFrozenICmp()