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()
109 return IC.replaceOperand(Sel, IsEq ? 1 : 2, Y); in foldSelectBinOpIdentity()
121 static Value *foldSelectICmpAnd(SelectInst &Sel, ICmpInst *Cmp, in foldSelectICmpAnd() argument
124 if (!match(Sel.getTrueValue(), m_APInt(SelTC)) || in foldSelectICmpAnd()
125 !match(Sel.getFalseValue(), m_APInt(SelFC))) in foldSelectICmpAnd()
129 Type *SelType = Sel.getType(); in foldSelectICmpAnd()
802 static Instruction *foldSetClearBits(SelectInst &Sel, in foldSetClearBits() argument
804 Value *Cond = Sel.getCondition(); in foldSetClearBits()
805 Value *T = Sel.getTrueValue(); in foldSetClearBits()
806 Value *F = Sel.getFalseValue(); in foldSetClearBits()
807 Type *Ty = Sel.getType(); in foldSetClearBits()
816 Value *NewSel = Builder.CreateSelect(Cond, Zero, OrC, "masksel", &Sel); in foldSetClearBits()
825 Value *NewSel = Builder.CreateSelect(Cond, OrC, Zero, "masksel", &Sel); in foldSetClearBits()
1264 Instruction *InstCombinerImpl::foldSelectValueEquivalence(SelectInst &Sel, in foldSelectValueEquivalence() argument
1270 Value *TrueVal = Sel.getTrueValue(), *FalseVal = Sel.getFalseValue(); in foldSelectValueEquivalence()
1284 isGuaranteedNotToBeUndefOrPoison(CmpRHS, SQ.AC, &Sel, &DT)) { in foldSelectValueEquivalence()
1291 return replaceOperand(Sel, Swapped ? 2 : 1, V); in foldSelectValueEquivalence()
1303 return &Sel; in foldSelectValueEquivalence()
1306 isGuaranteedNotToBeUndefOrPoison(CmpLHS, SQ.AC, &Sel, &DT)) in foldSelectValueEquivalence()
1310 return replaceOperand(Sel, Swapped ? 2 : 1, V); in foldSelectValueEquivalence()
1336 return replaceInstUsesWith(Sel, FalseVal); in foldSelectValueEquivalence()
1534 tryToReuseConstantFromSelectInComparison(SelectInst &Sel, ICmpInst &Cmp, in tryToReuseConstantFromSelectInComparison() argument
1555 if (C0->getType() != Sel.getType()) in tryToReuseConstantFromSelectInComparison()
1566 match(&Sel, m_Select(m_Value(), m_Value(SelVal0), m_Value(SelVal1))); in tryToReuseConstantFromSelectInComparison()
1594 IC.Builder.SetInsertPoint(&Sel); in tryToReuseConstantFromSelectInComparison()
1599 IC.replaceOperand(Sel, 0, NewCmp); in tryToReuseConstantFromSelectInComparison()
1600 Sel.swapValues(); in tryToReuseConstantFromSelectInComparison()
1601 Sel.swapProfMetadata(); in tryToReuseConstantFromSelectInComparison()
1603 return &Sel; in tryToReuseConstantFromSelectInComparison()
2069 Instruction *InstCombinerImpl::foldSelectExtConst(SelectInst &Sel) { in foldSelectExtConst() argument
2071 if (!match(Sel.getTrueValue(), m_Constant(C)) && in foldSelectExtConst()
2072 !match(Sel.getFalseValue(), m_Constant(C))) in foldSelectExtConst()
2076 if (!match(Sel.getTrueValue(), m_Instruction(ExtInst)) && in foldSelectExtConst()
2077 !match(Sel.getFalseValue(), m_Instruction(ExtInst))) in foldSelectExtConst()
2088 Value *Cond = Sel.getCondition(); in foldSelectExtConst()
2096 Type *SelType = Sel.getType(); in foldSelectExtConst()
2100 if (ExtInst == Sel.getFalseValue()) in foldSelectExtConst()
2105 Value *NewSel = Builder.CreateSelect(Cond, X, TruncCVal, "narrow", &Sel); in foldSelectExtConst()
2153 static Instruction *canonicalizeScalarSelectOfVecs(SelectInst &Sel, in canonicalizeScalarSelectOfVecs() argument
2155 auto *Ty = dyn_cast<VectorType>(Sel.getType()); in canonicalizeScalarSelectOfVecs()
2160 Value *Cond = Sel.getCondition(); in canonicalizeScalarSelectOfVecs()
2168 Sel, 0, IC.Builder.CreateVectorSplat(Ty->getElementCount(), Cond)); in canonicalizeScalarSelectOfVecs()
2174 static Instruction *foldSelectCmpBitcasts(SelectInst &Sel, in foldSelectCmpBitcasts() argument
2176 Value *Cond = Sel.getCondition(); in foldSelectCmpBitcasts()
2177 Value *TVal = Sel.getTrueValue(); in foldSelectCmpBitcasts()
2178 Value *FVal = Sel.getFalseValue(); in foldSelectCmpBitcasts()
2207 NewSel = Builder.CreateSelect(Cond, A, B, "", &Sel); in foldSelectCmpBitcasts()
2211 NewSel = Builder.CreateSelect(Cond, B, A, "", &Sel); in foldSelectCmpBitcasts()
2215 return CastInst::CreateBitOrPointerCast(NewSel, Sel.getType()); in foldSelectCmpBitcasts()
2294 static Instruction *foldSelectFunnelShift(SelectInst &Sel, in foldSelectFunnelShift() argument
2297 unsigned Width = Sel.getType()->getScalarSizeInBits(); in foldSelectFunnelShift()
2302 if (!match(Sel.getFalseValue(), m_OneUse(m_Or(m_BinOp(Or0), m_BinOp(Or1))))) in foldSelectFunnelShift()
2337 Value *TVal = Sel.getTrueValue(); in foldSelectFunnelShift()
2342 Value *Cond = Sel.getCondition(); in foldSelectFunnelShift()
2360 Function *F = Intrinsic::getDeclaration(Sel.getModule(), IID, Sel.getType()); in foldSelectFunnelShift()
2361 ShAmt = Builder.CreateZExt(ShAmt, Sel.getType()); in foldSelectFunnelShift()
2365 static Instruction *foldSelectToCopysign(SelectInst &Sel, in foldSelectToCopysign() argument
2367 Value *Cond = Sel.getCondition(); in foldSelectToCopysign()
2368 Value *TVal = Sel.getTrueValue(); in foldSelectToCopysign()
2369 Value *FVal = Sel.getFalseValue(); in foldSelectToCopysign()
2370 Type *SelType = Sel.getType(); in foldSelectToCopysign()
2406 Function *F = Intrinsic::getDeclaration(Sel.getModule(), Intrinsic::copysign, in foldSelectToCopysign()
2407 Sel.getType()); in foldSelectToCopysign()
2411 Instruction *InstCombinerImpl::foldVectorSelect(SelectInst &Sel) { in foldVectorSelect() argument
2412 if (!isa<VectorType>(Sel.getType())) in foldVectorSelect()
2415 Value *Cond = Sel.getCondition(); in foldVectorSelect()
2416 Value *TVal = Sel.getTrueValue(); in foldVectorSelect()
2417 Value *FVal = Sel.getFalseValue(); in foldVectorSelect()
2422 Value *V = Builder.CreateSelect(C, X, Y, Sel.getName(), &Sel); in foldVectorSelect()
2424 I->copyIRFlags(&Sel); in foldVectorSelect()
2425 Module *M = Sel.getModule(); in foldVectorSelect()
2447 auto *VecTy = dyn_cast<FixedVectorType>(Sel.getType()); in foldVectorSelect()
2454 if (Value *V = SimplifyDemandedVectorElts(&Sel, AllOnesEltMask, PoisonElts)) { in foldVectorSelect()
2455 if (V != &Sel) in foldVectorSelect()
2456 return replaceInstUsesWith(Sel, V); in foldVectorSelect()
2457 return &Sel; in foldVectorSelect()
2469 Value *NewSel = Builder.CreateSelect(Cond, Y, X, "sel", &Sel); in foldVectorSelect()
2474 Value *NewSel = Builder.CreateSelect(Cond, X, Y, "sel", &Sel); in foldVectorSelect()
2483 Value *NewSel = Builder.CreateSelect(Cond, X, Y, "sel", &Sel); in foldVectorSelect()
2488 Value *NewSel = Builder.CreateSelect(Cond, Y, X, "sel", &Sel); in foldVectorSelect()
2496 static Instruction *foldSelectToPhiImpl(SelectInst &Sel, BasicBlock *BB, in foldSelectToPhiImpl() argument
2506 Value *Cond = Sel.getCondition(); in foldSelectToPhiImpl()
2512 IfTrue = Sel.getTrueValue(); in foldSelectToPhiImpl()
2513 IfFalse = Sel.getFalseValue(); in foldSelectToPhiImpl()
2517 IfTrue = Sel.getFalseValue(); in foldSelectToPhiImpl()
2518 IfFalse = Sel.getTrueValue(); in foldSelectToPhiImpl()
2550 auto *PN = Builder.CreatePHI(Sel.getType(), Inputs.size()); in foldSelectToPhiImpl()
2553 PN->takeName(&Sel); in foldSelectToPhiImpl()
2557 static Instruction *foldSelectToPhi(SelectInst &Sel, const DominatorTree &DT, in foldSelectToPhi() argument
2561 CandidateBlocks.insert(Sel.getParent()); in foldSelectToPhi()
2562 for (Value *V : Sel.operands()) in foldSelectToPhi()
2567 if (auto *PN = foldSelectToPhiImpl(Sel, BB, DT, Builder)) in foldSelectToPhi()
2627 static Value *foldSelectWithFrozenICmp(SelectInst &Sel, InstCombiner::BuilderTy &Builder) { in foldSelectWithFrozenICmp() argument
2628 FreezeInst *FI = dyn_cast<FreezeInst>(Sel.getCondition()); in foldSelectWithFrozenICmp()
2633 Value *TrueVal = Sel.getTrueValue(), *FalseVal = Sel.getFalseValue(); in foldSelectWithFrozenICmp()