Lines Matching defs:IC

58 static Instruction *simplifyX86MaskedLoad(IntrinsicInst &II, InstCombiner &IC) {
65 return IC.replaceInstUsesWith(II, ZeroVec);
69 if (Value *BoolMask = getBoolVecFromMask(Mask, IC.getDataLayout())) {
71 CallInst *NewMaskedLoad = IC.Builder.CreateMaskedLoad(
73 return IC.replaceInstUsesWith(II, NewMaskedLoad);
82 static bool simplifyX86MaskedStore(IntrinsicInst &II, InstCombiner &IC) {
89 IC.eraseInstFromFunction(II);
100 if (Value *BoolMask = getBoolVecFromMask(Mask, IC.getDataLayout())) {
103 Value *PtrCast = IC.Builder.CreateBitCast(Ptr, VecPtrTy, "castvec");
105 IC.Builder.CreateMaskedStore(Vec, PtrCast, Align(1), BoolMask);
108 IC.eraseInstFromFunction(II);
2139 InstCombiner &IC) {
2150 return IC.SimplifyDemandedBits(II, /*OpNo=*/1, DemandedMask, KnownMask);
2154 X86TTIImpl::instCombineIntrinsic(InstCombiner &IC, IntrinsicInst &II) const {
2155 auto SimplifyDemandedVectorEltsLow = [&IC](Value *Op, unsigned Width,
2159 return IC.SimplifyDemandedVectorElts(Op, DemandedElts, UndefElts);
2176 return IC.replaceInstUsesWith(II, ConstantInt::get(II.getType(), 0));
2184 return IC.replaceInstUsesWith(II,
2199 return IC.replaceInstUsesWith(II, II.getArgOperand(0));
2202 return IC.replaceInstUsesWith(II, ConstantInt::get(II.getType(), 0));
2208 return IC.replaceInstUsesWith(II,
2218 return IC.replaceInstUsesWith(II, ConstantInt::get(II.getType(), 0));
2221 return IC.replaceInstUsesWith(II, II.getArgOperand(0));
2230 Value *Masked = IC.Builder.CreateAnd(Input, II.getArgOperand(1));
2232 Value *Shifted = IC.Builder.CreateLShr(Masked, ShiftAmt);
2233 return IC.replaceInstUsesWith(II, Shifted);
2253 return IC.replaceInstUsesWith(II,
2262 return IC.replaceInstUsesWith(II, ConstantInt::get(II.getType(), 0));
2265 return IC.replaceInstUsesWith(II, II.getArgOperand(0));
2275 Value *Shifted = IC.Builder.CreateShl(Input, ShiftAmt);
2276 Value *Masked = IC.Builder.CreateAnd(Shifted, II.getArgOperand(1));
2277 return IC.replaceInstUsesWith(II, Masked);
2297 return IC.replaceInstUsesWith(II,
2332 return IC.replaceOperand(II, 0, V);
2344 if (Value *V = simplifyX86movmsk(II, IC.Builder)) {
2345 return IC.replaceInstUsesWith(II, V);
2384 IC.replaceOperand(II, 0, V);
2388 IC.replaceOperand(II, 1, V);
2418 V = IC.Builder.CreateFAdd(Arg0, Arg1);
2422 V = IC.Builder.CreateFSub(Arg0, Arg1);
2426 V = IC.Builder.CreateFMul(Arg0, Arg1);
2430 V = IC.Builder.CreateFDiv(Arg0, Arg1);
2434 return IC.replaceInstUsesWith(II, V);
2454 Value *LHS = IC.Builder.CreateExtractElement(Arg0, (uint64_t)0);
2455 Value *RHS = IC.Builder.CreateExtractElement(Arg1, (uint64_t)0);
2463 V = IC.Builder.CreateFAdd(LHS, RHS);
2467 V = IC.Builder.CreateFSub(LHS, RHS);
2471 V = IC.Builder.CreateFMul(LHS, RHS);
2475 V = IC.Builder.CreateFDiv(LHS, RHS);
2486 IC.Builder.getInt1Ty(),
2488 Mask = IC.Builder.CreateBitCast(Mask, MaskTy);
2489 Mask = IC.Builder.CreateExtractElement(Mask, (uint64_t)0);
2492 IC.Builder.CreateExtractElement(II.getArgOperand(2), (uint64_t)0);
2493 V = IC.Builder.CreateSelect(Mask, V, Passthru);
2497 V = IC.Builder.CreateInsertElement(Arg0, V, (uint64_t)0);
2499 return IC.replaceInstUsesWith(II, V);
2534 if (Value *V = simplifyX86immShift(II, IC.Builder)) {
2535 return IC.replaceInstUsesWith(II, V);
2566 if (Value *V = simplifyX86immShift(II, IC.Builder)) {
2567 return IC.replaceInstUsesWith(II, V);
2578 return IC.replaceOperand(II, 1, V);
2610 if (Value *V = simplifyX86varShift(II, IC.Builder)) {
2611 return IC.replaceInstUsesWith(II, V);
2621 if (Value *V = simplifyX86pack(II, IC.Builder, true)) {
2622 return IC.replaceInstUsesWith(II, V);
2632 if (Value *V = simplifyX86pack(II, IC.Builder, false)) {
2633 return IC.replaceInstUsesWith(II, V);
2640 if (Value *V = simplifyX86pmulh(II, IC.Builder, true, false)) {
2641 return IC.replaceInstUsesWith(II, V);
2648 if (Value *V = simplifyX86pmulh(II, IC.Builder, false, false)) {
2649 return IC.replaceInstUsesWith(II, V);
2656 if (Value *V = simplifyX86pmulh(II, IC.Builder, true, true)) {
2657 return IC.replaceInstUsesWith(II, V);
2664 if (Value *V = simplifyX86pmadd(II, IC.Builder, true)) {
2665 return IC.replaceInstUsesWith(II, V);
2672 if (Value *V = simplifyX86pmadd(II, IC.Builder, false)) {
2673 return IC.replaceInstUsesWith(II, V);
2693 IC.SimplifyDemandedVectorElts(Arg0, DemandedElts1, UndefElts1)) {
2694 IC.replaceOperand(II, 0, V);
2702 IC.SimplifyDemandedVectorElts(Arg1, DemandedElts2, UndefElts2)) {
2703 IC.replaceOperand(II, 1, V);
2710 return IC.replaceInstUsesWith(II,
2722 if (Value *V = simplifyX86insertps(II, IC.Builder)) {
2723 return IC.replaceInstUsesWith(II, V);
2746 if (Value *V = simplifyX86extrq(II, Op0, CILength, CIIndex, IC.Builder)) {
2747 return IC.replaceInstUsesWith(II, V);
2754 IC.replaceOperand(II, 0, V);
2758 IC.replaceOperand(II, 1, V);
2780 if (Value *V = simplifyX86extrq(II, Op0, CILength, CIIndex, IC.Builder)) {
2781 return IC.replaceInstUsesWith(II, V);
2787 return IC.replaceOperand(II, 0, V);
2812 if (Value *V = simplifyX86insertq(II, Op0, Op1, Len, Idx, IC.Builder)) {
2813 return IC.replaceInstUsesWith(II, V);
2820 return IC.replaceOperand(II, 0, V);
2845 if (Value *V = simplifyX86insertq(II, Op0, Op1, Len, Idx, IC.Builder)) {
2846 return IC.replaceInstUsesWith(II, V);
2854 IC.replaceOperand(II, 0, V);
2858 IC.replaceOperand(II, 1, V);
2878 return IC.replaceInstUsesWith(II, Op0);
2883 return IC.replaceInstUsesWith(II, Op0);
2889 getNegativeIsTrueBoolVec(ConstantMask, IC.getDataLayout());
2933 BoolVec = IC.Builder.CreateShuffleVector(BoolVec, ScaledMask);
2947 Value *CastOp0 = IC.Builder.CreateBitCast(Op0, MaskTy);
2948 Value *CastOp1 = IC.Builder.CreateBitCast(Op1, MaskTy);
2949 Value *Sel = IC.Builder.CreateSelect(BoolVec, CastOp1, CastOp0);
2960 if (Value *V = simplifyX86pshufb(II, IC.Builder)) {
2961 return IC.replaceInstUsesWith(II, V);
2965 if (IC.SimplifyDemandedBits(&II, 1, APInt(8, 0b10001111), KnownMask))
2973 if (Value *V = simplifyX86vpermilvar(II, IC.Builder)) {
2974 return IC.replaceInstUsesWith(II, V);
2978 if (IC.SimplifyDemandedBits(&II, 1, APInt(32, 0b00011), KnownMask))
2986 if (Value *V = simplifyX86vpermilvar(II, IC.Builder)) {
2987 return IC.replaceInstUsesWith(II, V);
2991 if (IC.SimplifyDemandedBits(&II, 1, APInt(64, 0b00010), KnownMask))
3010 if (Value *V = simplifyX86vpermv(II, IC.Builder)) {
3011 return IC.replaceInstUsesWith(II, V);
3013 if (simplifyX86VPERMMask(&II, /*IsBinary=*/false, IC))
3035 if (Value *V = simplifyX86vpermv3(II, IC.Builder)) {
3036 return IC.replaceInstUsesWith(II, V);
3038 if (simplifyX86VPERMMask(&II, /*IsBinary=*/true, IC))
3050 if (Instruction *I = simplifyX86MaskedLoad(II, IC)) {
3064 if (simplifyX86MaskedStore(II, IC)) {
3071 if (Value *V = simplifyX86addcarry(II, IC.Builder)) {
3072 return IC.replaceInstUsesWith(II, V);
3082 if (Value *V = simplifyTernarylogic(II, IC.Builder)) {
3083 return IC.replaceInstUsesWith(II, V);
3093 InstCombiner &IC, IntrinsicInst &II, APInt DemandedMask, KnownBits &Known,
3133 InstCombiner &IC, IntrinsicInst &II, APInt DemandedElts, APInt &UndefElts,
3148 IC.addToWorklist(&II);
3167 IC.addToWorklist(&II);
3187 IC.addToWorklist(&II);
3214 IC.addToWorklist(&II);
3248 IC.addToWorklist(&II);
3276 IRBuilderBase::InsertPointGuard Guard(IC.Builder);
3277 IC.Builder.SetInsertPoint(&II);
3279 return IC.Builder.CreateBinOp(