2211 B.setInstrAndDebugLoc(
MI);
2212 unsigned Opc =
MI.getOpcode();
2215 case AMDGPU::G_CONSTANT:
2216 case AMDGPU::G_IMPLICIT_DEF: {
2224 if (DstBank == &AMDGPU::VCCRegBank)
2227 if (DefRegs.
empty())
2230 B.setInsertPt(*
MI.getParent(), ++
MI.getIterator());
2233 LLVMContext &Ctx =
B.getMF().getFunction().getContext();
2235 MI.getOperand(0).setReg(NewDstReg);
2236 if (
Opc != AMDGPU::G_IMPLICIT_DEF) {
2237 uint64_t ConstVal =
MI.getOperand(1).getCImm()->getZExtValue();
2238 MI.getOperand(1).setCImm(
2243 B.buildTrunc(DefRegs[0], NewDstReg);
2246 case AMDGPU::G_PHI: {
2255 if (DstBank == &AMDGPU::VCCRegBank) {
2262 for (
unsigned I = 1, E =
MI.getNumOperands();
I != E;
I += 2) {
2266 if (SrcBank != &AMDGPU::VCCRegBank) {
2271 MRI.
setRegBank(Copy.getReg(0), AMDGPU::VCCRegBank);
2272 MI.getOperand(
I).setReg(Copy.getReg(0));
2283 ApplyRegBankMapping ApplyBank(
B, *
this, MRI, DstBank);
2284 B.setInsertPt(
B.getMBB(),
MI);
2292 case AMDGPU::G_FCMP:
2296 case AMDGPU::G_ICMP:
2297 case AMDGPU::G_UADDO:
2298 case AMDGPU::G_USUBO:
2299 case AMDGPU::G_UADDE:
2300 case AMDGPU::G_SADDE:
2301 case AMDGPU::G_USUBE:
2302 case AMDGPU::G_SSUBE: {
2303 unsigned BoolDstOp =
2304 (
Opc == AMDGPU::G_ICMP ||
Opc == AMDGPU::G_FCMP) ? 0 : 1;
2305 Register DstReg =
MI.getOperand(BoolDstOp).getReg();
2309 if (DstBank != &AMDGPU::SGPRRegBank)
2312 const bool HasCarryIn =
MI.getNumOperands() == 5;
2318 MRI.
setRegBank(NewDstReg, AMDGPU::SGPRRegBank);
2319 MI.getOperand(BoolDstOp).setReg(NewDstReg);
2323 MRI.
setRegBank(NewSrcReg, AMDGPU::SGPRRegBank);
2324 B.buildZExt(NewSrcReg,
MI.getOperand(4).getReg());
2325 MI.getOperand(4).setReg(NewSrcReg);
2329 B.setInsertPt(*
MBB, std::next(
MI.getIterator()));
2334 if (DefRegs.
empty())
2336 B.buildTrunc(DefRegs[0], NewDstReg);
2339 case AMDGPU::G_SELECT: {
2344 if (CondRegs.
empty())
2351 if (CondBank == &AMDGPU::SGPRRegBank) {
2354 MRI.
setRegBank(NewCondReg, AMDGPU::SGPRRegBank);
2356 MI.getOperand(1).setReg(NewCondReg);
2357 B.buildZExt(NewCondReg, CondRegs[0]);
2370 if (DefRegs.
empty()) {
2375 if (Src1Regs.
empty())
2381 if (Src2Regs.
empty())
2388 auto Flags =
MI.getFlags();
2389 B.buildSelect(DefRegs[0], CondRegs[0], Src1Regs[0], Src2Regs[0], Flags);
2390 B.buildSelect(DefRegs[1], CondRegs[0], Src1Regs[1], Src2Regs[1], Flags);
2393 MI.eraseFromParent();
2396 case AMDGPU::G_BRCOND: {
2397 Register CondReg =
MI.getOperand(0).getReg();
2402 if (CondBank == &AMDGPU::SGPRRegBank) {
2405 MRI.
setRegBank(NewCondReg, AMDGPU::SGPRRegBank);
2407 MI.getOperand(0).setReg(NewCondReg);
2408 B.buildZExt(NewCondReg, CondReg);
2416 case AMDGPU::G_XOR: {
2426 if (DstBank == &AMDGPU::VCCRegBank)
2430 ApplyRegBankMapping ApplyBank(
B, *
this, MRI, DstBank);
2439 if (DstTy.
getSizeInBits() == 16 && DstBank == &AMDGPU::SGPRRegBank) {
2443 ApplyRegBankMapping ApplySALU(
B, *
this, MRI, &AMDGPU::SGPRRegBank);
2448 if (
MI.getOpcode() == AMDGPU::G_XOR &&
2469 if (DefRegs.
empty()) {
2476 (Src0Regs.
empty() || Src0Regs.
size() == 2));
2482 if (Src0Regs.
empty())
2487 if (Src1Regs.
empty())
2494 auto Flags =
MI.getFlags();
2495 B.buildInstr(
Opc, {DefRegs[0]}, {Src0Regs[0], Src1Regs[0]}, Flags);
2496 B.buildInstr(
Opc, {DefRegs[1]}, {Src0Regs[1], Src1Regs[1]}, Flags);
2499 MI.eraseFromParent();
2502 case AMDGPU::G_ABS: {
2508 if (SrcBank && SrcBank == &AMDGPU::VGPRRegBank) {
2510 ApplyRegBankMapping Apply(
B, *
this, MRI, &AMDGPU::VGPRRegBank);
2523 case AMDGPU::G_LSHR:
2524 case AMDGPU::G_ASHR:
2525 case AMDGPU::G_SMIN:
2526 case AMDGPU::G_SMAX:
2527 case AMDGPU::G_UMIN:
2528 case AMDGPU::G_UMAX: {
2535 if (!
Subtarget.useVMulU64Inst() &&
Opc == AMDGPU::G_MUL &&
2548 if (DstBank == &AMDGPU::VGPRRegBank)
2554 ApplyRegBankMapping ApplySALU(
B, *
this, MRI, &AMDGPU::SGPRRegBank);
2559 std::tie(WideSrcLo, WideSrcHi) =
2561 auto Lo =
B.buildInstr(AMDGPU::G_ABS, {
S32}, {WideSrcLo});
2562 auto Hi =
B.buildInstr(AMDGPU::G_ABS, {
S32}, {WideSrcHi});
2563 B.buildBuildVectorTrunc(DstReg, {
Lo.getReg(0),
Hi.getReg(0)});
2564 MI.eraseFromParent();
2573 std::tie(WideSrc0Lo, WideSrc0Hi)
2575 std::tie(WideSrc1Lo, WideSrc1Hi)
2577 auto Lo =
B.buildInstr(
MI.getOpcode(), {S32}, {WideSrc0Lo, WideSrc1Lo});
2578 auto Hi =
B.buildInstr(
MI.getOpcode(), {S32}, {WideSrc0Hi, WideSrc1Hi});
2579 B.buildBuildVectorTrunc(DstReg, {
Lo.getReg(0),
Hi.getReg(0)});
2580 MI.eraseFromParent();
2588 if (
Opc == AMDGPU::G_SHL ||
Opc == AMDGPU::G_LSHR ||
2589 Opc == AMDGPU::G_ASHR) {
2590 B.setInsertPt(*
MBB,
MI.getIterator());
2598 case AMDGPU::G_AMDGPU_S_MUL_I64_I32:
2599 case AMDGPU::G_AMDGPU_S_MUL_U64_U32: {
2613 Register SrcReg0 =
MI.getOperand(1).getReg();
2614 Register SrcReg1 =
MI.getOperand(2).getReg();
2617 assert(MRI.
getType(DstReg) ==
S64 &&
"This is a special case for s_mul_u64 "
2618 "that handles only 64-bit operands.");
2624 if (DstBank == &AMDGPU::SGPRRegBank) {
2625 MI.setDesc(
TII->get(AMDGPU::S_MUL_U64));
2626 MRI.
setRegClass(DstReg, &AMDGPU::SGPR_64RegClass);
2627 MRI.
setRegClass(SrcReg0, &AMDGPU::SGPR_64RegClass);
2628 MRI.
setRegClass(SrcReg1, &AMDGPU::SGPR_64RegClass);
2635 "The destination operand should be in vector registers.");
2641 B.buildTrunc(Op0L, SrcReg0);
2647 B.buildTrunc(Op1L, SrcReg1);
2649 unsigned NewOpc =
Opc == AMDGPU::G_AMDGPU_S_MUL_U64_U32
2650 ? AMDGPU::G_AMDGPU_MAD_U64_U32
2651 : AMDGPU::G_AMDGPU_MAD_I64_I32;
2655 MRI.
setRegClass(Zero64, &AMDGPU::VReg_64RegClass);
2657 MRI.
setRegClass(CarryOut, &AMDGPU::VReg_64RegClass);
2658 B.buildInstr(NewOpc, {DstReg, CarryOut}, {Op0L, Op1L, Zero64});
2659 MI.eraseFromParent();
2662 case AMDGPU::G_SEXT_INREG: {
2664 if (SrcRegs.
empty())
2668 ApplyRegBankMapping O(
B, *
this, MRI, &AMDGPU::VGPRRegBank);
2675 int Amt =
MI.getOperand(2).getImm();
2681 B.buildFreeze(DstRegs[0], SrcRegs[0]);
2683 auto Freeze =
B.buildFreeze(
S32, SrcRegs[0]);
2685 B.buildSExtInReg(DstRegs[0], Freeze, Amt);
2688 B.buildAShr(DstRegs[1], DstRegs[0],
B.buildConstant(
S32, 31));
2692 B.buildCopy(DstRegs[0], SrcRegs[0]);
2693 B.buildSExtInReg(DstRegs[1], DstRegs[0], Amt - 32);
2698 MI.eraseFromParent();
2701 case AMDGPU::G_CTPOP:
2702 case AMDGPU::G_BITREVERSE: {
2705 if (DstBank == &AMDGPU::SGPRRegBank)
2714 ApplyRegBankMapping ApplyVALU(
B, *
this, MRI, &AMDGPU::VGPRRegBank);
2723 case AMDGPU::G_AMDGPU_FFBH_U32:
2724 case AMDGPU::G_AMDGPU_FFBL_B32:
2725 case AMDGPU::G_CTLZ_ZERO_POISON:
2726 case AMDGPU::G_CTTZ_ZERO_POISON: {
2729 if (DstBank == &AMDGPU::SGPRRegBank)
2744 ApplyRegBankMapping ApplyVALU(
B, *
this, MRI, &AMDGPU::VGPRRegBank);
2746 unsigned NewOpc =
Opc == AMDGPU::G_CTLZ_ZERO_POISON
2747 ? (
unsigned)AMDGPU::G_AMDGPU_FFBH_U32
2748 :
Opc == AMDGPU::G_CTTZ_ZERO_POISON
2749 ? (
unsigned)AMDGPU::G_AMDGPU_FFBL_B32
2751 unsigned Idx = NewOpc == AMDGPU::G_AMDGPU_FFBH_U32;
2752 auto X =
B.buildInstr(NewOpc, {
S32}, {SrcRegs[Idx]});
2753 auto Y =
B.buildInstr(NewOpc, {
S32}, {SrcRegs[Idx ^ 1]});
2755 Opc == AMDGPU::G_CTLZ_ZERO_POISON ||
Opc == AMDGPU::G_CTTZ_ZERO_POISON
2757 : AMDGPU::G_UADDSAT;
2758 Y =
B.buildInstr(AddOpc, {
S32}, {
Y,
B.buildConstant(
S32, 32)});
2760 B.buildUMin(DstReg,
X,
Y);
2761 MI.eraseFromParent();
2764 case AMDGPU::G_SEXT:
2765 case AMDGPU::G_ZEXT:
2766 case AMDGPU::G_ANYEXT: {
2769 const bool Signed =
Opc == AMDGPU::G_SEXT;
2779 SrcBank != &AMDGPU::SGPRRegBank &&
2780 SrcBank != &AMDGPU::VCCRegBank &&
2784 SrcTy.getSizeInBits() <= 32) {
2790 B.buildSExtOrTrunc(DefRegs[0], SrcReg);
2791 }
else if (
Opc == AMDGPU::G_ZEXT) {
2792 B.buildZExtOrTrunc(DefRegs[0], SrcReg);
2794 B.buildAnyExtOrTrunc(DefRegs[0], SrcReg);
2799 MI.eraseFromParent();
2809 if (SrcBank == &AMDGPU::VCCRegBank) {
2816 const bool UseSel64 = DstSize > 32 &&
2817 SrcBank->
getID() == AMDGPU::SGPRRegBankID;
2821 auto True =
B.buildConstant(SelType,
Signed ? -1 : 1);
2822 auto False =
B.buildConstant(SelType, 0);
2829 B.buildSelect(DefRegs[0], SrcReg,
True,
False);
2831 }
else if (DstSize < 32) {
2832 auto Sel =
B.buildSelect(SelType, SrcReg,
True,
False);
2834 B.buildTrunc(DstReg, Sel);
2839 MI.eraseFromParent();
2845 case AMDGPU::G_EXTRACT_VECTOR_ELT: {
2857 if (foldExtractEltToCmpSelect(
B,
MI, OpdMapper))
2869 unsigned ConstOffset;
2870 std::tie(BaseIdxReg, ConstOffset) =
2877 bool ShouldMoveIndexIntoLoop = IdxBank != &AMDGPU::SGPRRegBank &&
2879 ConstOffset < SrcTy.getNumElements();
2882 if (ShouldMoveIndexIntoLoop)
2883 MI.getOperand(2).setReg(BaseIdxReg);
2889 const bool NeedCopyToVGPR = DstBank == &AMDGPU::VGPRRegBank &&
2890 SrcBank == &AMDGPU::SGPRRegBank;
2891 if (DstRegs.
empty()) {
2896 if (NeedCopyToVGPR) {
2900 MI.getOperand(0).setReg(TmpReg);
2901 B.setInsertPt(*
MI.getParent(), ++
MI.getIterator());
2908 if (ShouldMoveIndexIntoLoop)
2918 auto CastSrc =
B.buildBitcast(Vec32, SrcReg);
2919 auto One =
B.buildConstant(
S32, 1);
2930 auto IdxLo =
B.buildShl(
S32, BaseIdxReg, One);
2931 auto IdxHi =
B.buildAdd(
S32, IdxLo, One);
2933 auto Extract0 =
B.buildExtractVectorElement(DstRegs[0], CastSrc, IdxLo);
2934 auto Extract1 =
B.buildExtractVectorElement(DstRegs[1], CastSrc, IdxHi);
2938 MRI.
setRegBank(One.getReg(0), AMDGPU::SGPRRegBank);
2939 MRI.
setRegBank(IdxLo.getReg(0), AMDGPU::SGPRRegBank);
2940 MRI.
setRegBank(IdxHi.getReg(0), AMDGPU::SGPRRegBank);
2944 MI.eraseFromParent();
2950 B.setInstr(*Span.
begin());
2951 MI.eraseFromParent();
2955 if (NeedCopyToVGPR) {
2959 MRI.
setRegBank(TmpReg0, AMDGPU::SGPRRegBank);
2960 MRI.
setRegBank(TmpReg1, AMDGPU::SGPRRegBank);
2962 Extract0->getOperand(0).setReg(TmpReg0);
2963 Extract1->getOperand(0).setReg(TmpReg1);
2971 if (ShouldMoveIndexIntoLoop)
2976 case AMDGPU::G_INSERT_VECTOR_ELT: {
2986 MRI.
setType(
MI.getOperand(1).getReg(), VecTy);
2988 if (foldInsertEltToCmpSelect(
B,
MI, OpdMapper))
3000 unsigned ConstOffset;
3001 std::tie(BaseIdxReg, ConstOffset) =
3008 bool ShouldMoveIndexIntoLoop = IdxBank != &AMDGPU::SGPRRegBank &&
3013 if (ShouldMoveIndexIntoLoop)
3014 MI.getOperand(3).setReg(BaseIdxReg);
3017 if (InsRegs.
empty()) {
3021 if (ShouldMoveIndexIntoLoop) {
3033 auto CastSrc =
B.buildBitcast(Vec32, SrcReg);
3034 auto One =
B.buildConstant(
S32, 1);
3043 auto IdxLo =
B.buildShl(
S32, BaseIdxReg, One);
3044 auto IdxHi =
B.buildAdd(
S32, IdxLo, One);
3046 auto InsLo =
B.buildInsertVectorElement(Vec32, CastSrc, InsRegs[0], IdxLo);
3047 auto InsHi =
B.buildInsertVectorElement(Vec32, InsLo, InsRegs[1], IdxHi);
3060 MRI.
setRegBank(One.getReg(0), AMDGPU::SGPRRegBank);
3061 MRI.
setRegBank(IdxLo.getReg(0), AMDGPU::SGPRRegBank);
3062 MRI.
setRegBank(IdxHi.getReg(0), AMDGPU::SGPRRegBank);
3067 B.setInsertPt(
B.getMBB(),
MI);
3068 B.buildBitcast(DstReg, InsHi);
3069 MI.eraseFromParent();
3073 B.setInstr(*Span.
begin());
3074 MI.eraseFromParent();
3085 B.buildBitcast(DstReg, InsHi);
3088 if (ShouldMoveIndexIntoLoop)
3093 case AMDGPU::G_AMDGPU_BUFFER_LOAD:
3094 case AMDGPU::G_AMDGPU_BUFFER_LOAD_USHORT:
3095 case AMDGPU::G_AMDGPU_BUFFER_LOAD_SSHORT:
3096 case AMDGPU::G_AMDGPU_BUFFER_LOAD_UBYTE:
3097 case AMDGPU::G_AMDGPU_BUFFER_LOAD_SBYTE:
3098 case AMDGPU::G_AMDGPU_BUFFER_LOAD_TFE:
3099 case AMDGPU::G_AMDGPU_BUFFER_LOAD_USHORT_TFE:
3100 case AMDGPU::G_AMDGPU_BUFFER_LOAD_SSHORT_TFE:
3101 case AMDGPU::G_AMDGPU_BUFFER_LOAD_UBYTE_TFE:
3102 case AMDGPU::G_AMDGPU_BUFFER_LOAD_SBYTE_TFE:
3103 case AMDGPU::G_AMDGPU_BUFFER_LOAD_FORMAT:
3104 case AMDGPU::G_AMDGPU_BUFFER_LOAD_FORMAT_TFE:
3105 case AMDGPU::G_AMDGPU_BUFFER_LOAD_FORMAT_D16:
3106 case AMDGPU::G_AMDGPU_BUFFER_LOAD_FORMAT_D16_TFE:
3107 case AMDGPU::G_AMDGPU_TBUFFER_LOAD_FORMAT:
3108 case AMDGPU::G_AMDGPU_TBUFFER_LOAD_FORMAT_D16:
3109 case AMDGPU::G_AMDGPU_BUFFER_STORE:
3110 case AMDGPU::G_AMDGPU_BUFFER_STORE_BYTE:
3111 case AMDGPU::G_AMDGPU_BUFFER_STORE_SHORT:
3112 case AMDGPU::G_AMDGPU_BUFFER_STORE_FORMAT:
3113 case AMDGPU::G_AMDGPU_BUFFER_STORE_FORMAT_D16:
3114 case AMDGPU::G_AMDGPU_TBUFFER_STORE_FORMAT:
3115 case AMDGPU::G_AMDGPU_TBUFFER_STORE_FORMAT_D16: {
3120 case AMDGPU::G_AMDGPU_BUFFER_ATOMIC_SWAP:
3121 case AMDGPU::G_AMDGPU_BUFFER_ATOMIC_ADD:
3122 case AMDGPU::G_AMDGPU_BUFFER_ATOMIC_SUB:
3123 case AMDGPU::G_AMDGPU_BUFFER_ATOMIC_SMIN:
3124 case AMDGPU::G_AMDGPU_BUFFER_ATOMIC_UMIN:
3125 case AMDGPU::G_AMDGPU_BUFFER_ATOMIC_SMAX:
3126 case AMDGPU::G_AMDGPU_BUFFER_ATOMIC_UMAX:
3127 case AMDGPU::G_AMDGPU_BUFFER_ATOMIC_AND:
3128 case AMDGPU::G_AMDGPU_BUFFER_ATOMIC_OR:
3129 case AMDGPU::G_AMDGPU_BUFFER_ATOMIC_XOR:
3130 case AMDGPU::G_AMDGPU_BUFFER_ATOMIC_INC:
3131 case AMDGPU::G_AMDGPU_BUFFER_ATOMIC_DEC:
3132 case AMDGPU::G_AMDGPU_BUFFER_ATOMIC_SUB_CLAMP_U32:
3133 case AMDGPU::G_AMDGPU_BUFFER_ATOMIC_COND_SUB_U32:
3134 case AMDGPU::G_AMDGPU_BUFFER_ATOMIC_FADD:
3135 case AMDGPU::G_AMDGPU_BUFFER_ATOMIC_FMIN:
3136 case AMDGPU::G_AMDGPU_BUFFER_ATOMIC_FMAX: {
3141 case AMDGPU::G_AMDGPU_BUFFER_ATOMIC_CMPSWAP: {
3146 case AMDGPU::G_AMDGPU_S_BUFFER_LOAD:
3147 case AMDGPU::G_AMDGPU_S_BUFFER_LOAD_UBYTE:
3148 case AMDGPU::G_AMDGPU_S_BUFFER_LOAD_SBYTE:
3149 case AMDGPU::G_AMDGPU_S_BUFFER_LOAD_USHORT:
3150 case AMDGPU::G_AMDGPU_S_BUFFER_LOAD_SSHORT: {
3154 case AMDGPU::G_AMDGPU_S_BUFFER_PREFETCH:
3158 case AMDGPU::G_INTRINSIC:
3159 case AMDGPU::G_INTRINSIC_CONVERGENT: {
3161 case Intrinsic::amdgcn_readlane: {
3172 case Intrinsic::amdgcn_writelane: {
3182 case Intrinsic::amdgcn_interp_p1:
3183 case Intrinsic::amdgcn_interp_p2:
3184 case Intrinsic::amdgcn_interp_mov:
3185 case Intrinsic::amdgcn_interp_p1_f16:
3186 case Intrinsic::amdgcn_interp_p2_f16:
3187 case Intrinsic::amdgcn_lds_param_load: {
3195 case Intrinsic::amdgcn_interp_inreg_p10:
3196 case Intrinsic::amdgcn_interp_inreg_p2:
3197 case Intrinsic::amdgcn_interp_inreg_p10_f16:
3198 case Intrinsic::amdgcn_interp_inreg_p2_f16:
3199 case Intrinsic::amdgcn_interp_p10_rtz_f16:
3200 case Intrinsic::amdgcn_interp_p2_rtz_f16:
3201 case Intrinsic::amdgcn_permlane16_swap:
3202 case Intrinsic::amdgcn_permlane32_swap:
3205 case Intrinsic::amdgcn_permlane16:
3206 case Intrinsic::amdgcn_permlanex16: {
3214 case Intrinsic::amdgcn_permlane_bcast:
3215 case Intrinsic::amdgcn_permlane_up:
3216 case Intrinsic::amdgcn_permlane_down:
3217 case Intrinsic::amdgcn_permlane_xor:
3222 case Intrinsic::amdgcn_permlane_idx_gen: {
3226 case Intrinsic::amdgcn_sbfe:
3229 case Intrinsic::amdgcn_ubfe:
3232 case Intrinsic::amdgcn_inverse_ballot:
3233 case Intrinsic::amdgcn_s_bitreplicate:
3234 case Intrinsic::amdgcn_s_quadmask:
3235 case Intrinsic::amdgcn_s_wqm:
3239 case Intrinsic::amdgcn_ballot:
3245 case AMDGPU::G_AMDGPU_INTRIN_IMAGE_LOAD:
3246 case AMDGPU::G_AMDGPU_INTRIN_IMAGE_LOAD_D16:
3247 case AMDGPU::G_AMDGPU_INTRIN_IMAGE_LOAD_NORET:
3248 case AMDGPU::G_AMDGPU_INTRIN_IMAGE_STORE:
3249 case AMDGPU::G_AMDGPU_INTRIN_IMAGE_STORE_D16: {
3259 case AMDGPU::G_AMDGPU_BVH_INTERSECT_RAY:
3260 case AMDGPU::G_AMDGPU_BVH8_INTERSECT_RAY:
3261 case AMDGPU::G_AMDGPU_BVH_DUAL_INTERSECT_RAY: {
3263 MI.getOpcode() == AMDGPU::G_AMDGPU_BVH_DUAL_INTERSECT_RAY ||
3264 MI.getOpcode() == AMDGPU::G_AMDGPU_BVH8_INTERSECT_RAY;
3265 unsigned NumMods = IsDualOrBVH8 ? 0 : 1;
3266 unsigned LastRegOpIdx =
MI.getNumExplicitOperands() - 1 - NumMods;
3271 case AMDGPU::G_INTRINSIC_W_SIDE_EFFECTS:
3272 case AMDGPU::G_INTRINSIC_CONVERGENT_W_SIDE_EFFECTS: {
3275 case Intrinsic::amdgcn_ds_ordered_add:
3276 case Intrinsic::amdgcn_ds_ordered_swap: {
3283 case Intrinsic::amdgcn_ds_gws_init:
3284 case Intrinsic::amdgcn_ds_gws_barrier:
3285 case Intrinsic::amdgcn_ds_gws_sema_br: {
3291 case Intrinsic::amdgcn_ds_gws_sema_v:
3292 case Intrinsic::amdgcn_ds_gws_sema_p:
3293 case Intrinsic::amdgcn_ds_gws_sema_release_all: {
3298 case Intrinsic::amdgcn_ds_append:
3299 case Intrinsic::amdgcn_ds_consume: {
3303 case Intrinsic::amdgcn_s_alloc_vgpr:
3306 case Intrinsic::amdgcn_s_sendmsg:
3307 case Intrinsic::amdgcn_s_sendmsghalt: {
3312 case Intrinsic::amdgcn_s_setreg: {
3316 case Intrinsic::amdgcn_s_ttracedata:
3319 case Intrinsic::amdgcn_raw_buffer_load_lds:
3320 case Intrinsic::amdgcn_raw_buffer_load_async_lds:
3321 case Intrinsic::amdgcn_raw_ptr_buffer_load_lds:
3322 case Intrinsic::amdgcn_raw_ptr_buffer_load_async_lds: {
3329 case Intrinsic::amdgcn_struct_buffer_load_lds:
3330 case Intrinsic::amdgcn_struct_buffer_load_async_lds:
3331 case Intrinsic::amdgcn_struct_ptr_buffer_load_lds:
3332 case Intrinsic::amdgcn_struct_ptr_buffer_load_async_lds: {
3339 case Intrinsic::amdgcn_cluster_load_async_to_lds_b8:
3340 case Intrinsic::amdgcn_cluster_load_async_to_lds_b32:
3341 case Intrinsic::amdgcn_cluster_load_async_to_lds_b64:
3342 case Intrinsic::amdgcn_cluster_load_async_to_lds_b128: {
3347 case Intrinsic::amdgcn_load_to_lds:
3348 case Intrinsic::amdgcn_load_async_to_lds:
3349 case Intrinsic::amdgcn_global_load_lds:
3350 case Intrinsic::amdgcn_global_load_async_lds: {
3355 case Intrinsic::amdgcn_lds_direct_load: {
3361 case Intrinsic::amdgcn_exp_row:
3365 case Intrinsic::amdgcn_cluster_load_b32:
3366 case Intrinsic::amdgcn_cluster_load_b64:
3367 case Intrinsic::amdgcn_cluster_load_b128: {
3372 case Intrinsic::amdgcn_s_sleep_var:
3376 case Intrinsic::amdgcn_s_barrier_join:
3377 case Intrinsic::amdgcn_s_wakeup_barrier:
3380 case Intrinsic::amdgcn_s_barrier_init:
3381 case Intrinsic::amdgcn_s_barrier_signal_var:
3385 case Intrinsic::amdgcn_s_get_barrier_state:
3386 case Intrinsic::amdgcn_s_get_named_barrier_state: {
3390 case Intrinsic::amdgcn_s_prefetch_data:
3391 case Intrinsic::amdgcn_s_prefetch_inst: {
3398 MI.eraseFromParent();
3401 case Intrinsic::amdgcn_tensor_load_to_lds:
3402 case Intrinsic::amdgcn_tensor_store_from_lds: {
3416 if (RSrcIntrin->IsImage) {
3427 case AMDGPU::G_SI_CALL: {
3438 unsigned FrameSetupOpcode = AMDGPU::ADJCALLSTACKUP;
3439 unsigned FrameDestroyOpcode = AMDGPU::ADJCALLSTACKDOWN;
3445 unsigned NonCopyInstrsLen = 0;
3451 while (Start->getOpcode() != FrameSetupOpcode) {
3453 bool IsCopy =
false;
3454 if (Start->getOpcode() == AMDGPU::COPY) {
3455 auto &Dst = Start->getOperand(0);
3458 if (Reg.isPhysical() &&
MI.readsRegister(Reg,
TRI)) {
3463 auto &Src = Start->getOperand(1);
3466 IsCopy = Info->getScratchRSrcReg() == Reg;
3474 NonCopyInstrsLen = NonCopyInstrs.
size();
3479 NonCopyInstrs.
resize(NonCopyInstrsLen);
3481 for (
auto *NonCopy :
reverse(NonCopyInstrs)) {
3482 MBB->splice(LastCopy,
MBB, NonCopy->getIterator());
3487 NonCopyInstrs.
clear();
3488 NonCopyInstrsLen = 0;
3491 while (
End->getOpcode() != FrameDestroyOpcode) {
3493 bool IsCopy =
false;
3494 if (
End->getOpcode() == AMDGPU::COPY) {
3495 auto &Src =
End->getOperand(1);
3498 IsCopy = Reg.isPhysical() &&
MI.modifiesRegister(Reg,
TRI);
3504 NonCopyInstrsLen = NonCopyInstrs.
size();
3509 NonCopyInstrs.
resize(NonCopyInstrsLen);
3513 for (
auto *NonCopy :
reverse(NonCopyInstrs)) {
3514 MBB->splice(LastCopy,
MBB, NonCopy->getIterator());
3518 B.setInsertPt(
B.getMBB(), Start);
3522 case AMDGPU::G_AMDGPU_FLAT_LOAD_MONITOR:
3523 case AMDGPU::G_AMDGPU_GLOBAL_LOAD_MONITOR:
3524 case AMDGPU::G_LOAD:
3525 case AMDGPU::G_ZEXTLOAD:
3526 case AMDGPU::G_SEXTLOAD: {
3531 case AMDGPU::G_DYN_STACKALLOC:
3534 case AMDGPU::G_STACKRESTORE: {
3539 case AMDGPU::G_SBFX:
3542 case AMDGPU::G_UBFX:
3545 case AMDGPU::G_AMDGPU_MAD_U64_U32:
3546 case AMDGPU::G_AMDGPU_MAD_I64_I32:
3549 case AMDGPU::G_PREFETCH: {
3551 MI.eraseFromParent();
3555 unsigned PtrBank =
getRegBankID(PtrReg, MRI, AMDGPU::SGPRRegBankID);
3556 if (PtrBank == AMDGPU::VGPRRegBankID &&
3557 (!
Subtarget.hasVmemPrefInsts() || !
MI.getOperand(3).getImm())) {
3559 MI.eraseFromParent();
3567 !
MI.getOperand(3).getImm() ))) {
3568 MI.eraseFromParent();
3865 if (
MI.isCopy() ||
MI.getOpcode() == AMDGPU::G_FREEZE) {
3880 DstBank = &AMDGPU::VCCRegBank;
3883 DstBank = &AMDGPU::VCCRegBank;
3894 if (
MI.getOpcode() != AMDGPU::G_FREEZE &&
3899 unsigned OpdsMappingSize =
MI.isCopy() ? 1 : 2;
3901 OpdsMapping[0] = &ValMap;
3902 if (
MI.getOpcode() == AMDGPU::G_FREEZE)
3903 OpdsMapping[1] = &ValMap;
3910 if (
MI.isRegSequence()) {
3913 unsigned BankID = AMDGPU::SGPRRegBankID;
3915 for (
unsigned I = 1, E =
MI.getNumOperands();
I != E;
I += 2) {
3919 if (OpBank != AMDGPU::SGPRRegBankID) {
3920 BankID = AMDGPU::VGPRRegBankID;
3937 unsigned ResultBank = AMDGPU::InvalidRegBankID;
3942 ResultBank = DstBank->
getID();
3944 for (
unsigned I = 0;
I <
PHI->getNumIncomingValues(); ++
I) {
3949 if (!Bank || Bank->
getID() == AMDGPU::VGPRRegBankID) {
3950 ResultBank = AMDGPU::VGPRRegBankID;
3955 unsigned OpBank = Bank->
getID();
3959 assert(ResultBank != AMDGPU::InvalidRegBankID);
3976 switch (
MI.getOpcode()) {
3983 case AMDGPU::G_MUL: {
3989 unsigned TargetBankID = AMDGPU::InvalidRegBankID;
3990 unsigned BankLHS = AMDGPU::InvalidRegBankID;
3991 unsigned BankRHS = AMDGPU::InvalidRegBankID;
3993 TargetBankID = DstBank->
getID();
3994 if (DstBank == &AMDGPU::VCCRegBank) {
3995 TargetBankID = AMDGPU::VCCRegBankID;
3996 BankLHS = AMDGPU::VCCRegBankID;
3997 BankRHS = AMDGPU::VCCRegBankID;
4000 AMDGPU::SGPRRegBankID);
4002 AMDGPU::SGPRRegBankID);
4006 AMDGPU::VCCRegBankID);
4008 AMDGPU::VCCRegBankID);
4011 if (BankLHS == AMDGPU::VGPRRegBankID || BankRHS == AMDGPU::VGPRRegBankID) {
4012 TargetBankID = AMDGPU::VGPRRegBankID;
4013 }
else if (BankLHS == AMDGPU::VCCRegBankID || BankRHS == AMDGPU::VCCRegBankID) {
4014 TargetBankID = AMDGPU::VCCRegBankID;
4015 BankLHS = AMDGPU::VCCRegBankID;
4016 BankRHS = AMDGPU::VCCRegBankID;
4017 }
else if (BankLHS == AMDGPU::SGPRRegBankID && BankRHS == AMDGPU::SGPRRegBankID) {
4018 TargetBankID = AMDGPU::SGPRRegBankID;
4022 OpdsMapping[0] = AMDGPU::getValueMapping(TargetBankID,
Size);
4023 OpdsMapping[1] = AMDGPU::getValueMapping(BankLHS,
Size);
4024 OpdsMapping[2] = AMDGPU::getValueMapping(BankRHS,
Size);
4031 OpdsMapping[0] = getValueMappingSGPR64Only(AMDGPU::SGPRRegBankID,
Size);
4032 OpdsMapping[1] = OpdsMapping[2] = OpdsMapping[0];
4034 if (
MI.getOpcode() == AMDGPU::G_MUL &&
Subtarget.useVMulU64Inst())
4035 OpdsMapping[0] = AMDGPU::getValueMapping(AMDGPU::VGPRRegBankID,
Size);
4038 getValueMappingSGPR64Only(AMDGPU::VGPRRegBankID,
Size);
4040 OpdsMapping[1] = AMDGPU::getValueMapping(Bank1,
Size);
4043 OpdsMapping[2] = AMDGPU::getValueMapping(Bank2,
Size);
4051 case AMDGPU::G_PTR_ADD:
4052 case AMDGPU::G_PTRMASK:
4056 case AMDGPU::G_LSHR:
4057 case AMDGPU::G_ASHR:
4058 case AMDGPU::G_UADDO:
4059 case AMDGPU::G_USUBO:
4060 case AMDGPU::G_UADDE:
4061 case AMDGPU::G_SADDE:
4062 case AMDGPU::G_USUBE:
4063 case AMDGPU::G_SSUBE:
4065 case AMDGPU::G_SHUFFLE_VECTOR:
4066 case AMDGPU::G_SBFX:
4067 case AMDGPU::G_UBFX:
4068 case AMDGPU::G_AMDGPU_S_MUL_I64_I32:
4069 case AMDGPU::G_AMDGPU_S_MUL_U64_U32:
4072 unsigned Size = Ty.getSizeInBits();
4074 if (
Subtarget.hasAnyPackedU64Ops() && Ty.isVector() &&
Size == 128)
4079 case AMDGPU::G_SMIN:
4080 case AMDGPU::G_SMAX:
4081 case AMDGPU::G_UMIN:
4082 case AMDGPU::G_UMAX:
4091 case AMDGPU::G_FADD:
4092 case AMDGPU::G_FSUB:
4093 case AMDGPU::G_FMUL:
4095 case AMDGPU::G_FFLOOR:
4096 case AMDGPU::G_FCEIL:
4097 case AMDGPU::G_INTRINSIC_ROUNDEVEN:
4098 case AMDGPU::G_INTRINSIC_TRUNC:
4099 case AMDGPU::G_STRICT_FADD:
4100 case AMDGPU::G_STRICT_FSUB:
4101 case AMDGPU::G_STRICT_FMUL:
4102 case AMDGPU::G_STRICT_FMA: {
4104 unsigned Size = Ty.getSizeInBits();
4105 if (
Subtarget.hasSALUFloatInsts() && Ty.isScalar() &&
4110 case AMDGPU::G_FMINNUM:
4111 case AMDGPU::G_FMAXNUM:
4112 case AMDGPU::G_FMINIMUMNUM:
4113 case AMDGPU::G_FMAXIMUMNUM: {
4115 unsigned Size = Ty.getSizeInBits();
4126 bool ScalarNumIsSafe =
4128 if (
Subtarget.hasSALUFloatInsts() && Ty.isScalar() &&
4133 case AMDGPU::G_FMINIMUM:
4134 case AMDGPU::G_FMAXIMUM: {
4136 unsigned Size = Ty.getSizeInBits();
4137 if (
Subtarget.hasSALUMinimumMaximumInsts() && Ty.isScalar() &&
4142 case AMDGPU::G_FPTOSI:
4143 case AMDGPU::G_FPTOUI:
4144 case AMDGPU::G_FPTOSI_SAT:
4145 case AMDGPU::G_FPTOUI_SAT:
4146 case AMDGPU::G_SITOFP:
4147 case AMDGPU::G_UITOFP: {
4150 if (
Subtarget.hasSALUFloatInsts() && SizeDst == 32 && SizeSrc == 32 &&
4155 case AMDGPU::G_FPTRUNC:
4156 case AMDGPU::G_FPEXT: {
4159 if (
Subtarget.hasSALUFloatInsts() && SizeDst != 64 && SizeSrc != 64 &&
4164 case AMDGPU::G_FSQRT:
4165 case AMDGPU::G_FEXP2:
4166 case AMDGPU::G_FLOG2: {
4173 case AMDGPU::G_SADDSAT:
4174 case AMDGPU::G_SSUBSAT:
4175 case AMDGPU::G_UADDSAT:
4176 case AMDGPU::G_USUBSAT:
4177 case AMDGPU::G_FMAD:
4178 case AMDGPU::G_FLDEXP:
4179 case AMDGPU::G_FMINNUM_IEEE:
4180 case AMDGPU::G_FMAXNUM_IEEE:
4181 case AMDGPU::G_FCANONICALIZE:
4182 case AMDGPU::G_STRICT_FLDEXP:
4183 case AMDGPU::G_BSWAP:
4184 case AMDGPU::G_FSHR:
4185 case AMDGPU::G_AMDGPU_FMIN_LEGACY:
4186 case AMDGPU::G_AMDGPU_FMAX_LEGACY:
4187 case AMDGPU::G_AMDGPU_RCP_IFLAG:
4188 case AMDGPU::G_AMDGPU_CVT_F32_UBYTE0:
4189 case AMDGPU::G_AMDGPU_CVT_F32_UBYTE1:
4190 case AMDGPU::G_AMDGPU_CVT_F32_UBYTE2:
4191 case AMDGPU::G_AMDGPU_CVT_F32_UBYTE3:
4192 case AMDGPU::G_AMDGPU_CVT_PK_I16_I32:
4193 case AMDGPU::G_AMDGPU_SMED3:
4194 case AMDGPU::G_AMDGPU_FMED3:
4196 case AMDGPU::G_UMULH:
4197 case AMDGPU::G_SMULH: {
4202 case AMDGPU::G_AMDGPU_MAD_U64_U32:
4203 case AMDGPU::G_AMDGPU_MAD_I64_I32: {
4212 bool AllSalu =
true;
4213 bool MulSalu =
true;
4214 for (
unsigned i = 0; i < 5; ++i) {
4217 if (Bank->getID() != AMDGPU::SGPRRegBankID) {
4219 if (i == 2 || i == 3) {
4233 if (!MulSalu ||
Subtarget.hasFullRate64Ops())
4237 OpdsMapping[0] = AMDGPU::getValueMapping(AMDGPU::VGPRRegBankID, 64);
4238 OpdsMapping[1] = AMDGPU::getValueMapping(AMDGPU::VCCRegBankID, 1);
4239 OpdsMapping[2] = AMDGPU::getValueMapping(AMDGPU::SGPRRegBankID, 32);
4240 OpdsMapping[3] = AMDGPU::getValueMapping(AMDGPU::SGPRRegBankID, 32);
4241 OpdsMapping[4] = AMDGPU::getValueMapping(AMDGPU::VGPRRegBankID, 64);
4244 case AMDGPU::G_IMPLICIT_DEF: {
4246 OpdsMapping[0] = AMDGPU::getValueMapping(AMDGPU::SGPRRegBankID,
Size);
4249 case AMDGPU::G_FCONSTANT:
4250 case AMDGPU::G_CONSTANT:
4251 case AMDGPU::G_GLOBAL_VALUE:
4252 case AMDGPU::G_FRAME_INDEX:
4253 case AMDGPU::G_BLOCK_ADDR:
4254 case AMDGPU::G_READSTEADYCOUNTER:
4255 case AMDGPU::G_READCYCLECOUNTER: {
4257 OpdsMapping[0] = AMDGPU::getValueMapping(AMDGPU::SGPRRegBankID,
Size);
4260 case AMDGPU::G_DYN_STACKALLOC: {
4262 OpdsMapping[0] = AMDGPU::getValueMapping(AMDGPU::SGPRRegBankID, 32);
4263 unsigned SrcBankID =
getRegBankID(
MI.getOperand(1).getReg(), MRI);
4264 OpdsMapping[1] = AMDGPU::getValueMapping(SrcBankID, 32);
4267 case AMDGPU::G_AMDGPU_WAVE_ADDRESS: {
4272 OpdsMapping[0] = AMDGPU::getValueMapping(AMDGPU::SGPRRegBankID, 32);
4273 OpdsMapping[1] = AMDGPU::getValueMapping(AMDGPU::SGPRRegBankID, 32);
4276 case AMDGPU::G_INSERT: {
4281 OpdsMapping[0] = AMDGPU::getValueMapping(BankID, DstSize);
4282 OpdsMapping[1] = AMDGPU::getValueMapping(BankID, SrcSize);
4283 OpdsMapping[2] = AMDGPU::getValueMapping(BankID, EltSize);
4284 OpdsMapping[3] =
nullptr;
4287 case AMDGPU::G_EXTRACT: {
4291 OpdsMapping[0] = AMDGPU::getValueMapping(BankID, DstSize);
4292 OpdsMapping[1] = AMDGPU::getValueMapping(BankID, SrcSize);
4293 OpdsMapping[2] =
nullptr;
4296 case AMDGPU::G_BUILD_VECTOR:
4297 case AMDGPU::G_BUILD_VECTOR_TRUNC: {
4302 unsigned Src0BankID =
getRegBankID(
MI.getOperand(1).getReg(), MRI);
4303 unsigned Src1BankID =
getRegBankID(
MI.getOperand(2).getReg(), MRI);
4304 unsigned DstBankID =
regBankUnion(Src0BankID, Src1BankID);
4306 OpdsMapping[0] = AMDGPU::getValueMapping(DstBankID, DstSize);
4307 OpdsMapping[1] = AMDGPU::getValueMapping(Src0BankID, SrcSize);
4308 OpdsMapping[2] = AMDGPU::getValueMapping(Src1BankID, SrcSize);
4314 case AMDGPU::G_MERGE_VALUES:
4315 case AMDGPU::G_CONCAT_VECTORS: {
4320 OpdsMapping[0] = AMDGPU::getValueMapping(Bank, DstSize);
4322 for (
unsigned i = 1, e =
MI.getNumOperands(); i != e; ++i)
4323 OpdsMapping[i] = AMDGPU::getValueMapping(Bank, SrcSize);
4326 case AMDGPU::G_BITREVERSE:
4327 case AMDGPU::G_BITCAST:
4328 case AMDGPU::G_INTTOPTR:
4329 case AMDGPU::G_PTRTOINT:
4330 case AMDGPU::G_FABS:
4331 case AMDGPU::G_FNEG: {
4334 OpdsMapping[0] = OpdsMapping[1] = AMDGPU::getValueMapping(BankID,
Size);
4337 case AMDGPU::G_AMDGPU_FFBH_U32:
4338 case AMDGPU::G_AMDGPU_FFBL_B32:
4339 case AMDGPU::G_CTLZ_ZERO_POISON:
4340 case AMDGPU::G_CTTZ_ZERO_POISON: {
4343 OpdsMapping[0] = AMDGPU::getValueMapping(BankID, 32);
4344 OpdsMapping[1] = AMDGPU::getValueMappingSGPR64Only(BankID,
Size);
4347 case AMDGPU::G_CTPOP: {
4350 OpdsMapping[0] = AMDGPU::getValueMapping(BankID, 32);
4355 OpdsMapping[1] = AMDGPU::getValueMapping(BankID,
Size);
4358 case AMDGPU::G_TRUNC: {
4364 OpdsMapping[0] = AMDGPU::getValueMapping(Bank, DstSize);
4365 OpdsMapping[1] = AMDGPU::getValueMapping(Bank, SrcSize);
4368 case AMDGPU::G_ZEXT:
4369 case AMDGPU::G_SEXT:
4370 case AMDGPU::G_ANYEXT:
4371 case AMDGPU::G_SEXT_INREG: {
4380 switch (SrcBank->
getID()) {
4381 case AMDGPU::SGPRRegBankID:
4382 DstBank = AMDGPU::SGPRRegBankID;
4385 DstBank = AMDGPU::VGPRRegBankID;
4391 OpdsMapping[0] = AMDGPU::getValueMappingSGPR64Only(DstBank, DstSize);
4392 OpdsMapping[1] = AMDGPU::getValueMappingSGPR64Only(SrcBank->
getID(),
4396 case AMDGPU::G_IS_FPCLASS: {
4400 OpdsMapping[0] = AMDGPU::getValueMapping(AMDGPU::VCCRegBankID, DstSize);
4401 OpdsMapping[1] = AMDGPU::getValueMapping(AMDGPU::VGPRRegBankID, SrcSize);
4404 case AMDGPU::G_STORE: {
4411 AMDGPU::getValueMapping(AMDGPU::VGPRRegBankID,
Size);
4412 OpdsMapping[0] = ValMapping;
4416 case AMDGPU::G_ICMP:
4417 case AMDGPU::G_FCMP: {
4423 AMDGPU::SGPRRegBankID);
4427 auto canUseSCCICMP = [&]() {
4430 return Size == 32 ||
4435 auto canUseSCCFCMP = [&]() {
4439 bool isICMP =
MI.getOpcode() == AMDGPU::G_ICMP;
4440 bool CanUseSCC = DstBank == AMDGPU::SGPRRegBankID &&
4441 Op2Bank == AMDGPU::SGPRRegBankID &&
4442 Op3Bank == AMDGPU::SGPRRegBankID &&
4443 (isICMP ? canUseSCCICMP() : canUseSCCFCMP());
4445 DstBank = CanUseSCC ? AMDGPU::SGPRRegBankID : AMDGPU::VCCRegBankID;
4446 unsigned SrcBank = CanUseSCC ? AMDGPU::SGPRRegBankID : AMDGPU::VGPRRegBankID;
4450 const unsigned ResultSize = 1;
4452 OpdsMapping[0] = AMDGPU::getValueMapping(DstBank, ResultSize);
4453 OpdsMapping[1] =
nullptr;
4454 OpdsMapping[2] = AMDGPU::getValueMapping(SrcBank,
Size);
4455 OpdsMapping[3] = AMDGPU::getValueMapping(SrcBank,
Size);
4458 case AMDGPU::G_EXTRACT_VECTOR_ELT: {
4460 unsigned SrcBankID =
getRegBankID(
MI.getOperand(1).getReg(), MRI);
4465 unsigned OutputBankID =
regBankUnion(SrcBankID, IdxBank);
4467 OpdsMapping[0] = AMDGPU::getValueMappingSGPR64Only(OutputBankID, DstSize);
4468 OpdsMapping[1] = AMDGPU::getValueMapping(SrcBankID, SrcSize);
4471 OpdsMapping[2] = AMDGPU::getValueMapping(IdxBank, IdxSize);
4474 case AMDGPU::G_INSERT_VECTOR_ELT: {
4476 AMDGPU::SGPRRegBankID : AMDGPU::VGPRRegBankID;
4481 unsigned InsertEltBankID =
getRegBankID(
MI.getOperand(2).getReg(), MRI);
4482 unsigned IdxBankID =
getRegBankID(
MI.getOperand(3).getReg(), MRI);
4484 OpdsMapping[0] = AMDGPU::getValueMapping(OutputBankID, VecSize);
4485 OpdsMapping[1] = AMDGPU::getValueMapping(OutputBankID, VecSize);
4489 if (InsertSize == 64 && OutputBankID == AMDGPU::VGPRRegBankID) {
4490 OpdsMapping[2] = AMDGPU::getValueMappingSplit64(InsertEltBankID,
4493 assert(InsertSize == 32 || InsertSize == 64);
4494 OpdsMapping[2] = AMDGPU::getValueMapping(InsertEltBankID, InsertSize);
4498 OpdsMapping[3] = AMDGPU::getValueMapping(IdxBankID, IdxSize);
4501 case AMDGPU::G_UNMERGE_VALUES: {
4506 for (
unsigned i = 0, e =
MI.getNumOperands(); i != e; ++i) {
4508 OpdsMapping[i] = AMDGPU::getValueMapping(Bank,
Size);
4512 case AMDGPU::G_AMDGPU_BUFFER_LOAD:
4513 case AMDGPU::G_AMDGPU_BUFFER_LOAD_UBYTE:
4514 case AMDGPU::G_AMDGPU_BUFFER_LOAD_SBYTE:
4515 case AMDGPU::G_AMDGPU_BUFFER_LOAD_USHORT:
4516 case AMDGPU::G_AMDGPU_BUFFER_LOAD_SSHORT:
4517 case AMDGPU::G_AMDGPU_BUFFER_LOAD_TFE:
4518 case AMDGPU::G_AMDGPU_BUFFER_LOAD_UBYTE_TFE:
4519 case AMDGPU::G_AMDGPU_BUFFER_LOAD_SBYTE_TFE:
4520 case AMDGPU::G_AMDGPU_BUFFER_LOAD_USHORT_TFE:
4521 case AMDGPU::G_AMDGPU_BUFFER_LOAD_SSHORT_TFE:
4522 case AMDGPU::G_AMDGPU_BUFFER_LOAD_FORMAT:
4523 case AMDGPU::G_AMDGPU_BUFFER_LOAD_FORMAT_TFE:
4524 case AMDGPU::G_AMDGPU_BUFFER_LOAD_FORMAT_D16:
4525 case AMDGPU::G_AMDGPU_BUFFER_LOAD_FORMAT_D16_TFE:
4526 case AMDGPU::G_AMDGPU_TBUFFER_LOAD_FORMAT:
4527 case AMDGPU::G_AMDGPU_TBUFFER_LOAD_FORMAT_D16:
4528 case AMDGPU::G_AMDGPU_TBUFFER_STORE_FORMAT:
4529 case AMDGPU::G_AMDGPU_TBUFFER_STORE_FORMAT_D16:
4530 case AMDGPU::G_AMDGPU_BUFFER_STORE:
4531 case AMDGPU::G_AMDGPU_BUFFER_STORE_BYTE:
4532 case AMDGPU::G_AMDGPU_BUFFER_STORE_SHORT:
4533 case AMDGPU::G_AMDGPU_BUFFER_STORE_FORMAT:
4534 case AMDGPU::G_AMDGPU_BUFFER_STORE_FORMAT_D16: {
4553 case AMDGPU::G_AMDGPU_BUFFER_ATOMIC_SWAP:
4554 case AMDGPU::G_AMDGPU_BUFFER_ATOMIC_ADD:
4555 case AMDGPU::G_AMDGPU_BUFFER_ATOMIC_SUB:
4556 case AMDGPU::G_AMDGPU_BUFFER_ATOMIC_SMIN:
4557 case AMDGPU::G_AMDGPU_BUFFER_ATOMIC_UMIN:
4558 case AMDGPU::G_AMDGPU_BUFFER_ATOMIC_SMAX:
4559 case AMDGPU::G_AMDGPU_BUFFER_ATOMIC_UMAX:
4560 case AMDGPU::G_AMDGPU_BUFFER_ATOMIC_AND:
4561 case AMDGPU::G_AMDGPU_BUFFER_ATOMIC_OR:
4562 case AMDGPU::G_AMDGPU_BUFFER_ATOMIC_XOR:
4563 case AMDGPU::G_AMDGPU_BUFFER_ATOMIC_INC:
4564 case AMDGPU::G_AMDGPU_BUFFER_ATOMIC_DEC:
4565 case AMDGPU::G_AMDGPU_BUFFER_ATOMIC_SUB_CLAMP_U32:
4566 case AMDGPU::G_AMDGPU_BUFFER_ATOMIC_COND_SUB_U32:
4567 case AMDGPU::G_AMDGPU_BUFFER_ATOMIC_FADD:
4568 case AMDGPU::G_AMDGPU_BUFFER_ATOMIC_FMIN:
4569 case AMDGPU::G_AMDGPU_BUFFER_ATOMIC_FMAX: {
4592 case AMDGPU::G_AMDGPU_BUFFER_ATOMIC_CMPSWAP: {
4618 case AMDGPU::G_AMDGPU_S_BUFFER_LOAD:
4619 case AMDGPU::G_AMDGPU_S_BUFFER_LOAD_UBYTE:
4620 case AMDGPU::G_AMDGPU_S_BUFFER_LOAD_SBYTE:
4621 case AMDGPU::G_AMDGPU_S_BUFFER_LOAD_USHORT:
4622 case AMDGPU::G_AMDGPU_S_BUFFER_LOAD_SSHORT: {
4630 unsigned RSrcBank = OpdsMapping[1]->BreakDown[0].RegBank->getID();
4631 unsigned OffsetBank = OpdsMapping[2]->BreakDown[0].RegBank->getID();
4632 unsigned ResultBank =
regBankUnion(RSrcBank, OffsetBank);
4635 OpdsMapping[0] = AMDGPU::getValueMapping(ResultBank, Size0);
4638 case AMDGPU::G_AMDGPU_S_BUFFER_PREFETCH:
4642 case AMDGPU::G_AMDGPU_SPONENTRY: {
4644 OpdsMapping[0] = AMDGPU::getValueMapping(AMDGPU::SGPRRegBankID,
Size);
4647 case AMDGPU::G_INTRINSIC:
4648 case AMDGPU::G_INTRINSIC_CONVERGENT: {
4652 case Intrinsic::amdgcn_div_fmas:
4653 case Intrinsic::amdgcn_div_fixup:
4654 case Intrinsic::amdgcn_trig_preop:
4655 case Intrinsic::amdgcn_sin:
4656 case Intrinsic::amdgcn_cos:
4657 case Intrinsic::amdgcn_log_clamp:
4658 case Intrinsic::amdgcn_rcp_legacy:
4659 case Intrinsic::amdgcn_rsq_legacy:
4660 case Intrinsic::amdgcn_rsq_clamp:
4661 case Intrinsic::amdgcn_tanh:
4662 case Intrinsic::amdgcn_fmul_legacy:
4663 case Intrinsic::amdgcn_fma_legacy:
4664 case Intrinsic::amdgcn_frexp_mant:
4665 case Intrinsic::amdgcn_frexp_exp:
4666 case Intrinsic::amdgcn_fract:
4667 case Intrinsic::amdgcn_cvt_pknorm_i16:
4668 case Intrinsic::amdgcn_cvt_pknorm_u16:
4669 case Intrinsic::amdgcn_cvt_pk_i16:
4670 case Intrinsic::amdgcn_cvt_pk_u16:
4671 case Intrinsic::amdgcn_cvt_sr_pk_f16_f32:
4672 case Intrinsic::amdgcn_cvt_sr_pk_bf16_f32:
4673 case Intrinsic::amdgcn_cvt_pk_f16_fp8:
4674 case Intrinsic::amdgcn_cvt_pk_f16_bf8:
4675 case Intrinsic::amdgcn_cvt_pk_fp8_f16:
4676 case Intrinsic::amdgcn_cvt_pk_bf8_f16:
4677 case Intrinsic::amdgcn_cvt_sr_fp8_f16:
4678 case Intrinsic::amdgcn_cvt_sr_bf8_f16:
4679 case Intrinsic::amdgcn_cvt_scale_pk8_f16_fp8:
4680 case Intrinsic::amdgcn_cvt_scale_pk8_bf16_fp8:
4681 case Intrinsic::amdgcn_cvt_scale_pk8_f16_bf8:
4682 case Intrinsic::amdgcn_cvt_scale_pk8_bf16_bf8:
4683 case Intrinsic::amdgcn_cvt_scale_pk8_f16_fp4:
4684 case Intrinsic::amdgcn_cvt_scale_pk8_bf16_fp4:
4685 case Intrinsic::amdgcn_cvt_scale_pk8_f32_fp8:
4686 case Intrinsic::amdgcn_cvt_scale_pk8_f32_bf8:
4687 case Intrinsic::amdgcn_cvt_scale_pk8_f32_fp4:
4688 case Intrinsic::amdgcn_cvt_scale_pk16_f16_fp6:
4689 case Intrinsic::amdgcn_cvt_scale_pk16_bf16_fp6:
4690 case Intrinsic::amdgcn_cvt_scale_pk16_f16_bf6:
4691 case Intrinsic::amdgcn_cvt_scale_pk16_bf16_bf6:
4692 case Intrinsic::amdgcn_cvt_scale_pk16_f32_fp6:
4693 case Intrinsic::amdgcn_cvt_scale_pk16_f32_bf6:
4694 case Intrinsic::amdgcn_cvt_scale_pk32_f16_fp6:
4695 case Intrinsic::amdgcn_cvt_scale_pk32_bf16_fp6:
4696 case Intrinsic::amdgcn_cvt_scale_pk32_f16_bf6:
4697 case Intrinsic::amdgcn_cvt_scale_pk32_bf16_bf6:
4698 case Intrinsic::amdgcn_cvt_scale_pk32_f32_fp6:
4699 case Intrinsic::amdgcn_cvt_scale_pk32_f32_bf6:
4700 case Intrinsic::amdgcn_cvt_scalef32_pk8_fp8_bf16:
4701 case Intrinsic::amdgcn_cvt_scalef32_pk8_bf8_bf16:
4702 case Intrinsic::amdgcn_cvt_scalef32_pk8_fp8_f16:
4703 case Intrinsic::amdgcn_cvt_scalef32_pk8_bf8_f16:
4704 case Intrinsic::amdgcn_cvt_scalef32_pk8_fp8_f32:
4705 case Intrinsic::amdgcn_cvt_scalef32_pk8_bf8_f32:
4706 case Intrinsic::amdgcn_cvt_scalef32_pk8_fp4_f32:
4707 case Intrinsic::amdgcn_cvt_scalef32_pk8_fp4_f16:
4708 case Intrinsic::amdgcn_cvt_scalef32_pk8_fp4_bf16:
4709 case Intrinsic::amdgcn_cvt_scalef32_pk16_fp6_f32:
4710 case Intrinsic::amdgcn_cvt_scalef32_pk16_bf6_f32:
4711 case Intrinsic::amdgcn_cvt_scalef32_pk16_fp6_f16:
4712 case Intrinsic::amdgcn_cvt_scalef32_pk16_bf6_f16:
4713 case Intrinsic::amdgcn_cvt_scalef32_pk16_fp6_bf16:
4714 case Intrinsic::amdgcn_cvt_scalef32_pk16_bf6_bf16:
4715 case Intrinsic::amdgcn_cvt_scalef32_sr_pk8_fp8_bf16:
4716 case Intrinsic::amdgcn_cvt_scalef32_sr_pk8_bf8_bf16:
4717 case Intrinsic::amdgcn_cvt_scalef32_sr_pk8_fp8_f16:
4718 case Intrinsic::amdgcn_cvt_scalef32_sr_pk8_bf8_f16:
4719 case Intrinsic::amdgcn_cvt_scalef32_sr_pk8_fp8_f32:
4720 case Intrinsic::amdgcn_cvt_scalef32_sr_pk8_bf8_f32:
4721 case Intrinsic::amdgcn_cvt_scalef32_sr_pk8_fp4_f32:
4722 case Intrinsic::amdgcn_cvt_scalef32_sr_pk8_fp4_f16:
4723 case Intrinsic::amdgcn_cvt_scalef32_sr_pk8_fp4_bf16:
4724 case Intrinsic::amdgcn_cvt_scalef32_sr_pk16_fp6_f32:
4725 case Intrinsic::amdgcn_cvt_scalef32_sr_pk16_bf6_f32:
4726 case Intrinsic::amdgcn_cvt_scalef32_sr_pk16_fp6_f16:
4727 case Intrinsic::amdgcn_cvt_scalef32_sr_pk16_bf6_f16:
4728 case Intrinsic::amdgcn_cvt_scalef32_sr_pk16_fp6_bf16:
4729 case Intrinsic::amdgcn_cvt_scalef32_sr_pk16_bf6_bf16:
4730 case Intrinsic::amdgcn_sat_pk4_i4_i8:
4731 case Intrinsic::amdgcn_sat_pk4_u4_u8:
4732 case Intrinsic::amdgcn_fmed3:
4733 case Intrinsic::amdgcn_cubeid:
4734 case Intrinsic::amdgcn_cubema:
4735 case Intrinsic::amdgcn_cubesc:
4736 case Intrinsic::amdgcn_cubetc:
4737 case Intrinsic::amdgcn_sffbh:
4738 case Intrinsic::amdgcn_fmad_ftz:
4739 case Intrinsic::amdgcn_mbcnt_lo:
4740 case Intrinsic::amdgcn_mbcnt_hi:
4741 case Intrinsic::amdgcn_mul_u24:
4742 case Intrinsic::amdgcn_mul_i24:
4743 case Intrinsic::amdgcn_mulhi_u24:
4744 case Intrinsic::amdgcn_mulhi_i24:
4745 case Intrinsic::amdgcn_lerp:
4746 case Intrinsic::amdgcn_sad_u8:
4747 case Intrinsic::amdgcn_msad_u8:
4748 case Intrinsic::amdgcn_sad_hi_u8:
4749 case Intrinsic::amdgcn_sad_u16:
4750 case Intrinsic::amdgcn_qsad_pk_u16_u8:
4751 case Intrinsic::amdgcn_mqsad_pk_u16_u8:
4752 case Intrinsic::amdgcn_mqsad_u32_u8:
4753 case Intrinsic::amdgcn_cvt_pk_u8_f32:
4754 case Intrinsic::amdgcn_alignbyte:
4755 case Intrinsic::amdgcn_perm:
4756 case Intrinsic::amdgcn_prng_b32:
4757 case Intrinsic::amdgcn_exclusive_scan_sum_i32:
4758 case Intrinsic::amdgcn_exclusive_scan_sum_u32:
4759 case Intrinsic::amdgcn_exclusive_scan_xor_b32:
4760 case Intrinsic::amdgcn_exclusive_scan_or_b32:
4761 case Intrinsic::amdgcn_exclusive_scan_and_b32:
4762 case Intrinsic::amdgcn_exclusive_scan_min_i16:
4763 case Intrinsic::amdgcn_exclusive_scan_min_u16:
4764 case Intrinsic::amdgcn_exclusive_scan_min_i32:
4765 case Intrinsic::amdgcn_exclusive_scan_min_u32:
4766 case Intrinsic::amdgcn_exclusive_scan_max_i16:
4767 case Intrinsic::amdgcn_exclusive_scan_max_u16:
4768 case Intrinsic::amdgcn_exclusive_scan_max_i32:
4769 case Intrinsic::amdgcn_exclusive_scan_max_u32:
4770 case Intrinsic::amdgcn_wave_match_b32:
4771 case Intrinsic::amdgcn_fdot2:
4772 case Intrinsic::amdgcn_sdot2:
4773 case Intrinsic::amdgcn_udot2:
4774 case Intrinsic::amdgcn_sdot4:
4775 case Intrinsic::amdgcn_udot4:
4776 case Intrinsic::amdgcn_sdot8:
4777 case Intrinsic::amdgcn_udot8:
4778 case Intrinsic::amdgcn_fdot2_bf16_bf16:
4779 case Intrinsic::amdgcn_fdot2_f16_f16:
4780 case Intrinsic::amdgcn_fdot2_f32_bf16:
4781 case Intrinsic::amdgcn_fdot2c_f32_bf16:
4782 case Intrinsic::amdgcn_sudot4:
4783 case Intrinsic::amdgcn_sudot8:
4784 case Intrinsic::amdgcn_dot4_f32_fp8_bf8:
4785 case Intrinsic::amdgcn_dot4_f32_bf8_fp8:
4786 case Intrinsic::amdgcn_dot4_f32_fp8_fp8:
4787 case Intrinsic::amdgcn_dot4_f32_bf8_bf8:
4788 case Intrinsic::amdgcn_cvt_f32_fp8:
4789 case Intrinsic::amdgcn_cvt_f32_fp8_e5m3:
4790 case Intrinsic::amdgcn_cvt_f32_bf8:
4791 case Intrinsic::amdgcn_cvt_off_f32_i4:
4792 case Intrinsic::amdgcn_cvt_pk_f32_fp8:
4793 case Intrinsic::amdgcn_cvt_pk_f32_bf8:
4794 case Intrinsic::amdgcn_cvt_pk_fp8_f32:
4795 case Intrinsic::amdgcn_cvt_pk_fp8_f32_e5m3:
4796 case Intrinsic::amdgcn_cvt_pk_bf8_f32:
4797 case Intrinsic::amdgcn_cvt_sr_fp8_f32:
4798 case Intrinsic::amdgcn_cvt_sr_fp8_f32_e5m3:
4799 case Intrinsic::amdgcn_cvt_sr_bf8_f32:
4800 case Intrinsic::amdgcn_cvt_sr_bf16_f32:
4801 case Intrinsic::amdgcn_cvt_sr_f16_f32:
4802 case Intrinsic::amdgcn_cvt_f16_fp8:
4803 case Intrinsic::amdgcn_cvt_f16_bf8:
4804 case Intrinsic::amdgcn_cvt_scalef32_pk32_fp6_f16:
4805 case Intrinsic::amdgcn_cvt_scalef32_pk32_bf6_f16:
4806 case Intrinsic::amdgcn_cvt_scalef32_pk32_fp6_bf16:
4807 case Intrinsic::amdgcn_cvt_scalef32_pk32_bf6_bf16:
4808 case Intrinsic::amdgcn_cvt_scalef32_pk32_fp6_f32:
4809 case Intrinsic::amdgcn_cvt_scalef32_pk32_bf6_f32:
4810 case Intrinsic::amdgcn_cvt_scalef32_f16_fp8:
4811 case Intrinsic::amdgcn_cvt_scalef32_f16_bf8:
4812 case Intrinsic::amdgcn_cvt_scalef32_f32_fp8:
4813 case Intrinsic::amdgcn_cvt_scalef32_f32_bf8:
4814 case Intrinsic::amdgcn_cvt_scalef32_pk_fp8_f32:
4815 case Intrinsic::amdgcn_cvt_scalef32_pk_bf8_f32:
4816 case Intrinsic::amdgcn_cvt_scalef32_pk_f32_fp8:
4817 case Intrinsic::amdgcn_cvt_scalef32_pk_f32_bf8:
4818 case Intrinsic::amdgcn_cvt_scalef32_pk_fp8_f16:
4819 case Intrinsic::amdgcn_cvt_scalef32_pk_fp8_bf16:
4820 case Intrinsic::amdgcn_cvt_scalef32_pk_bf8_f16:
4821 case Intrinsic::amdgcn_cvt_scalef32_pk_bf8_bf16:
4822 case Intrinsic::amdgcn_cvt_scalef32_pk_f32_fp4:
4823 case Intrinsic::amdgcn_cvt_scalef32_pk_fp4_f32:
4824 case Intrinsic::amdgcn_cvt_scalef32_pk_f16_fp4:
4825 case Intrinsic::amdgcn_cvt_scalef32_pk_bf16_fp4:
4826 case Intrinsic::amdgcn_cvt_scalef32_pk32_f32_fp6:
4827 case Intrinsic::amdgcn_cvt_scalef32_pk32_f32_bf6:
4828 case Intrinsic::amdgcn_cvt_scalef32_pk32_f16_bf6:
4829 case Intrinsic::amdgcn_cvt_scalef32_pk32_bf16_bf6:
4830 case Intrinsic::amdgcn_cvt_scalef32_pk32_f16_fp6:
4831 case Intrinsic::amdgcn_cvt_scalef32_pk32_bf16_fp6:
4832 case Intrinsic::amdgcn_cvt_scalef32_pk_f16_bf8:
4833 case Intrinsic::amdgcn_cvt_scalef32_pk_bf16_bf8:
4834 case Intrinsic::amdgcn_cvt_scalef32_pk_f16_fp8:
4835 case Intrinsic::amdgcn_cvt_scalef32_pk_bf16_fp8:
4836 case Intrinsic::amdgcn_cvt_scalef32_pk_fp4_f16:
4837 case Intrinsic::amdgcn_cvt_scalef32_pk_fp4_bf16:
4838 case Intrinsic::amdgcn_cvt_scalef32_sr_pk_fp4_f16:
4839 case Intrinsic::amdgcn_cvt_scalef32_sr_pk_fp4_bf16:
4840 case Intrinsic::amdgcn_cvt_scalef32_sr_pk_fp4_f32:
4841 case Intrinsic::amdgcn_cvt_scalef32_sr_pk32_bf6_bf16:
4842 case Intrinsic::amdgcn_cvt_scalef32_sr_pk32_bf6_f16:
4843 case Intrinsic::amdgcn_cvt_scalef32_sr_pk32_bf6_f32:
4844 case Intrinsic::amdgcn_cvt_scalef32_sr_pk32_fp6_bf16:
4845 case Intrinsic::amdgcn_cvt_scalef32_sr_pk32_fp6_f16:
4846 case Intrinsic::amdgcn_cvt_scalef32_sr_pk32_fp6_f32:
4847 case Intrinsic::amdgcn_cvt_scalef32_sr_bf8_bf16:
4848 case Intrinsic::amdgcn_cvt_scalef32_sr_bf8_f16:
4849 case Intrinsic::amdgcn_cvt_scalef32_sr_bf8_f32:
4850 case Intrinsic::amdgcn_cvt_scalef32_sr_fp8_bf16:
4851 case Intrinsic::amdgcn_cvt_scalef32_sr_fp8_f16:
4852 case Intrinsic::amdgcn_cvt_scalef32_sr_fp8_f32:
4853 case Intrinsic::amdgcn_ashr_pk_i8_i32:
4854 case Intrinsic::amdgcn_ashr_pk_u8_i32:
4855 case Intrinsic::amdgcn_cvt_scalef32_2xpk16_fp6_f32:
4856 case Intrinsic::amdgcn_cvt_scalef32_2xpk16_bf6_f32:
4857 case Intrinsic::amdgcn_wmma_bf16_16x16x16_bf16:
4858 case Intrinsic::amdgcn_wmma_f16_16x16x16_f16:
4859 case Intrinsic::amdgcn_wmma_bf16_16x16x16_bf16_tied:
4860 case Intrinsic::amdgcn_wmma_f16_16x16x16_f16_tied:
4861 case Intrinsic::amdgcn_wmma_f32_16x16x16_bf16:
4862 case Intrinsic::amdgcn_wmma_f32_16x16x16_f16:
4863 case Intrinsic::amdgcn_wmma_i32_16x16x16_iu4:
4864 case Intrinsic::amdgcn_wmma_i32_16x16x16_iu8:
4865 case Intrinsic::amdgcn_wmma_f32_16x16x16_fp8_fp8:
4866 case Intrinsic::amdgcn_wmma_f32_16x16x16_fp8_bf8:
4867 case Intrinsic::amdgcn_wmma_f32_16x16x16_bf8_fp8:
4868 case Intrinsic::amdgcn_wmma_f32_16x16x16_bf8_bf8:
4869 case Intrinsic::amdgcn_wmma_i32_16x16x32_iu4:
4870 case Intrinsic::amdgcn_swmmac_f32_16x16x32_f16:
4871 case Intrinsic::amdgcn_swmmac_f32_16x16x32_bf16:
4872 case Intrinsic::amdgcn_swmmac_f16_16x16x32_f16:
4873 case Intrinsic::amdgcn_swmmac_bf16_16x16x32_bf16:
4874 case Intrinsic::amdgcn_swmmac_i32_16x16x32_iu8:
4875 case Intrinsic::amdgcn_swmmac_i32_16x16x32_iu4:
4876 case Intrinsic::amdgcn_swmmac_i32_16x16x64_iu4:
4877 case Intrinsic::amdgcn_swmmac_f32_16x16x32_fp8_fp8:
4878 case Intrinsic::amdgcn_swmmac_f32_16x16x32_fp8_bf8:
4879 case Intrinsic::amdgcn_swmmac_f32_16x16x32_bf8_fp8:
4880 case Intrinsic::amdgcn_swmmac_f32_16x16x32_bf8_bf8:
4881 case Intrinsic::amdgcn_wmma_f64_16x16x4_f64:
4882 case Intrinsic::amdgcn_wmma_f32_16x16x4_f32:
4883 case Intrinsic::amdgcn_wmma_f32_16x16x32_bf16:
4884 case Intrinsic::amdgcn_wmma_f32_16x16x32_f16:
4885 case Intrinsic::amdgcn_wmma_f16_16x16x32_f16:
4886 case Intrinsic::amdgcn_wmma_bf16_16x16x32_bf16:
4887 case Intrinsic::amdgcn_wmma_bf16f32_16x16x32_bf16:
4888 case Intrinsic::amdgcn_wmma_f32_16x16x64_fp8_fp8:
4889 case Intrinsic::amdgcn_wmma_f32_16x16x64_fp8_bf8:
4890 case Intrinsic::amdgcn_wmma_f32_16x16x64_bf8_fp8:
4891 case Intrinsic::amdgcn_wmma_f32_16x16x64_bf8_bf8:
4892 case Intrinsic::amdgcn_wmma_f16_16x16x64_fp8_fp8:
4893 case Intrinsic::amdgcn_wmma_f16_16x16x64_fp8_bf8:
4894 case Intrinsic::amdgcn_wmma_f16_16x16x64_bf8_fp8:
4895 case Intrinsic::amdgcn_wmma_f16_16x16x64_bf8_bf8:
4896 case Intrinsic::amdgcn_wmma_f16_16x16x128_fp8_fp8:
4897 case Intrinsic::amdgcn_wmma_f16_16x16x128_fp8_bf8:
4898 case Intrinsic::amdgcn_wmma_f16_16x16x128_bf8_fp8:
4899 case Intrinsic::amdgcn_wmma_f16_16x16x128_bf8_bf8:
4900 case Intrinsic::amdgcn_wmma_f32_16x16x128_fp8_fp8:
4901 case Intrinsic::amdgcn_wmma_f32_16x16x128_fp8_bf8:
4902 case Intrinsic::amdgcn_wmma_f32_16x16x128_bf8_fp8:
4903 case Intrinsic::amdgcn_wmma_f32_16x16x128_bf8_bf8:
4904 case Intrinsic::amdgcn_wmma_i32_16x16x64_iu8:
4905 case Intrinsic::amdgcn_wmma_f32_16x16x128_f8f6f4:
4906 case Intrinsic::amdgcn_wmma_scale_f32_16x16x128_f8f6f4:
4907 case Intrinsic::amdgcn_wmma_scale16_f32_16x16x128_f8f6f4:
4908 case Intrinsic::amdgcn_wmma_f32_32x16x128_f4:
4909 case Intrinsic::amdgcn_wmma_scale_f32_32x16x128_f4:
4910 case Intrinsic::amdgcn_wmma_scale16_f32_32x16x128_f4:
4911 case Intrinsic::amdgcn_swmmac_f16_16x16x64_f16:
4912 case Intrinsic::amdgcn_swmmac_bf16_16x16x64_bf16:
4913 case Intrinsic::amdgcn_swmmac_f32_16x16x64_bf16:
4914 case Intrinsic::amdgcn_swmmac_bf16f32_16x16x64_bf16:
4915 case Intrinsic::amdgcn_swmmac_f32_16x16x64_f16:
4916 case Intrinsic::amdgcn_swmmac_f32_16x16x128_fp8_fp8:
4917 case Intrinsic::amdgcn_swmmac_f32_16x16x128_fp8_bf8:
4918 case Intrinsic::amdgcn_swmmac_f32_16x16x128_bf8_fp8:
4919 case Intrinsic::amdgcn_swmmac_f32_16x16x128_bf8_bf8:
4920 case Intrinsic::amdgcn_swmmac_f16_16x16x128_fp8_fp8:
4921 case Intrinsic::amdgcn_swmmac_f16_16x16x128_fp8_bf8:
4922 case Intrinsic::amdgcn_swmmac_f16_16x16x128_bf8_fp8:
4923 case Intrinsic::amdgcn_swmmac_f16_16x16x128_bf8_bf8:
4924 case Intrinsic::amdgcn_swmmac_i32_16x16x128_iu8:
4925 case Intrinsic::amdgcn_perm_pk16_b4_u4:
4926 case Intrinsic::amdgcn_perm_pk16_b6_u4:
4927 case Intrinsic::amdgcn_perm_pk16_b8_u4:
4928 case Intrinsic::amdgcn_add_max_i32:
4929 case Intrinsic::amdgcn_add_max_u32:
4930 case Intrinsic::amdgcn_add_min_i32:
4931 case Intrinsic::amdgcn_add_min_u32:
4932 case Intrinsic::amdgcn_pk_add_max_i16:
4933 case Intrinsic::amdgcn_pk_add_max_u16:
4934 case Intrinsic::amdgcn_pk_add_min_i16:
4935 case Intrinsic::amdgcn_pk_add_min_u16:
4937 case Intrinsic::amdgcn_log:
4938 case Intrinsic::amdgcn_exp2:
4939 case Intrinsic::amdgcn_rcp:
4940 case Intrinsic::amdgcn_rsq:
4941 case Intrinsic::amdgcn_sqrt: {
4943 unsigned Size = Ty.getSizeInBits();
4945 if (
Subtarget.hasPseudoScalarTrans() && !Ty.isBFloat16() &&
4950 case Intrinsic::amdgcn_sbfe:
4951 case Intrinsic::amdgcn_ubfe:
4955 case Intrinsic::amdgcn_ds_swizzle:
4956 case Intrinsic::amdgcn_ds_permute:
4957 case Intrinsic::amdgcn_ds_bpermute:
4958 case Intrinsic::amdgcn_update_dpp:
4959 case Intrinsic::amdgcn_mov_dpp8:
4960 case Intrinsic::amdgcn_mov_dpp:
4961 case Intrinsic::amdgcn_strict_wwm:
4962 case Intrinsic::amdgcn_wwm:
4963 case Intrinsic::amdgcn_strict_wqm:
4964 case Intrinsic::amdgcn_wqm:
4965 case Intrinsic::amdgcn_softwqm:
4966 case Intrinsic::amdgcn_set_inactive:
4967 case Intrinsic::amdgcn_set_inactive_chain_arg:
4968 case Intrinsic::amdgcn_permlane64:
4969 case Intrinsic::amdgcn_ds_bpermute_fi_b32:
4971 case Intrinsic::amdgcn_cvt_pkrtz:
4975 case Intrinsic::amdgcn_kernarg_segment_ptr:
4976 case Intrinsic::amdgcn_s_getpc:
4977 case Intrinsic::amdgcn_groupstaticsize:
4978 case Intrinsic::amdgcn_reloc_constant:
4979 case Intrinsic::returnaddress: {
4981 OpdsMapping[0] = AMDGPU::getValueMapping(AMDGPU::SGPRRegBankID,
Size);
4984 case Intrinsic::amdgcn_wqm_vote: {
4986 OpdsMapping[0] = OpdsMapping[2]
4987 = AMDGPU::getValueMapping(AMDGPU::VCCRegBankID,
Size);
4990 case Intrinsic::amdgcn_ps_live: {
4991 OpdsMapping[0] = AMDGPU::getValueMapping(AMDGPU::VCCRegBankID, 1);
4994 case Intrinsic::amdgcn_div_scale: {
4997 OpdsMapping[0] = AMDGPU::getValueMapping(AMDGPU::VGPRRegBankID, Dst0Size);
4998 OpdsMapping[1] = AMDGPU::getValueMapping(AMDGPU::VCCRegBankID, Dst1Size);
5001 OpdsMapping[3] = AMDGPU::getValueMapping(AMDGPU::VGPRRegBankID, SrcSize);
5002 OpdsMapping[4] = AMDGPU::getValueMapping(AMDGPU::VGPRRegBankID, SrcSize);
5005 case Intrinsic::amdgcn_class: {
5006 Register Src0Reg =
MI.getOperand(2).getReg();
5007 Register Src1Reg =
MI.getOperand(3).getReg();
5011 OpdsMapping[0] = AMDGPU::getValueMapping(AMDGPU::VCCRegBankID, DstSize);
5012 OpdsMapping[2] = AMDGPU::getValueMapping(AMDGPU::VGPRRegBankID, Src0Size);
5013 OpdsMapping[3] = AMDGPU::getValueMapping(AMDGPU::VGPRRegBankID, Src1Size);
5016 case Intrinsic::amdgcn_readlane: {
5020 unsigned IdxBank =
getRegBankID(IdxReg, MRI, AMDGPU::SGPRRegBankID);
5021 OpdsMapping[3] = AMDGPU::getValueMapping(IdxBank, IdxSize);
5024 case Intrinsic::amdgcn_readfirstlane: {
5027 OpdsMapping[0] = AMDGPU::getValueMapping(AMDGPU::SGPRRegBankID, DstSize);
5028 OpdsMapping[2] = AMDGPU::getValueMapping(AMDGPU::VGPRRegBankID, SrcSize);
5031 case Intrinsic::amdgcn_writelane: {
5035 unsigned SrcBank =
getRegBankID(SrcReg, MRI, AMDGPU::SGPRRegBankID);
5038 unsigned IdxBank =
getRegBankID(IdxReg, MRI, AMDGPU::SGPRRegBankID);
5039 OpdsMapping[0] = AMDGPU::getValueMapping(AMDGPU::VGPRRegBankID, DstSize);
5043 OpdsMapping[2] = AMDGPU::getValueMapping(SrcBank, SrcSize);
5044 OpdsMapping[3] = AMDGPU::getValueMapping(IdxBank, IdxSize);
5045 OpdsMapping[4] = AMDGPU::getValueMapping(AMDGPU::VGPRRegBankID, SrcSize);
5048 case Intrinsic::amdgcn_if_break: {
5050 OpdsMapping[0] = AMDGPU::getValueMapping(AMDGPU::SGPRRegBankID,
Size);
5051 OpdsMapping[2] = AMDGPU::getValueMapping(AMDGPU::VCCRegBankID, 1);
5052 OpdsMapping[3] = AMDGPU::getValueMapping(AMDGPU::SGPRRegBankID,
Size);
5055 case Intrinsic::amdgcn_permlane16:
5056 case Intrinsic::amdgcn_permlanex16: {
5058 OpdsMapping[0] = AMDGPU::getValueMapping(AMDGPU::VGPRRegBankID,
Size);
5059 OpdsMapping[2] = AMDGPU::getValueMapping(AMDGPU::VGPRRegBankID,
Size);
5060 OpdsMapping[3] = AMDGPU::getValueMapping(AMDGPU::VGPRRegBankID,
Size);
5065 case Intrinsic::amdgcn_permlane_bcast:
5066 case Intrinsic::amdgcn_permlane_up:
5067 case Intrinsic::amdgcn_permlane_down:
5068 case Intrinsic::amdgcn_permlane_xor: {
5070 OpdsMapping[0] = AMDGPU::getValueMapping(AMDGPU::VGPRRegBankID,
Size);
5071 OpdsMapping[2] = AMDGPU::getValueMapping(AMDGPU::VGPRRegBankID,
Size);
5076 case Intrinsic::amdgcn_permlane_idx_gen: {
5078 OpdsMapping[0] = AMDGPU::getValueMapping(AMDGPU::VGPRRegBankID,
Size);
5079 OpdsMapping[2] = AMDGPU::getValueMapping(AMDGPU::VGPRRegBankID,
Size);
5083 case Intrinsic::amdgcn_permlane16_var:
5084 case Intrinsic::amdgcn_permlanex16_var: {
5086 OpdsMapping[0] = AMDGPU::getValueMapping(AMDGPU::VGPRRegBankID,
Size);
5087 OpdsMapping[2] = AMDGPU::getValueMapping(AMDGPU::VGPRRegBankID,
Size);
5088 OpdsMapping[3] = AMDGPU::getValueMapping(AMDGPU::VGPRRegBankID,
Size);
5089 OpdsMapping[4] = AMDGPU::getValueMapping(AMDGPU::VGPRRegBankID,
Size);
5092 case Intrinsic::amdgcn_mfma_f32_4x4x1f32:
5093 case Intrinsic::amdgcn_mfma_f32_4x4x4f16:
5094 case Intrinsic::amdgcn_mfma_i32_4x4x4i8:
5095 case Intrinsic::amdgcn_mfma_f32_4x4x2bf16:
5096 case Intrinsic::amdgcn_mfma_f32_16x16x1f32:
5097 case Intrinsic::amdgcn_mfma_f32_16x16x4f32:
5098 case Intrinsic::amdgcn_mfma_f32_16x16x4f16:
5099 case Intrinsic::amdgcn_mfma_f32_16x16x16f16:
5100 case Intrinsic::amdgcn_mfma_i32_16x16x4i8:
5101 case Intrinsic::amdgcn_mfma_i32_16x16x16i8:
5102 case Intrinsic::amdgcn_mfma_f32_16x16x2bf16:
5103 case Intrinsic::amdgcn_mfma_f32_16x16x8bf16:
5104 case Intrinsic::amdgcn_mfma_f32_32x32x1f32:
5105 case Intrinsic::amdgcn_mfma_f32_32x32x2f32:
5106 case Intrinsic::amdgcn_mfma_f32_32x32x4f16:
5107 case Intrinsic::amdgcn_mfma_f32_32x32x8f16:
5108 case Intrinsic::amdgcn_mfma_i32_32x32x4i8:
5109 case Intrinsic::amdgcn_mfma_i32_32x32x8i8:
5110 case Intrinsic::amdgcn_mfma_f32_32x32x2bf16:
5111 case Intrinsic::amdgcn_mfma_f32_32x32x4bf16:
5112 case Intrinsic::amdgcn_mfma_f32_32x32x4bf16_1k:
5113 case Intrinsic::amdgcn_mfma_f32_16x16x4bf16_1k:
5114 case Intrinsic::amdgcn_mfma_f32_4x4x4bf16_1k:
5115 case Intrinsic::amdgcn_mfma_f32_32x32x8bf16_1k:
5116 case Intrinsic::amdgcn_mfma_f32_16x16x16bf16_1k:
5117 case Intrinsic::amdgcn_mfma_f64_16x16x4f64:
5118 case Intrinsic::amdgcn_mfma_f64_4x4x4f64:
5119 case Intrinsic::amdgcn_mfma_i32_16x16x32_i8:
5120 case Intrinsic::amdgcn_mfma_i32_32x32x16_i8:
5121 case Intrinsic::amdgcn_mfma_f32_16x16x8_xf32:
5122 case Intrinsic::amdgcn_mfma_f32_32x32x4_xf32:
5123 case Intrinsic::amdgcn_mfma_f32_16x16x32_bf8_bf8:
5124 case Intrinsic::amdgcn_mfma_f32_16x16x32_bf8_fp8:
5125 case Intrinsic::amdgcn_mfma_f32_16x16x32_fp8_bf8:
5126 case Intrinsic::amdgcn_mfma_f32_16x16x32_fp8_fp8:
5127 case Intrinsic::amdgcn_mfma_f32_32x32x16_bf8_bf8:
5128 case Intrinsic::amdgcn_mfma_f32_32x32x16_bf8_fp8:
5129 case Intrinsic::amdgcn_mfma_f32_32x32x16_fp8_bf8:
5130 case Intrinsic::amdgcn_mfma_f32_32x32x16_fp8_fp8:
5131 case Intrinsic::amdgcn_mfma_f32_16x16x32_f16:
5132 case Intrinsic::amdgcn_mfma_f32_32x32x16_f16:
5133 case Intrinsic::amdgcn_mfma_i32_16x16x64_i8:
5134 case Intrinsic::amdgcn_mfma_i32_32x32x32_i8:
5135 case Intrinsic::amdgcn_mfma_f32_16x16x32_bf16: {
5137 unsigned MinNumRegsRequired = DstSize / 32;
5147 bool UseAGPRForm = !
Subtarget.hasGFX90AInsts() ||
5148 Info->selectAGPRFormMFMA(MinNumRegsRequired);
5160 case Intrinsic::amdgcn_mfma_scale_f32_16x16x128_f8f6f4:
5161 case Intrinsic::amdgcn_mfma_scale_f32_32x32x64_f8f6f4: {
5163 unsigned MinNumRegsRequired = DstSize / 32;
5182 case Intrinsic::amdgcn_smfmac_f32_16x16x32_f16:
5183 case Intrinsic::amdgcn_smfmac_f32_32x32x16_f16:
5184 case Intrinsic::amdgcn_smfmac_f32_16x16x32_bf16:
5185 case Intrinsic::amdgcn_smfmac_f32_32x32x16_bf16:
5186 case Intrinsic::amdgcn_smfmac_i32_16x16x64_i8:
5187 case Intrinsic::amdgcn_smfmac_i32_32x32x32_i8:
5188 case Intrinsic::amdgcn_smfmac_f32_16x16x64_bf8_bf8:
5189 case Intrinsic::amdgcn_smfmac_f32_16x16x64_bf8_fp8:
5190 case Intrinsic::amdgcn_smfmac_f32_16x16x64_fp8_bf8:
5191 case Intrinsic::amdgcn_smfmac_f32_16x16x64_fp8_fp8:
5192 case Intrinsic::amdgcn_smfmac_f32_32x32x32_bf8_bf8:
5193 case Intrinsic::amdgcn_smfmac_f32_32x32x32_bf8_fp8:
5194 case Intrinsic::amdgcn_smfmac_f32_32x32x32_fp8_bf8:
5195 case Intrinsic::amdgcn_smfmac_f32_32x32x32_fp8_fp8:
5196 case Intrinsic::amdgcn_smfmac_f32_16x16x64_f16:
5197 case Intrinsic::amdgcn_smfmac_f32_32x32x32_f16:
5198 case Intrinsic::amdgcn_smfmac_f32_16x16x64_bf16:
5199 case Intrinsic::amdgcn_smfmac_f32_32x32x32_bf16:
5200 case Intrinsic::amdgcn_smfmac_i32_16x16x128_i8:
5201 case Intrinsic::amdgcn_smfmac_i32_32x32x64_i8:
5202 case Intrinsic::amdgcn_smfmac_f32_16x16x128_bf8_bf8:
5203 case Intrinsic::amdgcn_smfmac_f32_16x16x128_bf8_fp8:
5204 case Intrinsic::amdgcn_smfmac_f32_16x16x128_fp8_bf8:
5205 case Intrinsic::amdgcn_smfmac_f32_16x16x128_fp8_fp8:
5206 case Intrinsic::amdgcn_smfmac_f32_32x32x64_bf8_bf8:
5207 case Intrinsic::amdgcn_smfmac_f32_32x32x64_bf8_fp8:
5208 case Intrinsic::amdgcn_smfmac_f32_32x32x64_fp8_bf8:
5209 case Intrinsic::amdgcn_smfmac_f32_32x32x64_fp8_fp8: {
5212 unsigned MinNumRegsRequired = DstSize / 32;
5228 case Intrinsic::amdgcn_interp_p1:
5229 case Intrinsic::amdgcn_interp_p2:
5230 case Intrinsic::amdgcn_interp_mov:
5231 case Intrinsic::amdgcn_interp_p1_f16:
5232 case Intrinsic::amdgcn_interp_p2_f16:
5233 case Intrinsic::amdgcn_lds_param_load: {
5234 const int M0Idx =
MI.getNumOperands() - 1;
5235 Register M0Reg =
MI.getOperand(M0Idx).getReg();
5236 unsigned M0Bank =
getRegBankID(M0Reg, MRI, AMDGPU::SGPRRegBankID);
5239 OpdsMapping[0] = AMDGPU::getValueMapping(AMDGPU::VGPRRegBankID, DstSize);
5240 for (
int I = 2;
I != M0Idx &&
MI.getOperand(
I).
isReg(); ++
I)
5241 OpdsMapping[
I] = AMDGPU::getValueMapping(AMDGPU::VGPRRegBankID, 32);
5245 OpdsMapping[M0Idx] = AMDGPU::getValueMapping(M0Bank, 32);
5248 case Intrinsic::amdgcn_interp_inreg_p10:
5249 case Intrinsic::amdgcn_interp_inreg_p2:
5250 case Intrinsic::amdgcn_interp_inreg_p10_f16:
5251 case Intrinsic::amdgcn_interp_inreg_p2_f16:
5252 case Intrinsic::amdgcn_interp_p10_rtz_f16:
5253 case Intrinsic::amdgcn_interp_p2_rtz_f16: {
5255 OpdsMapping[0] = AMDGPU::getValueMapping(AMDGPU::VGPRRegBankID, DstSize);
5256 OpdsMapping[2] = AMDGPU::getValueMapping(AMDGPU::VGPRRegBankID, 32);
5257 OpdsMapping[3] = AMDGPU::getValueMapping(AMDGPU::VGPRRegBankID, 32);
5258 OpdsMapping[4] = AMDGPU::getValueMapping(AMDGPU::VGPRRegBankID, 32);
5261 case Intrinsic::amdgcn_permlane16_swap:
5262 case Intrinsic::amdgcn_permlane32_swap: {
5264 OpdsMapping[0] = OpdsMapping[1] = OpdsMapping[3] = OpdsMapping[4] =
5265 AMDGPU::getValueMapping(AMDGPU::VGPRRegBankID, DstSize);
5268 case Intrinsic::amdgcn_ballot: {
5271 OpdsMapping[0] = AMDGPU::getValueMapping(AMDGPU::SGPRRegBankID, DstSize);
5272 OpdsMapping[2] = AMDGPU::getValueMapping(AMDGPU::VCCRegBankID, SrcSize);
5275 case Intrinsic::amdgcn_inverse_ballot: {
5277 Register MaskReg =
MI.getOperand(2).getReg();
5279 unsigned MaskBank =
getRegBankID(MaskReg, MRI, AMDGPU::SGPRRegBankID);
5280 OpdsMapping[0] = AMDGPU::getValueMapping(AMDGPU::VCCRegBankID, 1);
5281 OpdsMapping[2] = AMDGPU::getValueMapping(MaskBank, MaskSize);
5284 case Intrinsic::amdgcn_bitop3: {
5286 OpdsMapping[0] = AMDGPU::getValueMapping(AMDGPU::VGPRRegBankID,
Size);
5287 OpdsMapping[2] = AMDGPU::getValueMapping(AMDGPU::VGPRRegBankID,
Size);
5288 OpdsMapping[3] = AMDGPU::getValueMapping(AMDGPU::VGPRRegBankID,
Size);
5289 OpdsMapping[4] = AMDGPU::getValueMapping(AMDGPU::VGPRRegBankID,
Size);
5292 case Intrinsic::amdgcn_s_quadmask:
5293 case Intrinsic::amdgcn_s_wqm: {
5294 Register MaskReg =
MI.getOperand(2).getReg();
5296 unsigned MaskBank =
getRegBankID(MaskReg, MRI, AMDGPU::SGPRRegBankID);
5297 OpdsMapping[0] = AMDGPU::getValueMapping(AMDGPU::SGPRRegBankID, MaskSize);
5298 OpdsMapping[2] = AMDGPU::getValueMapping(MaskBank, MaskSize);
5301 case Intrinsic::amdgcn_wave_reduce_add:
5302 case Intrinsic::amdgcn_wave_reduce_fadd:
5303 case Intrinsic::amdgcn_wave_reduce_sub:
5304 case Intrinsic::amdgcn_wave_reduce_fsub:
5305 case Intrinsic::amdgcn_wave_reduce_min:
5306 case Intrinsic::amdgcn_wave_reduce_umin:
5307 case Intrinsic::amdgcn_wave_reduce_fmin:
5308 case Intrinsic::amdgcn_wave_reduce_max:
5309 case Intrinsic::amdgcn_wave_reduce_umax:
5310 case Intrinsic::amdgcn_wave_reduce_fmax:
5311 case Intrinsic::amdgcn_wave_reduce_and:
5312 case Intrinsic::amdgcn_wave_reduce_or:
5313 case Intrinsic::amdgcn_wave_reduce_xor: {
5315 OpdsMapping[0] = AMDGPU::getValueMapping(AMDGPU::SGPRRegBankID, DstSize);
5319 OpdsMapping[2] = AMDGPU::getValueMapping(regBankID, OpSize);
5322 case Intrinsic::amdgcn_s_bitreplicate: {
5323 Register MaskReg =
MI.getOperand(2).getReg();
5324 unsigned MaskBank =
getRegBankID(MaskReg, MRI, AMDGPU::SGPRRegBankID);
5325 OpdsMapping[0] = AMDGPU::getValueMapping(AMDGPU::SGPRRegBankID, 64);
5326 OpdsMapping[2] = AMDGPU::getValueMapping(MaskBank, 32);
5329 case Intrinsic::amdgcn_wave_shuffle: {
5331 OpdsMapping[0] = AMDGPU::getValueMapping(AMDGPU::VGPRRegBankID, OpSize);
5332 OpdsMapping[2] = AMDGPU::getValueMapping(AMDGPU::VGPRRegBankID, OpSize);
5333 OpdsMapping[3] = AMDGPU::getValueMapping(AMDGPU::VGPRRegBankID, OpSize);
5339 case AMDGPU::G_AMDGPU_INTRIN_IMAGE_LOAD:
5340 case AMDGPU::G_AMDGPU_INTRIN_IMAGE_LOAD_D16:
5341 case AMDGPU::G_AMDGPU_INTRIN_IMAGE_LOAD_NORET:
5342 case AMDGPU::G_AMDGPU_INTRIN_IMAGE_STORE:
5343 case AMDGPU::G_AMDGPU_INTRIN_IMAGE_STORE_D16: {
5346 assert(RSrcIntrin &&
"missing RsrcIntrinsic for image intrinsic");
5353 case AMDGPU::G_AMDGPU_BVH_INTERSECT_RAY:
5354 case AMDGPU::G_AMDGPU_BVH8_INTERSECT_RAY:
5355 case AMDGPU::G_AMDGPU_BVH_DUAL_INTERSECT_RAY: {
5357 MI.getOpcode() == AMDGPU::G_AMDGPU_BVH_DUAL_INTERSECT_RAY ||
5358 MI.getOpcode() == AMDGPU::G_AMDGPU_BVH8_INTERSECT_RAY;
5359 unsigned NumMods = IsDualOrBVH8 ? 0 : 1;
5360 unsigned LastRegOpIdx =
MI.getNumExplicitOperands() - 1 - NumMods;
5362 OpdsMapping[0] = AMDGPU::getValueMapping(AMDGPU::VGPRRegBankID, DstSize);
5364 OpdsMapping[1] = AMDGPU::getValueMapping(
5365 AMDGPU::VGPRRegBankID,
5367 OpdsMapping[2] = AMDGPU::getValueMapping(
5368 AMDGPU::VGPRRegBankID,
5371 OpdsMapping[LastRegOpIdx] =
5373 if (LastRegOpIdx == 3) {
5378 OpdsMapping[2] = AMDGPU::getValueMapping(AMDGPU::VGPRRegBankID,
Size);
5381 unsigned FirstSrcOpIdx = IsDualOrBVH8 ? 4 : 2;
5382 for (
unsigned I = FirstSrcOpIdx;
I < LastRegOpIdx; ++
I) {
5384 OpdsMapping[
I] = AMDGPU::getValueMapping(AMDGPU::VGPRRegBankID,
Size);
5389 case AMDGPU::G_INTRINSIC_W_SIDE_EFFECTS:
5390 case AMDGPU::G_INTRINSIC_CONVERGENT_W_SIDE_EFFECTS: {
5393 case Intrinsic::amdgcn_s_getreg:
5394 case Intrinsic::amdgcn_s_memtime:
5395 case Intrinsic::amdgcn_s_memrealtime:
5396 case Intrinsic::amdgcn_s_get_waveid_in_workgroup:
5397 case Intrinsic::amdgcn_s_sendmsg_rtn: {
5399 OpdsMapping[0] = AMDGPU::getValueMapping(AMDGPU::SGPRRegBankID,
Size);
5402 case Intrinsic::amdgcn_global_atomic_fmin_num:
5403 case Intrinsic::amdgcn_global_atomic_fmax_num:
5404 case Intrinsic::amdgcn_flat_atomic_fmin_num:
5405 case Intrinsic::amdgcn_flat_atomic_fmax_num:
5406 case Intrinsic::amdgcn_global_atomic_ordered_add_b64:
5407 case Intrinsic::amdgcn_global_load_tr_b64:
5408 case Intrinsic::amdgcn_global_load_tr_b128:
5409 case Intrinsic::amdgcn_global_load_tr4_b64:
5410 case Intrinsic::amdgcn_global_load_tr6_b96:
5411 case Intrinsic::amdgcn_ds_load_tr8_b64:
5412 case Intrinsic::amdgcn_ds_load_tr16_b128:
5413 case Intrinsic::amdgcn_ds_load_tr4_b64:
5414 case Intrinsic::amdgcn_ds_load_tr6_b96:
5415 case Intrinsic::amdgcn_ds_read_tr4_b64:
5416 case Intrinsic::amdgcn_ds_read_tr6_b96:
5417 case Intrinsic::amdgcn_ds_read_tr8_b64:
5418 case Intrinsic::amdgcn_ds_read_tr16_b64:
5419 case Intrinsic::amdgcn_ds_atomic_async_barrier_arrive_b64:
5420 case Intrinsic::amdgcn_ds_atomic_barrier_arrive_rtn_b64:
5422 case Intrinsic::amdgcn_ds_ordered_add:
5423 case Intrinsic::amdgcn_ds_ordered_swap: {
5425 OpdsMapping[0] = AMDGPU::getValueMapping(AMDGPU::VGPRRegBankID, DstSize);
5427 AMDGPU::SGPRRegBankID);
5428 OpdsMapping[2] = AMDGPU::getValueMapping(M0Bank, 32);
5429 OpdsMapping[3] = AMDGPU::getValueMapping(AMDGPU::VGPRRegBankID, 32);
5432 case Intrinsic::amdgcn_ds_append:
5433 case Intrinsic::amdgcn_ds_consume: {
5435 OpdsMapping[0] = AMDGPU::getValueMapping(AMDGPU::VGPRRegBankID, DstSize);
5439 case Intrinsic::amdgcn_exp_compr:
5440 OpdsMapping[3] = AMDGPU::getValueMapping(AMDGPU::VGPRRegBankID, 32);
5441 OpdsMapping[4] = AMDGPU::getValueMapping(AMDGPU::VGPRRegBankID, 32);
5443 case Intrinsic::amdgcn_exp:
5445 OpdsMapping[3] = AMDGPU::getValueMapping(AMDGPU::VGPRRegBankID, 32);
5446 OpdsMapping[4] = AMDGPU::getValueMapping(AMDGPU::VGPRRegBankID, 32);
5447 OpdsMapping[5] = AMDGPU::getValueMapping(AMDGPU::VGPRRegBankID, 32);
5448 OpdsMapping[6] = AMDGPU::getValueMapping(AMDGPU::VGPRRegBankID, 32);
5450 case Intrinsic::amdgcn_exp_row:
5451 OpdsMapping[3] = AMDGPU::getValueMapping(AMDGPU::VGPRRegBankID, 32);
5452 OpdsMapping[4] = AMDGPU::getValueMapping(AMDGPU::VGPRRegBankID, 32);
5453 OpdsMapping[5] = AMDGPU::getValueMapping(AMDGPU::VGPRRegBankID, 32);
5454 OpdsMapping[6] = AMDGPU::getValueMapping(AMDGPU::VGPRRegBankID, 32);
5457 case Intrinsic::amdgcn_s_alloc_vgpr:
5458 OpdsMapping[0] = AMDGPU::getValueMapping(AMDGPU::SGPRRegBankID, 1);
5459 OpdsMapping[2] = AMDGPU::getValueMapping(AMDGPU::SGPRRegBankID, 32);
5461 case Intrinsic::amdgcn_s_sendmsg:
5462 case Intrinsic::amdgcn_s_sendmsghalt: {
5465 AMDGPU::SGPRRegBankID);
5466 OpdsMapping[2] = AMDGPU::getValueMapping(Bank, 32);
5469 case Intrinsic::amdgcn_s_setreg: {
5472 AMDGPU::SGPRRegBankID);
5473 OpdsMapping[2] = AMDGPU::getValueMapping(Bank, 32);
5476 case Intrinsic::amdgcn_s_ttracedata: {
5479 getRegBankID(
MI.getOperand(1).getReg(), MRI, AMDGPU::SGPRRegBankID);
5480 OpdsMapping[1] = AMDGPU::getValueMapping(Bank, 32);
5483 case Intrinsic::amdgcn_end_cf: {
5485 OpdsMapping[1] = AMDGPU::getValueMapping(AMDGPU::SGPRRegBankID,
Size);
5488 case Intrinsic::amdgcn_else: {
5490 OpdsMapping[0] = AMDGPU::getValueMapping(AMDGPU::VCCRegBankID, 1);
5491 OpdsMapping[1] = AMDGPU::getValueMapping(AMDGPU::SGPRRegBankID, WaveSize);
5492 OpdsMapping[3] = AMDGPU::getValueMapping(AMDGPU::SGPRRegBankID, WaveSize);
5495 case Intrinsic::amdgcn_init_whole_wave:
5496 case Intrinsic::amdgcn_live_mask: {
5497 OpdsMapping[0] = AMDGPU::getValueMapping(AMDGPU::VCCRegBankID, 1);
5500 case Intrinsic::amdgcn_wqm_demote:
5501 case Intrinsic::amdgcn_kill: {
5502 OpdsMapping[1] = AMDGPU::getValueMapping(AMDGPU::VCCRegBankID, 1);
5505 case Intrinsic::amdgcn_ptr_s_buffer_load: {
5511 case Intrinsic::amdgcn_raw_buffer_load:
5512 case Intrinsic::amdgcn_raw_ptr_buffer_load:
5513 case Intrinsic::amdgcn_raw_atomic_buffer_load:
5514 case Intrinsic::amdgcn_raw_ptr_atomic_buffer_load:
5515 case Intrinsic::amdgcn_raw_tbuffer_load:
5516 case Intrinsic::amdgcn_raw_ptr_tbuffer_load: {
5525 case Intrinsic::amdgcn_raw_buffer_load_lds:
5526 case Intrinsic::amdgcn_raw_buffer_load_async_lds:
5527 case Intrinsic::amdgcn_raw_ptr_buffer_load_lds:
5528 case Intrinsic::amdgcn_raw_ptr_buffer_load_async_lds: {
5535 case Intrinsic::amdgcn_raw_buffer_store:
5536 case Intrinsic::amdgcn_raw_ptr_buffer_store:
5537 case Intrinsic::amdgcn_raw_buffer_store_format:
5538 case Intrinsic::amdgcn_raw_ptr_buffer_store_format:
5539 case Intrinsic::amdgcn_raw_tbuffer_store:
5540 case Intrinsic::amdgcn_raw_ptr_tbuffer_store: {
5547 case Intrinsic::amdgcn_struct_buffer_load:
5548 case Intrinsic::amdgcn_struct_ptr_buffer_load:
5549 case Intrinsic::amdgcn_struct_tbuffer_load:
5550 case Intrinsic::amdgcn_struct_ptr_tbuffer_load:
5551 case Intrinsic::amdgcn_struct_atomic_buffer_load:
5552 case Intrinsic::amdgcn_struct_ptr_atomic_buffer_load: {
5560 case Intrinsic::amdgcn_struct_buffer_load_lds:
5561 case Intrinsic::amdgcn_struct_buffer_load_async_lds:
5562 case Intrinsic::amdgcn_struct_ptr_buffer_load_lds:
5563 case Intrinsic::amdgcn_struct_ptr_buffer_load_async_lds: {
5571 case Intrinsic::amdgcn_struct_buffer_store:
5572 case Intrinsic::amdgcn_struct_ptr_buffer_store:
5573 case Intrinsic::amdgcn_struct_tbuffer_store:
5574 case Intrinsic::amdgcn_struct_ptr_tbuffer_store: {
5582 case Intrinsic::amdgcn_init_exec_from_input: {
5584 OpdsMapping[1] = AMDGPU::getValueMapping(AMDGPU::SGPRRegBankID,
Size);
5587 case Intrinsic::amdgcn_ds_gws_init:
5588 case Intrinsic::amdgcn_ds_gws_barrier:
5589 case Intrinsic::amdgcn_ds_gws_sema_br: {
5590 OpdsMapping[1] = AMDGPU::getValueMapping(AMDGPU::VGPRRegBankID, 32);
5594 AMDGPU::SGPRRegBankID);
5595 OpdsMapping[2] = AMDGPU::getValueMapping(Bank, 32);
5598 case Intrinsic::amdgcn_ds_gws_sema_v:
5599 case Intrinsic::amdgcn_ds_gws_sema_p:
5600 case Intrinsic::amdgcn_ds_gws_sema_release_all: {
5603 AMDGPU::SGPRRegBankID);
5604 OpdsMapping[1] = AMDGPU::getValueMapping(Bank, 32);
5607 case Intrinsic::amdgcn_cluster_load_b32:
5608 case Intrinsic::amdgcn_cluster_load_b64:
5609 case Intrinsic::amdgcn_cluster_load_b128: {
5613 getRegBankID(
MI.getOperand(4).getReg(), MRI, AMDGPU::SGPRRegBankID);
5614 OpdsMapping[4] = AMDGPU::getValueMapping(M0Bank, 32);
5617 case Intrinsic::amdgcn_cluster_load_async_to_lds_b8:
5618 case Intrinsic::amdgcn_cluster_load_async_to_lds_b32:
5619 case Intrinsic::amdgcn_cluster_load_async_to_lds_b64:
5620 case Intrinsic::amdgcn_cluster_load_async_to_lds_b128: {
5625 getRegBankID(
MI.getOperand(5).getReg(), MRI, AMDGPU::SGPRRegBankID);
5626 OpdsMapping[5] = AMDGPU::getValueMapping(M0Bank, 32);
5629 case Intrinsic::amdgcn_global_store_async_from_lds_b8:
5630 case Intrinsic::amdgcn_global_store_async_from_lds_b32:
5631 case Intrinsic::amdgcn_global_store_async_from_lds_b64:
5632 case Intrinsic::amdgcn_global_store_async_from_lds_b128:
5633 case Intrinsic::amdgcn_global_load_async_to_lds_b8:
5634 case Intrinsic::amdgcn_global_load_async_to_lds_b32:
5635 case Intrinsic::amdgcn_global_load_async_to_lds_b64:
5636 case Intrinsic::amdgcn_global_load_async_to_lds_b128: {
5642 case Intrinsic::amdgcn_load_to_lds:
5643 case Intrinsic::amdgcn_load_async_to_lds:
5644 case Intrinsic::amdgcn_global_load_lds:
5645 case Intrinsic::amdgcn_global_load_async_lds: {
5651 case Intrinsic::amdgcn_lds_direct_load: {
5652 const int M0Idx =
MI.getNumOperands() - 1;
5653 Register M0Reg =
MI.getOperand(M0Idx).getReg();
5654 unsigned M0Bank =
getRegBankID(M0Reg, MRI, AMDGPU::SGPRRegBankID);
5657 OpdsMapping[0] = AMDGPU::getValueMapping(AMDGPU::VGPRRegBankID, DstSize);
5658 for (
int I = 2;
I != M0Idx &&
MI.getOperand(
I).
isReg(); ++
I)
5659 OpdsMapping[
I] = AMDGPU::getValueMapping(AMDGPU::VGPRRegBankID, 32);
5663 OpdsMapping[M0Idx] = AMDGPU::getValueMapping(M0Bank, 32);
5666 case Intrinsic::amdgcn_ds_add_gs_reg_rtn:
5667 case Intrinsic::amdgcn_ds_sub_gs_reg_rtn:
5671 case Intrinsic::amdgcn_ds_bvh_stack_rtn:
5672 case Intrinsic::amdgcn_ds_bvh_stack_push4_pop1_rtn:
5673 case Intrinsic::amdgcn_ds_bvh_stack_push8_pop1_rtn:
5674 case Intrinsic::amdgcn_ds_bvh_stack_push8_pop2_rtn: {
5687 case Intrinsic::amdgcn_s_sleep_var:
5690 case Intrinsic::amdgcn_s_barrier_join:
5691 case Intrinsic::amdgcn_s_wakeup_barrier:
5694 case Intrinsic::amdgcn_s_barrier_init:
5695 case Intrinsic::amdgcn_s_barrier_signal_var:
5699 case Intrinsic::amdgcn_s_barrier_signal_isfirst: {
5700 const unsigned ResultSize = 1;
5702 AMDGPU::getValueMapping(AMDGPU::SGPRRegBankID, ResultSize);
5705 case Intrinsic::amdgcn_s_get_barrier_state:
5706 case Intrinsic::amdgcn_s_get_named_barrier_state: {
5711 case Intrinsic::amdgcn_pops_exiting_wave_id:
5713 case Intrinsic::amdgcn_tensor_load_to_lds:
5714 case Intrinsic::amdgcn_tensor_store_from_lds: {
5717 for (
unsigned I = 1;
I <
MI.getNumOperands(); ++
I) {
5718 if (
MI.getOperand(
I).isReg()) {
5722 OpdsMapping[
I] = AMDGPU::getValueMapping(OpBank,
Size);
5727 case Intrinsic::amdgcn_s_prefetch_data:
5728 case Intrinsic::amdgcn_s_prefetch_inst: {
5733 case Intrinsic::amdgcn_flat_prefetch:
5734 case Intrinsic::amdgcn_global_prefetch:
5741 case AMDGPU::G_SELECT: {
5744 AMDGPU::SGPRRegBankID);
5746 AMDGPU::SGPRRegBankID);
5747 bool SGPRSrcs = Op2Bank == AMDGPU::SGPRRegBankID &&
5748 Op3Bank == AMDGPU::SGPRRegBankID;
5750 unsigned CondBankDefault = SGPRSrcs ?
5751 AMDGPU::SGPRRegBankID : AMDGPU::VCCRegBankID;
5754 if (CondBank == AMDGPU::SGPRRegBankID)
5755 CondBank = SGPRSrcs ? AMDGPU::SGPRRegBankID : AMDGPU::VCCRegBankID;
5756 else if (CondBank == AMDGPU::VGPRRegBankID)
5757 CondBank = AMDGPU::VCCRegBankID;
5759 unsigned Bank = SGPRSrcs && CondBank == AMDGPU::SGPRRegBankID ?
5760 AMDGPU::SGPRRegBankID : AMDGPU::VGPRRegBankID;
5762 assert(CondBank == AMDGPU::VCCRegBankID || CondBank == AMDGPU::SGPRRegBankID);
5766 OpdsMapping[0] = AMDGPU::getValueMappingSGPR64Only(Bank,
Size);
5767 OpdsMapping[1] = AMDGPU::getValueMapping(CondBank, 1);
5768 OpdsMapping[2] = AMDGPU::getValueMappingSGPR64Only(Bank,
Size);
5769 OpdsMapping[3] = AMDGPU::getValueMappingSGPR64Only(Bank,
Size);
5771 OpdsMapping[0] = AMDGPU::getValueMapping(Bank,
Size);
5772 OpdsMapping[1] = AMDGPU::getValueMapping(CondBank, 1);
5773 OpdsMapping[2] = AMDGPU::getValueMapping(Bank,
Size);
5774 OpdsMapping[3] = AMDGPU::getValueMapping(Bank,
Size);
5780 case AMDGPU::G_SI_CALL: {
5781 OpdsMapping[0] = AMDGPU::getValueMapping(AMDGPU::SGPRRegBankID, 64);
5787 for (
unsigned I = 4;
I <
MI.getNumOperands(); ++
I) {
5788 if (
MI.getOperand(
I).isReg()) {
5792 OpdsMapping[
I] = AMDGPU::getValueMapping(OpBank,
Size);
5797 case AMDGPU::G_LOAD:
5798 case AMDGPU::G_ZEXTLOAD:
5799 case AMDGPU::G_SEXTLOAD:
5802 case AMDGPU::G_ATOMICRMW_XCHG:
5803 case AMDGPU::G_ATOMICRMW_ADD:
5804 case AMDGPU::G_ATOMICRMW_SUB:
5805 case AMDGPU::G_ATOMICRMW_AND:
5806 case AMDGPU::G_ATOMICRMW_OR:
5807 case AMDGPU::G_ATOMICRMW_XOR:
5808 case AMDGPU::G_ATOMICRMW_MAX:
5809 case AMDGPU::G_ATOMICRMW_MIN:
5810 case AMDGPU::G_ATOMICRMW_UMAX:
5811 case AMDGPU::G_ATOMICRMW_UMIN:
5812 case AMDGPU::G_ATOMICRMW_FADD:
5813 case AMDGPU::G_ATOMICRMW_FMIN:
5814 case AMDGPU::G_ATOMICRMW_FMAX:
5815 case AMDGPU::G_ATOMICRMW_UINC_WRAP:
5816 case AMDGPU::G_ATOMICRMW_UDEC_WRAP:
5817 case AMDGPU::G_ATOMICRMW_USUB_COND:
5818 case AMDGPU::G_ATOMICRMW_USUB_SAT:
5819 case AMDGPU::G_AMDGPU_ATOMIC_CMPXCHG: {
5825 case AMDGPU::G_ATOMIC_CMPXCHG: {
5832 case AMDGPU::G_BRCOND: {
5834 AMDGPU::SGPRRegBankID);
5836 if (Bank != AMDGPU::SGPRRegBankID)
5837 Bank = AMDGPU::VCCRegBankID;
5839 OpdsMapping[0] = AMDGPU::getValueMapping(Bank, 1);
5842 case AMDGPU::G_INTRINSIC_FPTRUNC_ROUND:
5844 case AMDGPU::G_PREFETCH:
5847 case AMDGPU::G_AMDGPU_WHOLE_WAVE_FUNC_SETUP:
5848 case AMDGPU::G_AMDGPU_WHOLE_WAVE_FUNC_RETURN:
5849 OpdsMapping[0] = AMDGPU::getValueMapping(AMDGPU::VCCRegBankID, 1);
5851 case AMDGPU::G_AMDGPU_FLAT_LOAD_MONITOR:
5852 case AMDGPU::G_AMDGPU_GLOBAL_LOAD_MONITOR: {
5855 OpdsMapping[0] = AMDGPU::getValueMapping(AMDGPU::VGPRRegBankID,
Size);
5856 OpdsMapping[1] = AMDGPU::getValueMapping(AMDGPU::VGPRRegBankID, PtrSize);
5863 MI.getNumOperands());