478 : ST(&_ST), MRI(&_MRI) {
480 addRulesForGOpcs({G_ADD, G_SUB},
Standard)
490 addRulesForGOpcs({G_UADDO, G_USUBO},
Standard)
494 addRulesForGOpcs({G_UADDE, G_USUBE},
Standard)
498 addRulesForGOpcs({G_UADDSAT, G_SADDSAT, G_USUBSAT, G_SSUBSAT},
Standard)
506 bool HasVecMulU64 = ST->hasVectorMulU64();
518 bool hasMulHi = ST->hasScalarMulHiInsts();
519 addRulesForGOpcs({G_UMULH, G_SMULH},
Standard)
524 addRulesForGOpcs({G_AMDGPU_MAD_U64_U32},
Standard)
528 bool HasScalarSMulU64 = ST->hasScalarSMulU64();
529 addRulesForGOpcs({G_AMDGPU_S_MUL_U64_U32, G_AMDGPU_S_MUL_I64_I32},
Standard)
533 addRulesForGOpcs({G_XOR, G_OR, G_AND},
StandardB)
553 addRulesForGOpcs({G_LSHR},
Standard)
563 addRulesForGOpcs({G_ASHR},
Standard)
573 addRulesForGOpcs({G_FSHR},
Standard)
579 addRulesForGOpcs({G_UBFX, G_SBFX},
Standard)
585 addRulesForGOpcs({G_SMIN, G_SMAX},
Standard)
593 addRulesForGOpcs({G_UMIN, G_UMAX},
Standard)
604 addRulesForGOpcs({G_CONSTANT})
620 bool HasScalarCompareEq64 = ST->hasScalarCompareEq64();
622 addRulesForGOpcs({G_ICMP})
641 addRulesForGOpcs({G_BRCOND})
645 addRulesForGOpcs({G_BR}).
Any({{
_}, {{}, {
None}}});
655 addRulesForGOpcs({G_ANYEXT})
667 bool Has16bitCmp = ST->has16BitInsts();
671 addRulesForGOpcs({G_TRUNC})
688 addRulesForGOpcs({G_ZEXT})
703 addRulesForGOpcs({G_SEXT})
718 addRulesForGOpcs({G_SEXT_INREG})
724 addRulesForGOpcs({G_ASSERT_ZEXT, G_ASSERT_SEXT},
Standard)
732 addRulesForGOpcs({G_ATOMICRMW_ADD, G_ATOMICRMW_SUB, G_ATOMICRMW_XCHG,
733 G_ATOMICRMW_AND, G_ATOMICRMW_OR, G_ATOMICRMW_XOR})
741 addRulesForGOpcs({G_ATOMIC_CMPXCHG})
747 addRulesForGOpcs({G_AMDGPU_ATOMIC_CMPXCHG})
753 bool hasSMRDx3 = ST->hasScalarDwordx3Loads();
754 bool hasSMRDSmall = ST->hasScalarSubwordLoads();
755 bool usesTrue16 = ST->useRealTrue16Insts();
758 return (*
MI.memoperands_begin())->getAlign() >=
Align(16);
762 return (*
MI.memoperands_begin())->getAlign() >=
Align(4);
766 return (*
MI.memoperands_begin())->isAtomic();
782 return (*
MI.memoperands_begin())->isVolatile();
786 return (*
MI.memoperands_begin())->isInvariant();
801 return MemSize == 16 || MemSize == 8;
809 auto isUL = !isAtomicMMO && isUniMMO && (isConst || !isVolatileMMO) &&
810 (isConst || isInvMMO || isNoClobberMMO);
814 addRulesForGOpcs({G_LOAD})
921 addRulesForGOpcs({G_ZEXTLOAD, G_SEXTLOAD})
941 addRulesForGOpcs({G_STORE})
976 addRulesForGOpcs({G_AMDGPU_BUFFER_LOAD, G_AMDGPU_BUFFER_LOAD_FORMAT,
977 G_AMDGPU_TBUFFER_LOAD_FORMAT},
988 addRulesForGOpcs({G_AMDGPU_BUFFER_LOAD_USHORT, G_AMDGPU_BUFFER_LOAD_UBYTE,
989 G_AMDGPU_BUFFER_LOAD_SSHORT, G_AMDGPU_BUFFER_LOAD_SBYTE},
994 addRulesForGOpcs({G_AMDGPU_BUFFER_STORE, G_AMDGPU_BUFFER_STORE_FORMAT,
995 G_AMDGPU_BUFFER_STORE_FORMAT_D16,
996 G_AMDGPU_TBUFFER_STORE_FORMAT})
1007 addRulesForGOpcs({G_PTR_ADD})
1013 addRulesForGOpcs({G_INTTOPTR})
1021 addRulesForGOpcs({G_PTRTOINT})
1031 addRulesForGOpcs({G_PTRMASK})
1039 addRulesForGOpcs({G_BITREVERSE},
Standard)
1045 addRulesForGOpcs({G_FENCE}).
Any({{{}}, {{}, {}}});
1047 addRulesForGOpcs({G_READSTEADYCOUNTER, G_READCYCLECOUNTER},
Standard)
1052 addRulesForGOpcs({G_GLOBAL_VALUE})
1059 addRulesForGOpcs({G_AMDGPU_WAVE_ADDRESS}).
Any({{
UniP5}, {{
SgprP5}, {}}});
1061 bool hasSALUFloat = ST->hasSALUFloatInsts();
1063 addRulesForGOpcs({G_FADD, G_FMUL, G_STRICT_FADD, G_STRICT_FMUL},
Standard)
1077 addRulesForGOpcs({G_FSUB, G_STRICT_FSUB},
Standard)
1085 addRulesForGOpcs({G_FMAD},
Standard)
1091 addRulesForGOpcs({G_FLDEXP, G_STRICT_FLDEXP},
Standard)
1099 addRulesForGOpcs({G_FMA},
Standard)
1117 addRulesForGOpcs({G_AMDGPU_FMED3},
Standard)
1126 addRulesForGOpcs({G_AMDGPU_SMED3},
Standard)
1134 addRulesForGOpcs({G_FNEG, G_FABS},
Standard)
1149 addRulesForGOpcs({G_FCANONICALIZE},
Standard)
1161 addRulesForGOpcs({G_FPTOUI})
1165 addRulesForGOpcs({G_UITOFP})
1170 addRulesForGOpcs({G_FPEXT})
1177 addRulesForGOpcs({G_AMDGPU_CVT_PK_I16_I32},
Standard)
1181 addRulesForGOpcs({G_AMDGPU_FMIN_LEGACY, G_AMDGPU_FMAX_LEGACY},
Standard)
1185 addRulesForGOpcs({G_FPTRUNC})
1194 addRulesForGOpcs({G_IS_FPCLASS})
1202 addRulesForGOpcs({G_FCMP},
Standard)
1223 addRulesForIOpcs({amdgcn_end_cf})
1227 addRulesForIOpcs({amdgcn_if_break},
Standard)
1231 addRulesForIOpcs({amdgcn_mbcnt_lo, amdgcn_mbcnt_hi},
Standard)
1234 addRulesForIOpcs({amdgcn_readfirstlane})
1240 addRulesForIOpcs({amdgcn_mul_u24, amdgcn_mul_i24},
Standard)
1246 addRulesForIOpcs({amdgcn_mulhi_u24, amdgcn_mulhi_i24, amdgcn_fmul_legacy},
1251 addRulesForIOpcs({amdgcn_frexp_mant, amdgcn_fract},
Standard)
1259 addRulesForIOpcs({amdgcn_ubfe, amdgcn_sbfe},
Standard)
1265 addRulesForIOpcs({amdgcn_global_load_tr_b64})
1269 addRulesForIOpcs({amdgcn_global_load_tr_b128})