507 : ST(&_ST), MRI(&_MRI) {
509 addRulesForGOpcs({G_ADD, G_SUB},
Standard)
519 addRulesForGOpcs({G_UADDO, G_USUBO},
Standard)
523 addRulesForGOpcs({G_UADDE, G_USUBE, G_SADDE, G_SSUBE},
Standard)
527 addRulesForGOpcs({G_UADDSAT, G_SADDSAT, G_USUBSAT, G_SSUBSAT},
Standard)
535 bool HasVecMulU64 = ST->hasVectorMulU64();
547 bool hasMulHi = ST->hasScalarMulHiInsts();
548 addRulesForGOpcs({G_UMULH, G_SMULH},
Standard)
553 addRulesForGOpcs({G_AMDGPU_MAD_U64_U32},
Standard)
557 bool HasScalarSMulU64 = ST->hasScalarSMulU64();
558 addRulesForGOpcs({G_AMDGPU_S_MUL_U64_U32, G_AMDGPU_S_MUL_I64_I32},
Standard)
562 addRulesForGOpcs({G_XOR, G_OR, G_AND},
StandardB)
582 addRulesForGOpcs({G_LSHR},
Standard)
592 addRulesForGOpcs({G_ASHR},
Standard)
602 addRulesForGOpcs({G_FSHR},
Standard)
608 addRulesForGOpcs({G_UBFX, G_SBFX},
Standard)
614 addRulesForGOpcs({G_SMIN, G_SMAX},
Standard)
622 addRulesForGOpcs({G_UMIN, G_UMAX},
Standard)
633 addRulesForGOpcs({G_CONSTANT})
636 addRulesForGOpcs({G_FREEZE})
643 addRulesForGOpcs({G_UNMERGE_VALUES})
648 addRulesForGOpcs({G_PHI})
658 addRulesForGOpcs({G_AMDGPU_INTRIN_IMAGE_LOAD, G_AMDGPU_INTRIN_IMAGE_LOAD_D16,
659 G_AMDGPU_INTRIN_IMAGE_LOAD_NORET,
660 G_AMDGPU_INTRIN_IMAGE_STORE,
661 G_AMDGPU_INTRIN_IMAGE_STORE_D16})
676 bool HasScalarCompareEq64 = ST->hasScalarCompareEq64();
678 addRulesForGOpcs({G_ICMP})
697 addRulesForGOpcs({G_BRCOND})
701 addRulesForGOpcs({G_BR}).
Any({{
_}, {{}, {
None}}});
711 addRulesForGOpcs({G_ANYEXT})
723 bool Has16bitCmp = ST->has16BitInsts();
727 addRulesForGOpcs({G_TRUNC})
744 addRulesForGOpcs({G_ZEXT})
759 addRulesForGOpcs({G_SEXT})
774 addRulesForGOpcs({G_SEXT_INREG})
780 addRulesForGOpcs({G_ASSERT_ZEXT, G_ASSERT_SEXT},
Standard)
786 addRulesForGOpcs({G_ASSERT_ALIGN},
Standard)
798 addRulesForGOpcs({G_ATOMICRMW_ADD, G_ATOMICRMW_SUB, G_ATOMICRMW_XCHG,
799 G_ATOMICRMW_AND, G_ATOMICRMW_OR, G_ATOMICRMW_XOR,
800 G_ATOMICRMW_MIN, G_ATOMICRMW_MAX, G_ATOMICRMW_UMIN,
801 G_ATOMICRMW_UMAX, G_ATOMICRMW_UINC_WRAP,
802 G_ATOMICRMW_UDEC_WRAP})
810 bool HasAtomicFlatPkAdd16Insts = ST->hasAtomicFlatPkAdd16Insts();
811 bool HasAtomicBufferGlobalPkAddF16Insts =
812 ST->hasAtomicBufferGlobalPkAddF16NoRtnInsts() ||
813 ST->hasAtomicBufferGlobalPkAddF16Insts();
814 bool HasAtomicDsPkAdd16Insts = ST->hasAtomicDsPkAdd16Insts();
815 addRulesForGOpcs({G_ATOMICRMW_FADD})
823 HasAtomicFlatPkAdd16Insts)
825 HasAtomicBufferGlobalPkAddF16Insts)
827 HasAtomicDsPkAdd16Insts);
829 addRulesForGOpcs({G_ATOMIC_CMPXCHG})
835 addRulesForGOpcs({G_AMDGPU_ATOMIC_CMPXCHG})
841 addRulesForGOpcs({G_AMDGPU_BUFFER_ATOMIC_CMPSWAP},
Standard)
847 addRulesForGOpcs({G_AMDGPU_BUFFER_ATOMIC_SWAP, G_AMDGPU_BUFFER_ATOMIC_UMAX,
848 G_AMDGPU_BUFFER_ATOMIC_UMIN, G_AMDGPU_BUFFER_ATOMIC_SMAX,
849 G_AMDGPU_BUFFER_ATOMIC_SMIN},
854 bool hasSMRDx3 = ST->hasScalarDwordx3Loads();
855 bool hasSMRDSmall = ST->hasScalarSubwordLoads();
856 bool usesTrue16 = ST->useRealTrue16Insts();
859 return (*
MI.memoperands_begin())->getAlign() >=
Align(16);
863 return (*
MI.memoperands_begin())->getAlign() >=
Align(4);
867 return (*
MI.memoperands_begin())->isAtomic();
883 return (*
MI.memoperands_begin())->isVolatile();
887 return (*
MI.memoperands_begin())->isInvariant();
902 return MemSize == 16 || MemSize == 8;
910 auto isUL = !isAtomicMMO && isUniMMO && (isConst || !isVolatileMMO) &&
911 (isConst || isInvMMO || isNoClobberMMO);
915 addRulesForGOpcs({G_LOAD})
1022 addRulesForGOpcs({G_ZEXTLOAD, G_SEXTLOAD})
1042 addRulesForGOpcs({G_STORE})
1078 addRulesForGOpcs({G_AMDGPU_BUFFER_LOAD, G_AMDGPU_BUFFER_LOAD_FORMAT,
1079 G_AMDGPU_TBUFFER_LOAD_FORMAT},
1090 addRulesForGOpcs({G_AMDGPU_BUFFER_LOAD_USHORT, G_AMDGPU_BUFFER_LOAD_UBYTE,
1091 G_AMDGPU_BUFFER_LOAD_SSHORT, G_AMDGPU_BUFFER_LOAD_SBYTE},
1097 {G_AMDGPU_BUFFER_LOAD_UBYTE_TFE, G_AMDGPU_BUFFER_LOAD_USHORT_TFE},
1102 addRulesForGOpcs({G_AMDGPU_BUFFER_LOAD_TFE, G_AMDGPU_BUFFER_LOAD_FORMAT_TFE},
1115 {G_AMDGPU_BUFFER_LOAD_FORMAT_D16, G_AMDGPU_TBUFFER_LOAD_FORMAT_D16},
1124 addRulesForGOpcs({G_AMDGPU_BUFFER_STORE, G_AMDGPU_BUFFER_STORE_BYTE,
1125 G_AMDGPU_BUFFER_STORE_SHORT, G_AMDGPU_BUFFER_STORE_FORMAT,
1126 G_AMDGPU_BUFFER_STORE_FORMAT_D16,
1127 G_AMDGPU_TBUFFER_STORE_FORMAT,
1128 G_AMDGPU_TBUFFER_STORE_FORMAT_D16})
1140 addRulesForGOpcs({G_AMDGPU_BUFFER_ATOMIC_FADD})
1149 addRulesForGOpcs({G_PTR_ADD})
1155 addRulesForGOpcs({G_INTTOPTR})
1163 addRulesForGOpcs({G_PTRTOINT})
1173 addRulesForGOpcs({G_PTRMASK})
1181 addRulesForGOpcs({G_BITREVERSE},
Standard)
1187 addRulesForGOpcs({G_FENCE}).
Any({{{}}, {{}, {}}});
1189 addRulesForGOpcs({G_READSTEADYCOUNTER, G_READCYCLECOUNTER},
Standard)
1194 addRulesForGOpcs({G_GLOBAL_VALUE})
1201 addRulesForGOpcs({G_AMDGPU_WAVE_ADDRESS}).
Any({{
UniP5}, {{
SgprP5}, {}}});
1203 addRulesForGOpcs({G_SI_CALL})
1209 bool hasSALUFloat = ST->hasSALUFloatInsts();
1211 addRulesForGOpcs({G_FADD, G_FMUL, G_STRICT_FADD, G_STRICT_FMUL},
Standard)
1225 addRulesForGOpcs({G_FSUB, G_STRICT_FSUB},
Standard)
1233 addRulesForGOpcs({G_FMAD},
Standard)
1239 addRulesForGOpcs({G_FLDEXP, G_STRICT_FLDEXP},
Standard)
1247 addRulesForGOpcs({G_FMA, G_STRICT_FMA},
Standard)
1265 addRulesForGOpcs({G_AMDGPU_FMED3},
Standard)
1274 addRulesForGOpcs({G_AMDGPU_SMED3},
Standard)
1282 addRulesForGOpcs({G_FNEG, G_FABS},
Standard)
1297 addRulesForGOpcs({G_FCANONICALIZE},
Standard)
1309 bool hasPST = ST->hasPseudoScalarTrans();
1310 addRulesForGOpcs({G_FSQRT},
Standard)
1315 addRulesForGOpcs({G_FPTOUI, G_FPTOSI})
1327 addRulesForGOpcs({G_UITOFP, G_SITOFP})
1339 addRulesForGOpcs({G_FPEXT})
1346 addRulesForGOpcs({G_AMDGPU_CVT_PK_I16_I32},
Standard)
1350 addRulesForGOpcs({G_AMDGPU_FMIN_LEGACY, G_AMDGPU_FMAX_LEGACY},
Standard)
1354 addRulesForGOpcs({G_FMINIMUM, G_FMAXIMUM},
Standard)
1364 addRulesForGOpcs({G_FMINNUM_IEEE, G_FMAXNUM_IEEE, G_FMINNUM, G_FMAXNUM},
1377 addRulesForGOpcs({G_FPTRUNC})
1386 addRulesForGOpcs({G_IS_FPCLASS})
1394 addRulesForGOpcs({G_FCMP},
Standard)
1408 addRulesForGOpcs({G_INTRINSIC_TRUNC, G_INTRINSIC_ROUNDEVEN, G_FFLOOR, G_FCEIL,
1425 addRulesForIOpcs({amdgcn_end_cf})
1429 addRulesForIOpcs({amdgcn_if_break},
Standard)
1433 addRulesForIOpcs({amdgcn_exp})
1437 addRulesForIOpcs({amdgcn_exp_row})
1443 addRulesForIOpcs({amdgcn_mbcnt_lo, amdgcn_mbcnt_hi},
Standard)
1446 addRulesForIOpcs({amdgcn_readfirstlane})
1452 addRulesForIOpcs({amdgcn_s_sleep}).
Any({{
_,
_}, {{}, {
IntrId,
Imm}}});
1454 addRulesForIOpcs({amdgcn_bitop3},
Standard)
1460 addRulesForIOpcs({amdgcn_mul_u24, amdgcn_mul_i24},
Standard)
1466 addRulesForIOpcs({amdgcn_mulhi_u24, amdgcn_mulhi_i24, amdgcn_fmul_legacy},
1471 addRulesForIOpcs({amdgcn_fma_legacy},
Standard)
1475 addRulesForIOpcs({amdgcn_frexp_mant, amdgcn_fract},
Standard)
1483 addRulesForIOpcs({amdgcn_prng_b32})
1487 addRulesForIOpcs({amdgcn_sffbh},
Standard)
1491 addRulesForIOpcs({amdgcn_ubfe, amdgcn_sbfe},
Standard)
1497 addRulesForIOpcs({amdgcn_global_load_tr_b64})
1501 addRulesForIOpcs({amdgcn_global_load_tr_b128})
1505 addRulesForIOpcs({amdgcn_global_atomic_ordered_add_b64})
1509 {amdgcn_global_atomic_fmin_num, amdgcn_global_atomic_fmax_num},
Standard)
1512 addRulesForIOpcs({amdgcn_flat_atomic_fmin_num, amdgcn_flat_atomic_fmax_num},
1516 addRulesForIOpcs({amdgcn_raw_buffer_load_lds})
1519 addRulesForIOpcs({amdgcn_struct_buffer_load_lds})
1523 addRulesForIOpcs({amdgcn_raw_ptr_buffer_load_lds})
1526 addRulesForIOpcs({amdgcn_struct_ptr_buffer_load_lds})
1529 addRulesForIOpcs({amdgcn_wwm, amdgcn_strict_wwm},
StandardB)