Lines Matching refs:II
501 IntrinsicInst &II) { in processPhiNode() argument
503 auto RequiredType = II.getType(); in processPhiNode()
505 auto *PN = dyn_cast<PHINode>(II.getArgOperand(0)); in processPhiNode()
535 return IC.replaceInstUsesWith(II, NPN); in processPhiNode()
548 IntrinsicInst &II) { in tryCombineFromSVBoolBinOp() argument
549 auto BinOp = dyn_cast<IntrinsicInst>(II.getOperand(0)); in tryCombineFromSVBoolBinOp()
578 if (PredOpTy != II.getType()) in tryCombineFromSVBoolBinOp()
581 IRBuilder<> Builder(II.getContext()); in tryCombineFromSVBoolBinOp()
582 Builder.SetInsertPoint(&II); in tryCombineFromSVBoolBinOp()
596 return IC.replaceInstUsesWith(II, NarrowedBinOp); in tryCombineFromSVBoolBinOp()
600 IntrinsicInst &II) { in instCombineConvertFromSVBool() argument
602 if (isa<PHINode>(II.getArgOperand(0))) in instCombineConvertFromSVBool()
603 return processPhiNode(IC, II); in instCombineConvertFromSVBool()
605 if (auto BinOpCombine = tryCombineFromSVBoolBinOp(IC, II)) in instCombineConvertFromSVBool()
609 Value *Cursor = II.getOperand(0), *EarliestReplacement = nullptr; in instCombineConvertFromSVBool()
611 const auto *IVTy = cast<VectorType>(II.getType()); in instCombineConvertFromSVBool()
644 return IC.replaceInstUsesWith(II, EarliestReplacement); in instCombineConvertFromSVBool()
648 IntrinsicInst &II) { in instCombineSVESel() argument
649 IRBuilder<> Builder(&II); in instCombineSVESel()
650 auto Select = Builder.CreateSelect(II.getOperand(0), II.getOperand(1), in instCombineSVESel()
651 II.getOperand(2)); in instCombineSVESel()
652 return IC.replaceInstUsesWith(II, Select); in instCombineSVESel()
656 IntrinsicInst &II) { in instCombineSVEDup() argument
657 IntrinsicInst *Pg = dyn_cast<IntrinsicInst>(II.getArgOperand(1)); in instCombineSVEDup()
670 auto *IdxTy = Type::getInt64Ty(II.getContext()); in instCombineSVEDup()
672 II.getArgOperand(0), II.getArgOperand(2), ConstantInt::get(IdxTy, 0)); in instCombineSVEDup()
673 Insert->insertBefore(&II); in instCombineSVEDup()
674 Insert->takeName(&II); in instCombineSVEDup()
676 return IC.replaceInstUsesWith(II, Insert); in instCombineSVEDup()
680 IntrinsicInst &II) { in instCombineSVEDupX() argument
682 IRBuilder<> Builder(II.getContext()); in instCombineSVEDupX()
683 Builder.SetInsertPoint(&II); in instCombineSVEDupX()
684 auto *RetTy = cast<ScalableVectorType>(II.getType()); in instCombineSVEDupX()
686 Builder.CreateVectorSplat(RetTy->getElementCount(), II.getArgOperand(0)); in instCombineSVEDupX()
687 Splat->takeName(&II); in instCombineSVEDupX()
688 return IC.replaceInstUsesWith(II, Splat); in instCombineSVEDupX()
692 IntrinsicInst &II) { in instCombineSVECmpNE() argument
693 LLVMContext &Ctx = II.getContext(); in instCombineSVECmpNE()
695 Builder.SetInsertPoint(&II); in instCombineSVECmpNE()
698 auto *Pg = dyn_cast<IntrinsicInst>(II.getArgOperand(0)); in instCombineSVECmpNE()
709 dyn_cast_or_null<ConstantInt>(getSplatValue(II.getArgOperand(2))); in instCombineSVECmpNE()
714 auto *DupQLane = dyn_cast<IntrinsicInst>(II.getArgOperand(1)); in instCombineSVECmpNE()
740 auto *OutTy = dyn_cast<ScalableVectorType>(II.getType()); in instCombineSVECmpNE()
758 auto *PFalse = Constant::getNullValue(II.getType()); in instCombineSVECmpNE()
759 PFalse->takeName(&II); in instCombineSVECmpNE()
760 return IC.replaceInstUsesWith(II, PFalse); in instCombineSVECmpNE()
786 {II.getType()}, {ConvertToSVBool}); in instCombineSVECmpNE()
788 ConvertFromSVBool->takeName(&II); in instCombineSVECmpNE()
789 return IC.replaceInstUsesWith(II, ConvertFromSVBool); in instCombineSVECmpNE()
793 IntrinsicInst &II) { in instCombineSVELast() argument
794 IRBuilder<> Builder(II.getContext()); in instCombineSVELast()
795 Builder.SetInsertPoint(&II); in instCombineSVELast()
796 Value *Pg = II.getArgOperand(0); in instCombineSVELast()
797 Value *Vec = II.getArgOperand(1); in instCombineSVELast()
798 auto IntrinsicID = II.getIntrinsicID(); in instCombineSVELast()
803 return IC.replaceInstUsesWith(II, SplatVal); in instCombineSVELast()
817 OpC, NewLHS, NewRHS, OldBinOp, OldBinOp->getName(), &II); in instCombineSVELast()
818 return IC.replaceInstUsesWith(II, NewBinOp); in instCombineSVELast()
825 auto *IdxTy = Type::getInt64Ty(II.getContext()); in instCombineSVELast()
827 Extract->insertBefore(&II); in instCombineSVELast()
828 Extract->takeName(&II); in instCombineSVELast()
829 return IC.replaceInstUsesWith(II, Extract); in instCombineSVELast()
861 auto *IdxTy = Type::getInt64Ty(II.getContext()); in instCombineSVELast()
863 Extract->insertBefore(&II); in instCombineSVELast()
864 Extract->takeName(&II); in instCombineSVELast()
865 return IC.replaceInstUsesWith(II, Extract); in instCombineSVELast()
869 IntrinsicInst &II) { in instCombineSVECondLast() argument
877 IRBuilder<> Builder(II.getContext()); in instCombineSVECondLast()
878 Builder.SetInsertPoint(&II); in instCombineSVECondLast()
879 Value *Pg = II.getArgOperand(0); in instCombineSVECondLast()
880 Value *Fallback = II.getArgOperand(1); in instCombineSVECondLast()
881 Value *Vec = II.getArgOperand(2); in instCombineSVECondLast()
882 Type *Ty = II.getType(); in instCombineSVECondLast()
906 auto *FPII = Builder.CreateIntrinsic(II.getIntrinsicID(), {FPVec->getType()}, in instCombineSVECondLast()
908 Value *FPIItoInt = Builder.CreateBitCast(FPII, II.getType()); in instCombineSVECondLast()
909 return IC.replaceInstUsesWith(II, FPIItoInt); in instCombineSVECondLast()
913 IntrinsicInst &II) { in instCombineRDFFR() argument
914 LLVMContext &Ctx = II.getContext(); in instCombineRDFFR()
916 Builder.SetInsertPoint(&II); in instCombineRDFFR()
922 {II.getType()}, {AllPat}); in instCombineRDFFR()
925 RDFFR->takeName(&II); in instCombineRDFFR()
926 return IC.replaceInstUsesWith(II, RDFFR); in instCombineRDFFR()
930 instCombineSVECntElts(InstCombiner &IC, IntrinsicInst &II, unsigned NumElts) { in instCombineSVECntElts() argument
931 const auto Pattern = cast<ConstantInt>(II.getArgOperand(0))->getZExtValue(); in instCombineSVECntElts()
934 LLVMContext &Ctx = II.getContext(); in instCombineSVECntElts()
936 Builder.SetInsertPoint(&II); in instCombineSVECntElts()
938 Constant *StepVal = ConstantInt::get(II.getType(), NumElts); in instCombineSVECntElts()
940 VScale->takeName(&II); in instCombineSVECntElts()
941 return IC.replaceInstUsesWith(II, VScale); in instCombineSVECntElts()
948 II, ConstantInt::get(II.getType(), MinNumElts))) in instCombineSVECntElts()
953 IntrinsicInst &II) { in instCombineSVEPTest() argument
954 IntrinsicInst *Op1 = dyn_cast<IntrinsicInst>(II.getArgOperand(0)); in instCombineSVEPTest()
955 IntrinsicInst *Op2 = dyn_cast<IntrinsicInst>(II.getArgOperand(1)); in instCombineSVEPTest()
962 IRBuilder<> Builder(II.getContext()); in instCombineSVEPTest()
963 Builder.SetInsertPoint(&II); in instCombineSVEPTest()
968 auto *PTest = Builder.CreateIntrinsic(II.getIntrinsicID(), Tys, Ops); in instCombineSVEPTest()
970 PTest->takeName(&II); in instCombineSVEPTest()
971 return IC.replaceInstUsesWith(II, PTest); in instCombineSVEPTest()
978 IntrinsicInst &II) { in instCombineSVEVectorFMLA() argument
980 Value *P = II.getOperand(0); in instCombineSVEVectorFMLA()
981 Value *A = II.getOperand(1); in instCombineSVEVectorFMLA()
982 auto FMul = II.getOperand(2); in instCombineSVEVectorFMLA()
991 llvm::FastMathFlags FAddFlags = II.getFastMathFlags(); in instCombineSVEVectorFMLA()
999 IRBuilder<> Builder(II.getContext()); in instCombineSVEVectorFMLA()
1000 Builder.SetInsertPoint(&II); in instCombineSVEVectorFMLA()
1002 {II.getType()}, {P, A, B, C}, &II); in instCombineSVEVectorFMLA()
1004 return IC.replaceInstUsesWith(II, FMLA); in instCombineSVEVectorFMLA()
1024 instCombineSVELD1(InstCombiner &IC, IntrinsicInst &II, const DataLayout &DL) { in instCombineSVELD1() argument
1025 IRBuilder<> Builder(II.getContext()); in instCombineSVELD1()
1026 Builder.SetInsertPoint(&II); in instCombineSVELD1()
1028 Value *Pred = II.getOperand(0); in instCombineSVELD1()
1029 Value *PtrOp = II.getOperand(1); in instCombineSVELD1()
1030 Type *VecTy = II.getType(); in instCombineSVELD1()
1035 Load->copyMetadata(II); in instCombineSVELD1()
1036 return IC.replaceInstUsesWith(II, Load); in instCombineSVELD1()
1042 MaskedLoad->copyMetadata(II); in instCombineSVELD1()
1043 return IC.replaceInstUsesWith(II, MaskedLoad); in instCombineSVELD1()
1047 instCombineSVEST1(InstCombiner &IC, IntrinsicInst &II, const DataLayout &DL) { in instCombineSVEST1() argument
1048 IRBuilder<> Builder(II.getContext()); in instCombineSVEST1()
1049 Builder.SetInsertPoint(&II); in instCombineSVEST1()
1051 Value *VecOp = II.getOperand(0); in instCombineSVEST1()
1052 Value *Pred = II.getOperand(1); in instCombineSVEST1()
1053 Value *PtrOp = II.getOperand(2); in instCombineSVEST1()
1059 Store->copyMetadata(II); in instCombineSVEST1()
1060 return IC.eraseInstFromFunction(II); in instCombineSVEST1()
1065 MaskedStore->copyMetadata(II); in instCombineSVEST1()
1066 return IC.eraseInstFromFunction(II); in instCombineSVEST1()
1083 IntrinsicInst &II) { in instCombineSVEVectorBinOp() argument
1084 auto *OpPredicate = II.getOperand(0); in instCombineSVEVectorBinOp()
1085 auto BinOpCode = intrinsicIDToBinOpCode(II.getIntrinsicID()); in instCombineSVEVectorBinOp()
1090 IRBuilder<> Builder(II.getContext()); in instCombineSVEVectorBinOp()
1091 Builder.SetInsertPoint(&II); in instCombineSVEVectorBinOp()
1092 Builder.setFastMathFlags(II.getFastMathFlags()); in instCombineSVEVectorBinOp()
1094 Builder.CreateBinOp(BinOpCode, II.getOperand(1), II.getOperand(2)); in instCombineSVEVectorBinOp()
1095 return IC.replaceInstUsesWith(II, BinOp); in instCombineSVEVectorBinOp()
1099 IntrinsicInst &II) { in instCombineSVEVectorFAdd() argument
1100 if (auto FMLA = instCombineSVEVectorFMLA(IC, II)) in instCombineSVEVectorFAdd()
1102 return instCombineSVEVectorBinOp(IC, II); in instCombineSVEVectorFAdd()
1106 IntrinsicInst &II) { in instCombineSVEVectorMul() argument
1107 auto *OpPredicate = II.getOperand(0); in instCombineSVEVectorMul()
1108 auto *OpMultiplicand = II.getOperand(1); in instCombineSVEVectorMul()
1109 auto *OpMultiplier = II.getOperand(2); in instCombineSVEVectorMul()
1111 IRBuilder<> Builder(II.getContext()); in instCombineSVEVectorMul()
1112 Builder.SetInsertPoint(&II); in instCombineSVEVectorMul()
1135 OpMultiplicand->takeName(&II); in instCombineSVEVectorMul()
1136 return IC.replaceInstUsesWith(II, OpMultiplicand); in instCombineSVEVectorMul()
1144 OpMultiplicand->takeName(&II); in instCombineSVEVectorMul()
1145 return IC.replaceInstUsesWith(II, OpMultiplicand); in instCombineSVEVectorMul()
1149 return instCombineSVEVectorBinOp(IC, II); in instCombineSVEVectorMul()
1153 IntrinsicInst &II) { in instCombineSVEUnpack() argument
1154 IRBuilder<> Builder(II.getContext()); in instCombineSVEUnpack()
1155 Builder.SetInsertPoint(&II); in instCombineSVEUnpack()
1156 Value *UnpackArg = II.getArgOperand(0); in instCombineSVEUnpack()
1157 auto *RetTy = cast<ScalableVectorType>(II.getType()); in instCombineSVEUnpack()
1158 bool IsSigned = II.getIntrinsicID() == Intrinsic::aarch64_sve_sunpkhi || in instCombineSVEUnpack()
1159 II.getIntrinsicID() == Intrinsic::aarch64_sve_sunpklo; in instCombineSVEUnpack()
1168 NewVal->takeName(&II); in instCombineSVEUnpack()
1169 return IC.replaceInstUsesWith(II, NewVal); in instCombineSVEUnpack()
1175 IntrinsicInst &II) { in instCombineSVETBL() argument
1176 auto *OpVal = II.getOperand(0); in instCombineSVETBL()
1177 auto *OpIndices = II.getOperand(1); in instCombineSVETBL()
1178 VectorType *VTy = cast<VectorType>(II.getType()); in instCombineSVETBL()
1189 IRBuilder<> Builder(II.getContext()); in instCombineSVETBL()
1190 Builder.SetInsertPoint(&II); in instCombineSVETBL()
1195 VectorSplat->takeName(&II); in instCombineSVETBL()
1196 return IC.replaceInstUsesWith(II, VectorSplat); in instCombineSVETBL()
1200 IntrinsicInst &II) { in instCombineSVETupleGet() argument
1203 auto *GetTuple = II.getArgOperand(0); in instCombineSVETupleGet()
1204 auto *GetIndex = II.getArgOperand(1); in instCombineSVETupleGet()
1212 SetValue->getType() != II.getType()) in instCombineSVETupleGet()
1217 return IC.replaceInstUsesWith(II, SetValue); in instCombineSVETupleGet()
1222 return IC.replaceOperand(II, 0, SetTuple); in instCombineSVETupleGet()
1226 IntrinsicInst &II) { in instCombineSVEZip() argument
1230 if (match(II.getArgOperand(0), in instCombineSVEZip()
1232 match(II.getArgOperand(1), m_Intrinsic<Intrinsic::aarch64_sve_uzp2>( in instCombineSVEZip()
1235 II, (II.getIntrinsicID() == Intrinsic::aarch64_sve_zip1 ? A : B)); in instCombineSVEZip()
1241 IntrinsicInst &II) { in instCombineLD1GatherIndex() argument
1242 Value *Mask = II.getOperand(0); in instCombineLD1GatherIndex()
1243 Value *BasePtr = II.getOperand(1); in instCombineLD1GatherIndex()
1244 Value *Index = II.getOperand(2); in instCombineLD1GatherIndex()
1245 Type *Ty = II.getType(); in instCombineLD1GatherIndex()
1254 IRBuilder<> Builder(II.getContext()); in instCombineLD1GatherIndex()
1255 Builder.SetInsertPoint(&II); in instCombineLD1GatherIndex()
1258 BasePtr->getPointerAlignment(II.getModule()->getDataLayout()); in instCombineLD1GatherIndex()
1266 MaskedLoad->takeName(&II); in instCombineLD1GatherIndex()
1267 return IC.replaceInstUsesWith(II, MaskedLoad); in instCombineLD1GatherIndex()
1274 IntrinsicInst &II) { in instCombineST1ScatterIndex() argument
1275 Value *Val = II.getOperand(0); in instCombineST1ScatterIndex()
1276 Value *Mask = II.getOperand(1); in instCombineST1ScatterIndex()
1277 Value *BasePtr = II.getOperand(2); in instCombineST1ScatterIndex()
1278 Value *Index = II.getOperand(3); in instCombineST1ScatterIndex()
1287 IRBuilder<> Builder(II.getContext()); in instCombineST1ScatterIndex()
1288 Builder.SetInsertPoint(&II); in instCombineST1ScatterIndex()
1291 BasePtr->getPointerAlignment(II.getModule()->getDataLayout()); in instCombineST1ScatterIndex()
1300 return IC.eraseInstFromFunction(II); in instCombineST1ScatterIndex()
1307 IntrinsicInst &II) { in instCombineSVESDIV() argument
1308 IRBuilder<> Builder(II.getContext()); in instCombineSVESDIV()
1309 Builder.SetInsertPoint(&II); in instCombineSVESDIV()
1311 Value *Pred = II.getOperand(0); in instCombineSVESDIV()
1312 Value *Vec = II.getOperand(1); in instCombineSVESDIV()
1313 Value *DivVec = II.getOperand(2); in instCombineSVESDIV()
1324 Intrinsic::aarch64_sve_asrd, {II.getType()}, {Pred, Vec, DivisorLog2}); in instCombineSVESDIV()
1325 return IC.replaceInstUsesWith(II, ASRD); in instCombineSVESDIV()
1331 Intrinsic::aarch64_sve_asrd, {II.getType()}, {Pred, Vec, DivisorLog2}); in instCombineSVESDIV()
1334 return IC.replaceInstUsesWith(II, NEG); in instCombineSVESDIV()
1341 IntrinsicInst &II) { in instCombineMaxMinNM() argument
1342 Value *A = II.getArgOperand(0); in instCombineMaxMinNM()
1343 Value *B = II.getArgOperand(1); in instCombineMaxMinNM()
1345 return IC.replaceInstUsesWith(II, A); in instCombineMaxMinNM()
1351 IntrinsicInst &II) { in instCombineSVESrshl() argument
1352 IRBuilder<> Builder(&II); in instCombineSVESrshl()
1353 Value *Pred = II.getOperand(0); in instCombineSVESrshl()
1354 Value *Vec = II.getOperand(1); in instCombineSVESrshl()
1355 Value *Shift = II.getOperand(2); in instCombineSVESrshl()
1380 auto LSL = Builder.CreateIntrinsic(Intrinsic::aarch64_sve_lsl, {II.getType()}, in instCombineSVESrshl()
1383 return IC.replaceInstUsesWith(II, LSL); in instCombineSVESrshl()
1388 IntrinsicInst &II) const { in instCombineIntrinsic()
1389 Intrinsic::ID IID = II.getIntrinsicID(); in instCombineIntrinsic()
1395 return instCombineMaxMinNM(IC, II); in instCombineIntrinsic()
1397 return instCombineConvertFromSVBool(IC, II); in instCombineIntrinsic()
1399 return instCombineSVEDup(IC, II); in instCombineIntrinsic()
1401 return instCombineSVEDupX(IC, II); in instCombineIntrinsic()
1404 return instCombineSVECmpNE(IC, II); in instCombineIntrinsic()
1406 return instCombineRDFFR(IC, II); in instCombineIntrinsic()
1409 return instCombineSVELast(IC, II); in instCombineIntrinsic()
1412 return instCombineSVECondLast(IC, II); in instCombineIntrinsic()
1414 return instCombineSVECntElts(IC, II, 2); in instCombineIntrinsic()
1416 return instCombineSVECntElts(IC, II, 4); in instCombineIntrinsic()
1418 return instCombineSVECntElts(IC, II, 8); in instCombineIntrinsic()
1420 return instCombineSVECntElts(IC, II, 16); in instCombineIntrinsic()
1424 return instCombineSVEPTest(IC, II); in instCombineIntrinsic()
1427 return instCombineSVEVectorMul(IC, II); in instCombineIntrinsic()
1429 return instCombineSVEVectorFAdd(IC, II); in instCombineIntrinsic()
1431 return instCombineSVEVectorBinOp(IC, II); in instCombineIntrinsic()
1433 return instCombineSVETBL(IC, II); in instCombineIntrinsic()
1438 return instCombineSVEUnpack(IC, II); in instCombineIntrinsic()
1440 return instCombineSVETupleGet(IC, II); in instCombineIntrinsic()
1443 return instCombineSVEZip(IC, II); in instCombineIntrinsic()
1445 return instCombineLD1GatherIndex(IC, II); in instCombineIntrinsic()
1447 return instCombineST1ScatterIndex(IC, II); in instCombineIntrinsic()
1449 return instCombineSVELD1(IC, II, DL); in instCombineIntrinsic()
1451 return instCombineSVEST1(IC, II, DL); in instCombineIntrinsic()
1453 return instCombineSVESDIV(IC, II); in instCombineIntrinsic()
1455 return instCombineSVESel(IC, II); in instCombineIntrinsic()
1457 return instCombineSVESrshl(IC, II); in instCombineIntrinsic()
1464 InstCombiner &IC, IntrinsicInst &II, APInt OrigDemandedElts, in simplifyDemandedVectorEltsIntrinsic() argument
1468 switch (II.getIntrinsicID()) { in simplifyDemandedVectorEltsIntrinsic()
1482 SimplifyAndSetOp(&II, 0, OrigDemandedElts, UndefElts); in simplifyDemandedVectorEltsIntrinsic()