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()
103 IC.getSimplifyQuery().getWithInstruction(&Sel))) in foldSelectBinOpIdentity()
110 return IC.replaceOperand(Sel, IsEq ? 1 : 2, Y); in foldSelectBinOpIdentity()
122 static Value *foldSelectICmpAnd(SelectInst &Sel, ICmpInst *Cmp, in foldSelectICmpAnd() argument
125 if (!match(Sel.getTrueValue(), m_APInt(SelTC)) || in foldSelectICmpAnd()
126 !match(Sel.getFalseValue(), m_APInt(SelFC))) in foldSelectICmpAnd()
130 Type *SelType = Sel.getType(); in foldSelectICmpAnd()
818 static Instruction *foldSetClearBits(SelectInst &Sel, in foldSetClearBits() argument
820 Value *Cond = Sel.getCondition(); in foldSetClearBits()
821 Value *T = Sel.getTrueValue(); in foldSetClearBits()
822 Value *F = Sel.getFalseValue(); in foldSetClearBits()
823 Type *Ty = Sel.getType(); in foldSetClearBits()
832 Value *NewSel = Builder.CreateSelect(Cond, Zero, OrC, "masksel", &Sel); in foldSetClearBits()
841 Value *NewSel = Builder.CreateSelect(Cond, OrC, Zero, "masksel", &Sel); in foldSetClearBits()
1286 Instruction *InstCombinerImpl::foldSelectValueEquivalence(SelectInst &Sel, in foldSelectValueEquivalence() argument
1292 Value *TrueVal = Sel.getTrueValue(), *FalseVal = Sel.getFalseValue(); in foldSelectValueEquivalence()
1317 isGuaranteedNotToBeUndef(V, SQ.AC, &Sel, &DT)) in foldSelectValueEquivalence()
1318 return replaceOperand(Sel, Swapped ? 2 : 1, V); in foldSelectValueEquivalence()
1323 if (isGuaranteedNotToBeUndef(NewOp, SQ.AC, &Sel, &DT)) in foldSelectValueEquivalence()
1324 return replaceOperand(Sel, Swapped ? 2 : 1, V); in foldSelectValueEquivalence()
1338 isGuaranteedNotToBeUndef(NewOp, SQ.AC, &Sel, &DT)) in foldSelectValueEquivalence()
1340 return &Sel; in foldSelectValueEquivalence()
1373 return replaceInstUsesWith(Sel, FalseVal); in foldSelectValueEquivalence()
1572 tryToReuseConstantFromSelectInComparison(SelectInst &Sel, ICmpInst &Cmp, in tryToReuseConstantFromSelectInComparison() argument
1593 if (C0->getType() != Sel.getType()) in tryToReuseConstantFromSelectInComparison()
1604 match(&Sel, m_Select(m_Value(), m_Value(SelVal0), m_Value(SelVal1))); in tryToReuseConstantFromSelectInComparison()
1632 IC.Builder.SetInsertPoint(&Sel); in tryToReuseConstantFromSelectInComparison()
1637 IC.replaceOperand(Sel, 0, NewCmp); in tryToReuseConstantFromSelectInComparison()
1638 Sel.swapValues(); in tryToReuseConstantFromSelectInComparison()
1639 Sel.swapProfMetadata(); in tryToReuseConstantFromSelectInComparison()
1641 return &Sel; in tryToReuseConstantFromSelectInComparison()
2213 Instruction *InstCombinerImpl::foldSelectExtConst(SelectInst &Sel) { in foldSelectExtConst() argument
2215 if (!match(Sel.getTrueValue(), m_Constant(C)) && in foldSelectExtConst()
2216 !match(Sel.getFalseValue(), m_Constant(C))) in foldSelectExtConst()
2220 if (!match(Sel.getTrueValue(), m_Instruction(ExtInst)) && in foldSelectExtConst()
2221 !match(Sel.getFalseValue(), m_Instruction(ExtInst))) in foldSelectExtConst()
2232 Value *Cond = Sel.getCondition(); in foldSelectExtConst()
2240 Type *SelType = Sel.getType(); in foldSelectExtConst()
2244 if (ExtInst == Sel.getFalseValue()) in foldSelectExtConst()
2249 Value *NewSel = Builder.CreateSelect(Cond, X, TruncCVal, "narrow", &Sel); in foldSelectExtConst()
2297 static Instruction *canonicalizeScalarSelectOfVecs(SelectInst &Sel, in canonicalizeScalarSelectOfVecs() argument
2299 auto *Ty = dyn_cast<VectorType>(Sel.getType()); in canonicalizeScalarSelectOfVecs()
2304 Value *Cond = Sel.getCondition(); in canonicalizeScalarSelectOfVecs()
2312 Sel, 0, IC.Builder.CreateVectorSplat(Ty->getElementCount(), Cond)); in canonicalizeScalarSelectOfVecs()
2318 static Instruction *foldSelectCmpBitcasts(SelectInst &Sel, in foldSelectCmpBitcasts() argument
2320 Value *Cond = Sel.getCondition(); in foldSelectCmpBitcasts()
2321 Value *TVal = Sel.getTrueValue(); in foldSelectCmpBitcasts()
2322 Value *FVal = Sel.getFalseValue(); in foldSelectCmpBitcasts()
2351 NewSel = Builder.CreateSelect(Cond, A, B, "", &Sel); in foldSelectCmpBitcasts()
2355 NewSel = Builder.CreateSelect(Cond, B, A, "", &Sel); in foldSelectCmpBitcasts()
2359 return CastInst::CreateBitOrPointerCast(NewSel, Sel.getType()); in foldSelectCmpBitcasts()
2438 static Instruction *foldSelectFunnelShift(SelectInst &Sel, in foldSelectFunnelShift() argument
2441 unsigned Width = Sel.getType()->getScalarSizeInBits(); in foldSelectFunnelShift()
2446 if (!match(Sel.getFalseValue(), m_OneUse(m_Or(m_BinOp(Or0), m_BinOp(Or1))))) in foldSelectFunnelShift()
2481 Value *TVal = Sel.getTrueValue(); in foldSelectFunnelShift()
2486 Value *Cond = Sel.getCondition(); in foldSelectFunnelShift()
2504 Function *F = Intrinsic::getDeclaration(Sel.getModule(), IID, Sel.getType()); in foldSelectFunnelShift()
2505 ShAmt = Builder.CreateZExt(ShAmt, Sel.getType()); in foldSelectFunnelShift()
2509 static Instruction *foldSelectToCopysign(SelectInst &Sel, in foldSelectToCopysign() argument
2511 Value *Cond = Sel.getCondition(); in foldSelectToCopysign()
2512 Value *TVal = Sel.getTrueValue(); in foldSelectToCopysign()
2513 Value *FVal = Sel.getFalseValue(); in foldSelectToCopysign()
2514 Type *SelType = Sel.getType(); in foldSelectToCopysign()
2547 Function *F = Intrinsic::getDeclaration(Sel.getModule(), Intrinsic::copysign, in foldSelectToCopysign()
2548 Sel.getType()); in foldSelectToCopysign()
2552 Instruction *InstCombinerImpl::foldVectorSelect(SelectInst &Sel) { in foldVectorSelect() argument
2553 if (!isa<VectorType>(Sel.getType())) in foldVectorSelect()
2556 Value *Cond = Sel.getCondition(); in foldVectorSelect()
2557 Value *TVal = Sel.getTrueValue(); in foldVectorSelect()
2558 Value *FVal = Sel.getFalseValue(); in foldVectorSelect()
2563 Value *V = Builder.CreateSelect(C, X, Y, Sel.getName(), &Sel); in foldVectorSelect()
2565 I->copyIRFlags(&Sel); in foldVectorSelect()
2566 Module *M = Sel.getModule(); in foldVectorSelect()
2588 auto *VecTy = dyn_cast<FixedVectorType>(Sel.getType()); in foldVectorSelect()
2595 if (Value *V = SimplifyDemandedVectorElts(&Sel, AllOnesEltMask, PoisonElts)) { in foldVectorSelect()
2596 if (V != &Sel) in foldVectorSelect()
2597 return replaceInstUsesWith(Sel, V); in foldVectorSelect()
2598 return &Sel; in foldVectorSelect()
2610 Value *NewSel = Builder.CreateSelect(Cond, Y, X, "sel", &Sel); in foldVectorSelect()
2615 Value *NewSel = Builder.CreateSelect(Cond, X, Y, "sel", &Sel); in foldVectorSelect()
2624 Value *NewSel = Builder.CreateSelect(Cond, X, Y, "sel", &Sel); in foldVectorSelect()
2629 Value *NewSel = Builder.CreateSelect(Cond, Y, X, "sel", &Sel); in foldVectorSelect()
2637 static Instruction *foldSelectToPhiImpl(SelectInst &Sel, BasicBlock *BB, in foldSelectToPhiImpl() argument
2647 Value *Cond = Sel.getCondition(); in foldSelectToPhiImpl()
2653 IfTrue = Sel.getTrueValue(); in foldSelectToPhiImpl()
2654 IfFalse = Sel.getFalseValue(); in foldSelectToPhiImpl()
2658 IfTrue = Sel.getFalseValue(); in foldSelectToPhiImpl()
2659 IfFalse = Sel.getTrueValue(); in foldSelectToPhiImpl()
2691 auto *PN = Builder.CreatePHI(Sel.getType(), Inputs.size()); in foldSelectToPhiImpl()
2694 PN->takeName(&Sel); in foldSelectToPhiImpl()
2698 static Instruction *foldSelectToPhi(SelectInst &Sel, const DominatorTree &DT, in foldSelectToPhi() argument
2702 CandidateBlocks.insert(Sel.getParent()); in foldSelectToPhi()
2703 for (Value *V : Sel.operands()) in foldSelectToPhi()
2708 if (auto *PN = foldSelectToPhiImpl(Sel, BB, DT, Builder)) in foldSelectToPhi()
2768 static Value *foldSelectWithFrozenICmp(SelectInst &Sel, InstCombiner::BuilderTy &Builder) { in foldSelectWithFrozenICmp() argument
2769 FreezeInst *FI = dyn_cast<FreezeInst>(Sel.getCondition()); in foldSelectWithFrozenICmp()
2774 Value *TrueVal = Sel.getTrueValue(), *FalseVal = Sel.getFalseValue(); in foldSelectWithFrozenICmp()