Lines Matching refs:II

314 Value *InstCombinerImpl::simplifyMaskedLoad(IntrinsicInst &II) {  in simplifyMaskedLoad()  argument
315 Value *LoadPtr = II.getArgOperand(0); in simplifyMaskedLoad()
317 cast<ConstantInt>(II.getArgOperand(1))->getAlignValue(); in simplifyMaskedLoad()
321 if (maskIsAllOneOrUndef(II.getArgOperand(2))) { in simplifyMaskedLoad()
322 LoadInst *L = Builder.CreateAlignedLoad(II.getType(), LoadPtr, Alignment, in simplifyMaskedLoad()
324 L->copyMetadata(II); in simplifyMaskedLoad()
330 if (isDereferenceablePointer(LoadPtr, II.getType(), in simplifyMaskedLoad()
331 II.getModule()->getDataLayout(), &II, nullptr)) { in simplifyMaskedLoad()
332 LoadInst *LI = Builder.CreateAlignedLoad(II.getType(), LoadPtr, Alignment, in simplifyMaskedLoad()
334 LI->copyMetadata(II); in simplifyMaskedLoad()
335 return Builder.CreateSelect(II.getArgOperand(2), LI, II.getArgOperand(3)); in simplifyMaskedLoad()
344 Instruction *InstCombinerImpl::simplifyMaskedStore(IntrinsicInst &II) { in simplifyMaskedStore() argument
345 auto *ConstMask = dyn_cast<Constant>(II.getArgOperand(3)); in simplifyMaskedStore()
351 return eraseInstFromFunction(II); in simplifyMaskedStore()
355 Value *StorePtr = II.getArgOperand(1); in simplifyMaskedStore()
356 Align Alignment = cast<ConstantInt>(II.getArgOperand(2))->getAlignValue(); in simplifyMaskedStore()
358 new StoreInst(II.getArgOperand(0), StorePtr, false, Alignment); in simplifyMaskedStore()
359 S->copyMetadata(II); in simplifyMaskedStore()
370 SimplifyDemandedVectorElts(II.getOperand(0), DemandedElts, UndefElts)) in simplifyMaskedStore()
371 return replaceOperand(II, 0, V); in simplifyMaskedStore()
382 Instruction *InstCombinerImpl::simplifyMaskedGather(IntrinsicInst &II) { in simplifyMaskedGather() argument
383 auto *ConstMask = dyn_cast<Constant>(II.getArgOperand(2)); in simplifyMaskedGather()
391 if (auto *SplatPtr = getSplatValue(II.getArgOperand(0))) { in simplifyMaskedGather()
392 auto *VecTy = cast<VectorType>(II.getType()); in simplifyMaskedGather()
394 cast<ConstantInt>(II.getArgOperand(1))->getAlignValue(); in simplifyMaskedGather()
399 return replaceInstUsesWith(II, cast<Instruction>(Shuf)); in simplifyMaskedGather()
410 Instruction *InstCombinerImpl::simplifyMaskedScatter(IntrinsicInst &II) { in simplifyMaskedScatter() argument
411 auto *ConstMask = dyn_cast<Constant>(II.getArgOperand(3)); in simplifyMaskedScatter()
417 return eraseInstFromFunction(II); in simplifyMaskedScatter()
420 if (auto *SplatPtr = getSplatValue(II.getArgOperand(1))) { in simplifyMaskedScatter()
422 if (auto *SplatValue = getSplatValue(II.getArgOperand(0))) { in simplifyMaskedScatter()
423 Align Alignment = cast<ConstantInt>(II.getArgOperand(2))->getAlignValue(); in simplifyMaskedScatter()
426 S->copyMetadata(II); in simplifyMaskedScatter()
432 Align Alignment = cast<ConstantInt>(II.getArgOperand(2))->getAlignValue(); in simplifyMaskedScatter()
433 VectorType *WideLoadTy = cast<VectorType>(II.getArgOperand(1)->getType()); in simplifyMaskedScatter()
440 Builder.CreateExtractElement(II.getArgOperand(0), LastLane); in simplifyMaskedScatter()
443 S->copyMetadata(II); in simplifyMaskedScatter()
454 SimplifyDemandedVectorElts(II.getOperand(0), DemandedElts, UndefElts)) in simplifyMaskedScatter()
455 return replaceOperand(II, 0, V); in simplifyMaskedScatter()
457 SimplifyDemandedVectorElts(II.getOperand(1), DemandedElts, UndefElts)) in simplifyMaskedScatter()
458 return replaceOperand(II, 1, V); in simplifyMaskedScatter()
471 static Instruction *simplifyInvariantGroupIntrinsic(IntrinsicInst &II, in simplifyInvariantGroupIntrinsic() argument
473 auto *Arg = II.getArgOperand(0); in simplifyInvariantGroupIntrinsic()
487 if (II.getIntrinsicID() == Intrinsic::launder_invariant_group) in simplifyInvariantGroupIntrinsic()
489 else if (II.getIntrinsicID() == Intrinsic::strip_invariant_group) in simplifyInvariantGroupIntrinsic()
495 II.getType()->getPointerAddressSpace()) in simplifyInvariantGroupIntrinsic()
496 Result = IC.Builder.CreateAddrSpaceCast(Result, II.getType()); in simplifyInvariantGroupIntrinsic()
497 if (Result->getType() != II.getType()) in simplifyInvariantGroupIntrinsic()
498 Result = IC.Builder.CreateBitCast(Result, II.getType()); in simplifyInvariantGroupIntrinsic()
503 static Instruction *foldCttzCtlz(IntrinsicInst &II, InstCombinerImpl &IC) { in foldCttzCtlz() argument
504 assert((II.getIntrinsicID() == Intrinsic::cttz || in foldCttzCtlz()
505 II.getIntrinsicID() == Intrinsic::ctlz) && in foldCttzCtlz()
507 bool IsTZ = II.getIntrinsicID() == Intrinsic::cttz; in foldCttzCtlz()
508 Value *Op0 = II.getArgOperand(0); in foldCttzCtlz()
509 Value *Op1 = II.getArgOperand(1); in foldCttzCtlz()
515 Function *F = Intrinsic::getDeclaration(II.getModule(), ID, II.getType()); in foldCttzCtlz()
516 return CallInst::Create(F, {X, II.getArgOperand(1)}); in foldCttzCtlz()
519 if (II.getType()->isIntOrIntVectorTy(1)) { in foldCttzCtlz()
526 return IC.replaceInstUsesWith(II, ConstantInt::getNullValue(II.getType())); in foldCttzCtlz()
531 if (Instruction *R = IC.FoldOpIntoSelect(II, Sel)) in foldCttzCtlz()
537 return IC.replaceOperand(II, 0, X); in foldCttzCtlz()
541 auto *Zext = IC.Builder.CreateZExt(X, II.getType()); in foldCttzCtlz()
544 return IC.replaceInstUsesWith(II, CttzZext); in foldCttzCtlz()
552 auto *ZextCttz = IC.Builder.CreateZExt(Cttz, II.getType()); in foldCttzCtlz()
553 return IC.replaceInstUsesWith(II, ZextCttz); in foldCttzCtlz()
561 return IC.replaceOperand(II, 0, X); in foldCttzCtlz()
564 return IC.replaceOperand(II, 0, X); in foldCttzCtlz()
567 KnownBits Known = IC.computeKnownBits(Op0, 0, &II); in foldCttzCtlz()
581 return IC.replaceInstUsesWith(II, C); in foldCttzCtlz()
588 isKnownNonZero(Op0, IC.getDataLayout(), 0, &IC.getAssumptionCache(), &II, in foldCttzCtlz()
590 if (!match(II.getArgOperand(1), m_One())) in foldCttzCtlz()
591 return IC.replaceOperand(II, 1, IC.Builder.getTrue()); in foldCttzCtlz()
597 if (IT && IT->getBitWidth() != 1 && !II.getMetadata(LLVMContext::MD_range)) { in foldCttzCtlz()
601 II.setMetadata(LLVMContext::MD_range, in foldCttzCtlz()
602 MDNode::get(II.getContext(), LowAndHigh)); in foldCttzCtlz()
603 return &II; in foldCttzCtlz()
609 static Instruction *foldCtpop(IntrinsicInst &II, InstCombinerImpl &IC) { in foldCtpop() argument
610 assert(II.getIntrinsicID() == Intrinsic::ctpop && in foldCtpop()
612 Type *Ty = II.getType(); in foldCtpop()
614 Value *Op0 = II.getArgOperand(0); in foldCtpop()
620 return IC.replaceOperand(II, 0, X); in foldCtpop()
626 return IC.replaceOperand(II, 0, X); in foldCtpop()
632 Intrinsic::getDeclaration(II.getModule(), Intrinsic::cttz, Ty); in foldCtpop()
635 return IC.replaceInstUsesWith(II, IC.Builder.CreateSub(Bw, Cttz)); in foldCtpop()
642 Intrinsic::getDeclaration(II.getModule(), Intrinsic::cttz, Ty); in foldCtpop()
655 if (Instruction *R = IC.FoldOpIntoSelect(II, Sel)) in foldCtpop()
659 IC.computeKnownBits(Op0, Known, 0, &II); in foldCtpop()
676 if (IT->getBitWidth() != 1 && !II.getMetadata(LLVMContext::MD_range)) { in foldCtpop()
680 II.setMetadata(LLVMContext::MD_range, in foldCtpop()
681 MDNode::get(II.getContext(), LowAndHigh)); in foldCtpop()
682 return &II; in foldCtpop()
692 static Value *simplifyNeonTbl1(const IntrinsicInst &II, in simplifyNeonTbl1() argument
695 auto *C = dyn_cast<Constant>(II.getArgOperand(1)); in simplifyNeonTbl1()
699 auto *VecTy = cast<FixedVectorType>(II.getType()); in simplifyNeonTbl1()
721 auto *V1 = II.getArgOperand(0); in simplifyNeonTbl1()
796 static Instruction *createOverflowTuple(IntrinsicInst *II, Value *Result, in createOverflowTuple() argument
799 StructType *ST = cast<StructType>(II->getType()); in createOverflowTuple()
805 InstCombinerImpl::foldIntrinsicWithOverflowCommon(IntrinsicInst *II) { in foldIntrinsicWithOverflowCommon() argument
806 WithOverflowInst *WO = cast<WithOverflowInst>(II); in foldIntrinsicWithOverflowCommon()
834 static Instruction *moveAddAfterMinMax(IntrinsicInst *II, in moveAddAfterMinMax() argument
836 Intrinsic::ID MinMaxID = II->getIntrinsicID(); in moveAddAfterMinMax()
842 Value *Op0 = II->getArgOperand(0), *Op1 = II->getArgOperand(1); in moveAddAfterMinMax()
865 Constant *NewMinMaxC = ConstantInt::get(II->getType(), CDiff); in moveAddAfterMinMax()
935 static Instruction *foldClampRangeOfTwo(IntrinsicInst *II, in foldClampRangeOfTwo() argument
937 Value *I0 = II->getArgOperand(0), *I1 = II->getArgOperand(1); in foldClampRangeOfTwo()
944 switch (II->getIntrinsicID()) { in foldClampRangeOfTwo()
970 return SelectInst::Create(Cmp, ConstantInt::get(II->getType(), *C0), I1); in foldClampRangeOfTwo()
975 static Instruction *reassociateMinMaxWithConstants(IntrinsicInst *II) { in reassociateMinMaxWithConstants() argument
976 Intrinsic::ID MinMaxID = II->getIntrinsicID(); in reassociateMinMaxWithConstants()
977 auto *LHS = dyn_cast<IntrinsicInst>(II->getArgOperand(0)); in reassociateMinMaxWithConstants()
983 !match(II->getArgOperand(1), m_ImmConstant(C1))) in reassociateMinMaxWithConstants()
991 Module *Mod = II->getModule(); in reassociateMinMaxWithConstants()
992 Function *MinMax = Intrinsic::getDeclaration(Mod, MinMaxID, II->getType()); in reassociateMinMaxWithConstants()
999 reassociateMinMaxWithConstantInOperand(IntrinsicInst *II, in reassociateMinMaxWithConstantInOperand() argument
1005 if (!match(II, m_c_MaxOrMin(m_OneUse(m_CombineAnd( in reassociateMinMaxWithConstantInOperand()
1012 Intrinsic::ID MinMaxID = II->getIntrinsicID(); in reassociateMinMaxWithConstantInOperand()
1020 Intrinsic::getDeclaration(II->getModule(), MinMaxID, II->getType()); in reassociateMinMaxWithConstantInOperand()
1027 static Instruction *factorizeMinMaxTree(IntrinsicInst *II) { in factorizeMinMaxTree() argument
1029 auto *LHS = dyn_cast<IntrinsicInst>(II->getArgOperand(0)); in factorizeMinMaxTree()
1030 auto *RHS = dyn_cast<IntrinsicInst>(II->getArgOperand(1)); in factorizeMinMaxTree()
1031 Intrinsic::ID MinMaxID = II->getIntrinsicID(); in factorizeMinMaxTree()
1078 Module *Mod = II->getModule(); in factorizeMinMaxTree()
1079 Function *MinMax = Intrinsic::getDeclaration(Mod, MinMaxID, II->getType()); in factorizeMinMaxTree()
1086 foldShuffledIntrinsicOperands(IntrinsicInst *II, in foldShuffledIntrinsicOperands() argument
1091 switch (II->getIntrinsicID()) { in foldShuffledIntrinsicOperands()
1106 if (!match(II->getArgOperand(0), in foldShuffledIntrinsicOperands()
1111 if (none_of(II->args(), [](Value *V) { return V->hasOneUse(); })) in foldShuffledIntrinsicOperands()
1115 SmallVector<Value *, 4> NewArgs(II->arg_size()); in foldShuffledIntrinsicOperands()
1118 for (unsigned i = 1, e = II->arg_size(); i != e; ++i) { in foldShuffledIntrinsicOperands()
1119 if (!match(II->getArgOperand(i), in foldShuffledIntrinsicOperands()
1127 Instruction *FPI = isa<FPMathOperator>(II) ? II : nullptr; in foldShuffledIntrinsicOperands()
1129 Builder.CreateIntrinsic(II->getIntrinsicID(), SrcTy, NewArgs, FPI); in foldShuffledIntrinsicOperands()
1153 IntrinsicInst *II = dyn_cast<IntrinsicInst>(&CI); in visitCallInst() local
1154 if (!II) return visitCallBase(CI); in visitCallInst()
1158 if (auto *AMI = dyn_cast<AtomicMemIntrinsic>(II)) in visitCallInst()
1170 if (auto *MI = dyn_cast<AnyMemIntrinsic>(II)) { in visitCallInst()
1219 if (Changed) return II; in visitCallInst()
1224 if (auto *IIFVTy = dyn_cast<FixedVectorType>(II->getType())) { in visitCallInst()
1228 if (Value *V = SimplifyDemandedVectorElts(II, AllOnesEltMask, UndefElts)) { in visitCallInst()
1229 if (V != II) in visitCallInst()
1230 return replaceInstUsesWith(*II, V); in visitCallInst()
1231 return II; in visitCallInst()
1235 if (II->isCommutative()) { in visitCallInst()
1249 Intrinsic::ID IID = II->getIntrinsicID(); in visitCallInst()
1252 if (Value *V = lowerObjectSizeCall(II, DL, &TLI, AA, /*MustSucceed=*/false)) in visitCallInst()
1256 Value *IIOperand = II->getArgOperand(0); in visitCallInst()
1257 bool IntMinIsPoison = cast<Constant>(II->getArgOperand(1))->isOneValue(); in visitCallInst()
1263 return replaceOperand(*II, 0, X); in visitCallInst()
1265 return replaceOperand(*II, 0, X); in visitCallInst()
1267 return replaceOperand(*II, 0, X); in visitCallInst()
1269 if (Optional<bool> Sign = getKnownSign(IIOperand, II, DL, &AC, &DT)) { in visitCallInst()
1272 return replaceInstUsesWith(*II, IIOperand); in visitCallInst()
1285 return CastInst::Create(Instruction::ZExt, NarrowAbs, II->getType()); in visitCallInst()
1292 return BinaryOperator::CreateAnd(X, ConstantInt::get(II->getType(), 1)); in visitCallInst()
1297 Value *I0 = II->getArgOperand(0), *I1 = II->getArgOperand(1); in visitCallInst()
1302 return CastInst::Create(Instruction::ZExt, Cmp, II->getType()); in visitCallInst()
1307 Value *I0 = II->getArgOperand(0), *I1 = II->getArgOperand(1); in visitCallInst()
1312 return CastInst::Create(Instruction::ZExt, NarrowMaxMin, II->getType()); in visitCallInst()
1318 if (ConstantExpr::getZExt(NarrowC, II->getType()) == C) { in visitCallInst()
1320 return CastInst::Create(Instruction::ZExt, NarrowMaxMin, II->getType()); in visitCallInst()
1329 Value *I0 = II->getArgOperand(0), *I1 = II->getArgOperand(1); in visitCallInst()
1334 return CastInst::Create(Instruction::SExt, NarrowMaxMin, II->getType()); in visitCallInst()
1341 if (ConstantExpr::getSExt(NarrowC, II->getType()) == C) { in visitCallInst()
1343 return CastInst::Create(Instruction::SExt, NarrowMaxMin, II->getType()); in visitCallInst()
1384 if (Instruction *I = moveAddAfterMinMax(II, Builder)) in visitCallInst()
1403 ConstantInt::getBool(II->getContext(), IntMinIsPoison)); in visitCallInst()
1412 if (Instruction *Sel = foldClampRangeOfTwo(II, Builder)) in visitCallInst()
1415 if (Instruction *SAdd = matchSAddSubSat(*II)) in visitCallInst()
1420 if (Instruction *R = FoldOpIntoSelect(*II, Sel)) in visitCallInst()
1423 if (Instruction *NewMinMax = reassociateMinMaxWithConstants(II)) in visitCallInst()
1426 if (Instruction *R = reassociateMinMaxWithConstantInOperand(II, Builder)) in visitCallInst()
1429 if (Instruction *NewMinMax = factorizeMinMaxTree(II)) in visitCallInst()
1435 Value *IIOperand = II->getArgOperand(0); in visitCallInst()
1458 KnownBits Known = computeKnownBits(IIOperand, 0, II); in visitCallInst()
1484 if (Value *SimplifiedMaskedOp = simplifyMaskedLoad(*II)) in visitCallInst()
1488 return simplifyMaskedStore(*II); in visitCallInst()
1490 return simplifyMaskedGather(*II); in visitCallInst()
1492 return simplifyMaskedScatter(*II); in visitCallInst()
1495 if (auto *SkippedBarrier = simplifyInvariantGroupIntrinsic(*II, *this)) in visitCallInst()
1496 return replaceInstUsesWith(*II, SkippedBarrier); in visitCallInst()
1499 if (ConstantInt *Power = dyn_cast<ConstantInt>(II->getArgOperand(1))) { in visitCallInst()
1504 II->getArgOperand(0), II); in visitCallInst()
1507 return BinaryOperator::CreateFMulFMF(II->getArgOperand(0), in visitCallInst()
1508 II->getArgOperand(0), II); in visitCallInst()
1516 if (match(II->getArgOperand(0), m_FNeg(m_Value(X))) || in visitCallInst()
1517 match(II->getArgOperand(0), m_FAbs(m_Value(X))) || in visitCallInst()
1518 match(II->getArgOperand(0), in visitCallInst()
1520 return replaceOperand(*II, 0, X); in visitCallInst()
1527 if (auto *I = foldCttzCtlz(*II, *this)) in visitCallInst()
1532 if (auto *I = foldCtpop(*II, *this)) in visitCallInst()
1538 Value *Op0 = II->getArgOperand(0), *Op1 = II->getArgOperand(1); in visitCallInst()
1539 Type *Ty = II->getType(); in visitCallInst()
1542 if (match(II->getArgOperand(2), m_ImmConstant(ShAmtC))) { in visitCallInst()
1550 return replaceOperand(*II, 2, ModuloC); in visitCallInst()
1562 Module *Mod = II->getModule(); in visitCallInst()
1582 Module *Mod = II->getModule(); in visitCallInst()
1589 if (SimplifyDemandedInstructionBits(*II)) in visitCallInst()
1599 if (SimplifyDemandedBits(II, 2, Op2Demanded, Op2Known)) in visitCallInst()
1605 if (Instruction *I = foldIntrinsicWithOverflowCommon(II)) in visitCallInst()
1613 Value *Arg0 = II->getArgOperand(0); in visitCallInst()
1614 Value *Arg1 = II->getArgOperand(1); in visitCallInst()
1624 *II, Builder.CreateBinaryIntrinsic( in visitCallInst()
1633 if (Instruction *I = foldIntrinsicWithOverflowCommon(II)) in visitCallInst()
1638 if (Instruction *I = foldIntrinsicWithOverflowCommon(II)) in visitCallInst()
1642 Value *Arg0 = II->getArgOperand(0); in visitCallInst()
1643 Value *Arg1 = II->getArgOperand(1); in visitCallInst()
1653 *II, Builder.CreateBinaryIntrinsic(Intrinsic::sadd_with_overflow, in visitCallInst()
1664 SaturatingInst *SI = cast<SaturatingInst>(II); in visitCallInst()
1698 *II, Builder.CreateBinaryIntrinsic( in visitCallInst()
1731 *II, Builder.CreateBinaryIntrinsic( in visitCallInst()
1732 IID, X, ConstantInt::get(II->getType(), NewVal))); in visitCallInst()
1742 Value *Arg0 = II->getArgOperand(0); in visitCallInst()
1743 Value *Arg1 = II->getArgOperand(1); in visitCallInst()
1767 Value *NewCall = Builder.CreateBinaryIntrinsic(NewIID, X, Y, II); in visitCallInst()
1769 FNeg->copyIRFlags(II); in visitCallInst()
1799 IID, X, ConstantFP::get(Arg0->getType(), Res), II); in visitCallInst()
1804 return replaceInstUsesWith(*II, NewCall); in visitCallInst()
1813 Builder.CreateBinaryIntrinsic(IID, X, Y, II, II->getName()); in visitCallInst()
1814 return new FPExtInst(NewCall, II->getType()); in visitCallInst()
1824 Value *R = Builder.CreateUnaryIntrinsic(Intrinsic::fabs, X, II); in visitCallInst()
1826 R = Builder.CreateFNegFMF(R, II); in visitCallInst()
1827 return replaceInstUsesWith(*II, R); in visitCallInst()
1834 if (II->isFast()) { in visitCallInst()
1836 Builder.setFastMathFlags(II->getFastMathFlags()); in visitCallInst()
1837 Value *Mul = Builder.CreateFMul(II->getArgOperand(0), in visitCallInst()
1838 II->getArgOperand(1)); in visitCallInst()
1839 Value *Add = Builder.CreateFAdd(Mul, II->getArgOperand(2)); in visitCallInst()
1840 Add->takeName(II); in visitCallInst()
1841 return replaceInstUsesWith(*II, Add); in visitCallInst()
1845 if (Value *V = simplifyFMulInst(II->getArgOperand(0), II->getArgOperand(1), in visitCallInst()
1846 II->getFastMathFlags(), in visitCallInst()
1847 SQ.getWithInstruction(II))) { in visitCallInst()
1848 auto *FAdd = BinaryOperator::CreateFAdd(V, II->getArgOperand(2)); in visitCallInst()
1849 FAdd->copyFastMathFlags(II); in visitCallInst()
1857 Value *Src0 = II->getArgOperand(0); in visitCallInst()
1858 Value *Src1 = II->getArgOperand(1); in visitCallInst()
1861 replaceOperand(*II, 0, X); in visitCallInst()
1862 replaceOperand(*II, 1, Y); in visitCallInst()
1863 return II; in visitCallInst()
1869 replaceOperand(*II, 0, X); in visitCallInst()
1870 replaceOperand(*II, 1, X); in visitCallInst()
1871 return II; in visitCallInst()
1876 if (Value *V = simplifyFMAFMul(II->getArgOperand(0), II->getArgOperand(1), in visitCallInst()
1877 II->getFastMathFlags(), in visitCallInst()
1878 SQ.getWithInstruction(II))) { in visitCallInst()
1879 auto *FAdd = BinaryOperator::CreateFAdd(V, II->getArgOperand(2)); in visitCallInst()
1880 FAdd->copyFastMathFlags(II); in visitCallInst()
1887 if (match(II->getArgOperand(2), m_NegZeroFP()) || in visitCallInst()
1888 (match(II->getArgOperand(2), m_PosZeroFP()) && in visitCallInst()
1889 II->getFastMathFlags().noSignedZeros())) in visitCallInst()
1890 return BinaryOperator::CreateFMulFMF(Src0, Src1, II); in visitCallInst()
1895 Value *Mag = II->getArgOperand(0), *Sign = II->getArgOperand(1); in visitCallInst()
1899 Value *Fabs = Builder.CreateUnaryIntrinsic(Intrinsic::fabs, Mag, II); in visitCallInst()
1900 return replaceInstUsesWith(*II, Fabs); in visitCallInst()
1907 Value *Fabs = Builder.CreateUnaryIntrinsic(Intrinsic::fabs, Mag, II); in visitCallInst()
1908 return replaceInstUsesWith(*II, Builder.CreateFNegFMF(Fabs, II)); in visitCallInst()
1915 return replaceOperand(*II, 1, X); in visitCallInst()
1921 return replaceOperand(*II, 0, X); in visitCallInst()
1927 if (match(II->getArgOperand(0), in visitCallInst()
1931 CallInst *AbsT = Builder.CreateCall(II->getCalledFunction(), {TVal}); in visitCallInst()
1932 CallInst *AbsF = Builder.CreateCall(II->getCalledFunction(), {FVal}); in visitCallInst()
1937 return replaceOperand(*II, 0, FVal); in visitCallInst()
1940 return replaceOperand(*II, 0, TVal); in visitCallInst()
1953 if (match(II->getArgOperand(0), m_OneUse(m_FPExt(m_Value(ExtSrc))))) { in visitCallInst()
1955 Value *NarrowII = Builder.CreateUnaryIntrinsic(IID, ExtSrc, II); in visitCallInst()
1956 return new FPExtInst(NarrowII, II->getType()); in visitCallInst()
1963 Value *Src = II->getArgOperand(0); in visitCallInst()
1967 return replaceOperand(*II, 0, X); in visitCallInst()
1973 if (match(II->getArgOperand(0), m_OneUse(m_FNeg(m_Value(X))))) { in visitCallInst()
1975 Value *NewSin = Builder.CreateUnaryIntrinsic(Intrinsic::sin, X, II); in visitCallInst()
1977 FNeg->copyFastMathFlags(II); in visitCallInst()
1985 if (Value *V = simplifyNeonTbl1(*II, Builder)) in visitCallInst()
1986 return replaceInstUsesWith(*II, V); in visitCallInst()
1993 Value *Arg0 = II->getArgOperand(0); in visitCallInst()
1994 Value *Arg1 = II->getArgOperand(1); in visitCallInst()
1998 return replaceInstUsesWith(CI, ConstantAggregateZero::get(II->getType())); in visitCallInst()
2004 VectorType *NewVT = cast<VectorType>(II->getType()); in visitCallInst()
2022 return CastInst::CreateIntegerCast(Arg0, II->getType(), in visitCallInst()
2031 Value *DataArg = II->getArgOperand(0); in visitCallInst()
2032 Value *KeyArg = II->getArgOperand(1); in visitCallInst()
2038 replaceOperand(*II, 0, Data); in visitCallInst()
2039 replaceOperand(*II, 1, Key); in visitCallInst()
2040 return II; in visitCallInst()
2047 if (auto Op0 = dyn_cast<IntrinsicInst>(II->getArgOperand(0))) { in visitCallInst()
2052 Value *Bytes = Op0->getArgOperand(1), *Mask = II->getArgOperand(1); in visitCallInst()
2054 uint64_t Mask1 = computeKnownBits(Mask, 0, II).One.getZExtValue(); in visitCallInst()
2058 return replaceInstUsesWith(*II, Op0->getArgOperand(0)); in visitCallInst()
2074 if (auto *II = dyn_cast<IntrinsicInst>(CI)) { in visitCallInst() local
2075 if (II->getIntrinsicID() == Intrinsic::stackrestore) in visitCallInst()
2078 if (II->mayHaveSideEffects()) in visitCallInst()
2092 if (IntrinsicInst *SS = dyn_cast<IntrinsicInst>(II->getArgOperand(0))) { in visitCallInst()
2094 SS->getParent() == II->getParent()) { in visitCallInst()
2097 for (++BI; &*BI != II; ++BI) { in visitCallInst()
2128 BasicBlock::iterator BI(II); in visitCallInst()
2129 Instruction *TI = II->getParent()->getTerminator(); in visitCallInst()
2163 if (II->getFunction()->hasFnAttribute(Attribute::SanitizeAddress) || in visitCallInst()
2164 II->getFunction()->hasFnAttribute(Attribute::SanitizeMemory) || in visitCallInst()
2165 II->getFunction()->hasFnAttribute(Attribute::SanitizeHWAddress)) in visitCallInst()
2168 if (removeTriviallyEmptyRange(*II, *this, [](const IntrinsicInst &I) { in visitCallInst()
2174 Value *IIOperand = II->getArgOperand(0); in visitCallInst()
2176 II->getOperandBundlesAsDefs(OpBundles); in visitCallInst()
2183 if (isAssumeWithEmptyBundle(*cast<AssumeInst>(II))) in visitCallInst()
2185 replaceUse(II->getOperandUse(0), ConstantInt::getTrue(II->getContext())); in visitCallInst()
2191 Instruction *Next = II->getNextNonDebugInstruction(); in visitCallInst()
2198 FunctionType *AssumeIntrinsicTy = II->getFunctionType(); in visitCallInst()
2199 Value *AssumeIntrinsic = II->getCalledOperand(); in visitCallInst()
2203 II->getName()); in visitCallInst()
2204 Builder.CreateCall(AssumeIntrinsicTy, AssumeIntrinsic, B, II->getName()); in visitCallInst()
2205 return eraseInstFromFunction(*II); in visitCallInst()
2210 Builder.CreateNot(A), OpBundles, II->getName()); in visitCallInst()
2212 Builder.CreateNot(B), II->getName()); in visitCallInst()
2213 return eraseInstFromFunction(*II); in visitCallInst()
2223 isValidAssumeForContext(II, LHS, &DT)) { in visitCallInst()
2224 MDNode *MD = MDNode::get(II->getContext(), None); in visitCallInst()
2226 return RemoveConditionFromAssume(II); in visitCallInst()
2245 return RemoveConditionFromAssume(II); in visitCallInst()
2275 Replacement->insertAfter(II); in visitCallInst()
2278 return RemoveConditionFromAssume(II); in visitCallInst()
2284 if (EnableKnowledgeRetention && II->hasOperandBundles()) { in visitCallInst()
2285 for (unsigned Idx = 0; Idx < II->getNumOperandBundles(); Idx++) { in visitCallInst()
2286 auto &BOI = II->bundle_op_info_begin()[Idx]; in visitCallInst()
2288 llvm::getKnowledgeFromBundle(cast<AssumeInst>(*II), BOI); in visitCallInst()
2294 llvm::simplifyRetainedKnowledge(cast<AssumeInst>(II), RK, in visitCallInst()
2301 Worklist.pushValue(II->op_begin()[BOI.Begin]); in visitCallInst()
2302 Value::dropDroppableUse(II->op_begin()[BOI.Begin]); in visitCallInst()
2308 II->op_begin()[BOI.Begin].set(CanonRK.WasOn); in visitCallInst()
2310 II->op_begin()[BOI.Begin + 1].set(ConstantInt::get( in visitCallInst()
2311 Type::getInt64Ty(II->getContext()), CanonRK.ArgValue)); in visitCallInst()
2314 return II; in visitCallInst()
2321 computeKnownBits(IIOperand, Known, 0, II); in visitCallInst()
2322 if (Known.isAllOnes() && isAssumeWithEmptyBundle(cast<AssumeInst>(*II))) in visitCallInst()
2323 return eraseInstFromFunction(*II); in visitCallInst()
2327 AC.updateAffectedValues(cast<AssumeInst>(II)); in visitCallInst()
2334 Instruction *NextInst = II->getNextNonDebugInstruction(); in visitCallInst()
2344 Value *CurrCond = II->getArgOperand(0); in visitCallInst()
2349 Instruction *MoveI = II->getNextNonDebugInstruction(); in visitCallInst()
2353 Temp->moveBefore(II); in visitCallInst()
2355 replaceOperand(*II, 0, Builder.CreateAnd(CurrCond, NextCond)); in visitCallInst()
2358 return II; in visitCallInst()
2363 Value *Vec = II->getArgOperand(0); in visitCallInst()
2364 Value *SubVec = II->getArgOperand(1); in visitCallInst()
2365 Value *Idx = II->getArgOperand(2); in visitCallInst()
2366 auto *DstTy = dyn_cast<FixedVectorType>(II->getType()); in visitCallInst()
2409 Value *Vec = II->getArgOperand(0); in visitCallInst()
2410 Value *Idx = II->getArgOperand(1); in visitCallInst()
2412 auto *DstTy = dyn_cast<FixedVectorType>(II->getType()); in visitCallInst()
2439 Value *Vec = II->getArgOperand(0); in visitCallInst()
2450 OldBinOp->getName(), II)); in visitCallInst()
2456 OldBinOp, OldBinOp->getName(), II)); in visitCallInst()
2464 OldBinOp, OldBinOp->getName(), II)); in visitCallInst()
2472 OldUnOp->getOpcode(), X, OldUnOp, OldUnOp->getName(), II); in visitCallInst()
2486 Value *Arg = II->getArgOperand(0); in visitCallInst()
2503 II->getType()); in visitCallInst()
2517 Value *Arg = II->getArgOperand(0); in visitCallInst()
2525 if (Res->getType() != II->getType()) in visitCallInst()
2526 Res = Builder.CreateZExtOrTrunc(Res, II->getType()); in visitCallInst()
2545 Value *Arg = II->getArgOperand(0); in visitCallInst()
2553 II->getType()); in visitCallInst()
2568 Value *Arg = II->getArgOperand(0); in visitCallInst()
2574 if (Res->getType() != II->getType()) in visitCallInst()
2575 Res = Builder.CreateZExt(Res, II->getType()); in visitCallInst()
2592 Value *Arg = II->getArgOperand(0); in visitCallInst()
2602 II->getType()); in visitCallInst()
2627 Value *Arg = II->getArgOperand(0); in visitCallInst()
2640 Res = Builder.CreateCast(ExtOpc, Res, II->getType()); in visitCallInst()
2653 II->hasAllowReassoc(); in visitCallInst()
2658 Value *Arg = II->getArgOperand(ArgIdx); in visitCallInst()
2675 replaceUse(II->getOperandUse(ArgIdx), V); in visitCallInst()
2682 Optional<Instruction *> V = targetInstCombineIntrinsic(*II); in visitCallInst()
2689 if (Instruction *Shuf = foldShuffledIntrinsicOperands(II, Builder)) in visitCallInst()
2694 return visitCallBase(*II); in visitCallInst()
2726 Instruction *InstCombinerImpl::visitInvokeInst(InvokeInst &II) { in visitInvokeInst() argument
2727 return visitCallBase(II); in visitInvokeInst()
2815 IntrinsicInst *II = dyn_cast<IntrinsicInst>(U); in findInitTrampolineFromAlloca() local
2816 if (!II) in findInitTrampolineFromAlloca()
2818 if (II->getIntrinsicID() == Intrinsic::init_trampoline) { in findInitTrampolineFromAlloca()
2822 InitTrampoline = II; in findInitTrampolineFromAlloca()
2825 if (II->getIntrinsicID() == Intrinsic::adjust_trampoline) in findInitTrampolineFromAlloca()
2850 if (IntrinsicInst *II = dyn_cast<IntrinsicInst>(I)) in findInitTrampolineFromBB() local
2851 if (II->getIntrinsicID() == Intrinsic::init_trampoline && in findInitTrampolineFromBB()
2852 II->getOperand(0) == TrampMem) in findInitTrampolineFromBB()
2853 return II; in findInitTrampolineFromBB()
3023 if (IntrinsicInst *II = findInitTrampoline(Callee)) in visitCallBase() local
3024 return transformCallThroughTrampoline(Call, *II); in visitCallBase()
3244 if (auto *II = dyn_cast<InvokeInst>(Caller)) in transformConstExprCastCall() local
3245 PhisNotSupportedBlock = II->getNormalDest(); in transformConstExprCastCall()
3428 if (InvokeInst *II = dyn_cast<InvokeInst>(Caller)) { in transformConstExprCastCall() local
3429 NewCall = Builder.CreateInvoke(Callee, II->getNormalDest(), in transformConstExprCastCall()
3430 II->getUnwindDest(), Args, OpBundles); in transformConstExprCastCall()
3456 if (InvokeInst *II = dyn_cast<InvokeInst>(Caller)) { in transformConstExprCastCall() local
3457 BasicBlock::iterator I = II->getNormalDest()->getFirstInsertionPt(); in transformConstExprCastCall()
3604 if (InvokeInst *II = dyn_cast<InvokeInst>(&Call)) { in transformCallThroughTrampoline() local
3606 II->getNormalDest(), II->getUnwindDest(), in transformCallThroughTrampoline()
3608 cast<InvokeInst>(NewCaller)->setCallingConv(II->getCallingConv()); in transformCallThroughTrampoline()