Lines Matching defs:IC
57 InstCombinerImpl &IC) {
103 IC.getSimplifyQuery().getWithInstruction(&Sel)))
110 return IC.replaceOperand(Sel, IsEq ? 1 : 2, Y);
672 static Value *foldSelectICmpLshrAshr(const ICmpInst *IC, Value *TrueVal,
675 ICmpInst::Predicate Pred = IC->getPredicate();
676 Value *CmpLHS = IC->getOperand(0);
677 Value *CmpRHS = IC->getOperand(1);
701 return Builder.CreateAShr(X, Y, IC->getName(), IsExact);
727 static Value *foldSelectICmpAndBinOp(const ICmpInst *IC, Value *TrueVal,
733 TrueVal->getType()->isVectorTy() != IC->getType()->isVectorTy())
736 Value *CmpLHS = IC->getOperand(0);
737 Value *CmpRHS = IC->getOperand(1);
741 CmpInst::Predicate Pred = IC->getPredicate();
742 if (IC->isEquality()) {
792 (IC->hasOneUse() + BinOp->hasOneUse()))
858 static Instruction *foldSelectZeroOrMul(SelectInst &SI, InstCombinerImpl &IC) {
894 auto *FrY = IC.InsertNewInstBefore(new FreezeInst(Y, Y->getName() + ".fr"),
896 IC.replaceOperand(*FalseValI, FalseValI->getOperand(0) == Y ? 0 : 1, FrY);
897 return IC.replaceInstUsesWith(SI, FalseValI);
1135 InstCombinerImpl &IC) {
1179 IC.addToWorklist(II);
1194 InstCombinerImpl &IC) {
1213 IC.Builder.CreateBinaryIntrinsic(Intrinsic::abs, LHS, IntMinIsPoisonC);
1216 return IC.Builder.CreateNeg(Abs); // Always without NSW flag!
1238 return IC.Builder.CreateBinaryIntrinsic(IntrinsicID, LHS, RHS);
1395 InstCombiner &IC) {
1524 ICmpInst::Predicate::ICMP_SGE, C2, ThresholdLowIncl, IC.getDataLayout());
1529 ICmpInst::Predicate::ICMP_SLE, C2, ThresholdHighExcl, IC.getDataLayout());
1573 InstCombinerImpl &IC) {
1631 InstCombiner::BuilderTy::InsertPointGuard Guard(IC.Builder);
1632 IC.Builder.SetInsertPoint(&Sel);
1635 Value *NewCmp = IC.Builder.CreateICmp(Pred, X, FlippedStrictness->second,
1637 IC.replaceOperand(Sel, 0, NewCmp);
1718 InstCombinerImpl &IC) {
1771 return IC.replaceInstUsesWith(SI, FalseVal);
1777 return IC.replaceInstUsesWith(SI, FalseVal);
1789 return IC.replaceInstUsesWith(SI, FalseVal);
1795 return IC.replaceInstUsesWith(SI, FalseVal);
1807 return IC.replaceInstUsesWith(SI, FalseVal);
1813 return IC.replaceInstUsesWith(SI, FalseVal);
2298 InstCombinerImpl &IC) {
2311 return IC.replaceOperand(
2312 Sel, 0, IC.Builder.CreateVectorSplat(Ty->getElementCount(), Cond));
2719 static Instruction *foldSelectWithSRem(SelectInst &SI, InstCombinerImpl &IC,
2752 IC.isKnownToBeAPowerOfTwo(Remainder, /*OrZero*/ true) &&
2826 InstCombinerImpl &IC) {
2845 Value *Fabs = IC.Builder.CreateUnaryIntrinsic(Intrinsic::fabs, X, &SI);
2846 return IC.replaceInstUsesWith(SI, Fabs);
2849 Value *Fabs = IC.Builder.CreateUnaryIntrinsic(Intrinsic::fabs, X, &SI);
2850 return IC.replaceInstUsesWith(SI, Fabs);
2892 Value *Fabs = IC.Builder.CreateUnaryIntrinsic(Intrinsic::fabs, X, &SI);
2893 return IC.replaceInstUsesWith(SI, Fabs);
2896 Value *Fabs = IC.Builder.CreateUnaryIntrinsic(Intrinsic::fabs, X, &SI);
2927 Value *Fabs = IC.Builder.CreateUnaryIntrinsic(Intrinsic::fabs, X, &SI);
2929 return IC.replaceInstUsesWith(SI, Fabs);
3540 static bool matchFMulByZeroIfResultEqZero(InstCombinerImpl &IC, Value *Cmp0,
3551 return IC.fmulByZeroIsZero(MulRHS, FMF, &CtxI);