@@ -469,6 +469,56 @@ class DSAtomicRetPat<DS_Pseudo inst, ValueType vt, PatFrag frag, int complexity
469469 let AddedComplexity = complexity;
470470}
471471
472+ multiclass DSAtomicRetPat_mc<DS_Pseudo inst, ValueType vt, string frag> {
473+ let OtherPredicates = [LDSRequiresM0Init] in {
474+ def : DSAtomicRetPat<inst, vt, !cast<PatFrag>(frag#"_local_m0_"#vt)>;
475+ }
476+
477+ let OtherPredicates = [NotLDSRequiresM0Init] in {
478+ def : DSAtomicRetPat<!cast<DS_Pseudo>(!cast<string>(inst)#"_gfx9"), vt,
479+ !cast<PatFrag>(frag#"_local_"#vt)>;
480+ }
481+
482+ let OtherPredicates = [HasGDS] in {
483+ def : DSAtomicRetPat<inst, vt, !cast<PatFrag>(frag#"_region_m0_"#vt),
484+ /* complexity */ 0, /* gds */ 1>;
485+ }
486+ }
487+
488+ multiclass DSAtomicRetNoRetPat_NoM0_mc<DS_Pseudo inst, DS_Pseudo noRetInst,
489+ ValueType vt, string frag> {
490+ def : DSAtomicRetPat<inst, vt,
491+ !cast<PatFrag>(frag#"_local_"#vt)>;
492+ def : DSAtomicRetPat<noRetInst, vt,
493+ !cast<PatFrag>(frag#"_local_noret_"#vt), /* complexity */ 1>;
494+ }
495+
496+ multiclass DSAtomicRetNoRetPat_mc<DS_Pseudo inst, DS_Pseudo noRetInst,
497+ ValueType vt, string frag> {
498+ let OtherPredicates = [LDSRequiresM0Init] in {
499+ def : DSAtomicRetPat<inst, vt,
500+ !cast<PatFrag>(frag#"_local_m0_"#vt)>;
501+ def : DSAtomicRetPat<noRetInst, vt,
502+ !cast<PatFrag>(frag#"_local_m0_noret_"#vt), /* complexity */ 1>;
503+ }
504+
505+ let OtherPredicates = [NotLDSRequiresM0Init] in {
506+ defm : DSAtomicRetNoRetPat_NoM0_mc<
507+ !cast<DS_Pseudo>(!cast<string>(inst)#"_gfx9"),
508+ !cast<DS_Pseudo>(!cast<string>(noRetInst)#"_gfx9"),
509+ vt, frag>;
510+ }
511+
512+ let OtherPredicates = [HasGDS] in {
513+ def : DSAtomicRetPat<inst, vt,
514+ !cast<PatFrag>(frag#"_region_m0_"#vt),
515+ /* complexity */ 0, /* gds */ 1>;
516+ def : DSAtomicRetPat<noRetInst, vt,
517+ !cast<PatFrag>(frag#"_region_m0_noret_"#vt),
518+ /* complexity */ 1, /* gds */ 1>;
519+ }
520+ }
521+
472522defm DS_ADD_U32 : DS_1A1D_NORET_mc<"ds_add_u32">;
473523defm DS_SUB_U32 : DS_1A1D_NORET_mc<"ds_sub_u32">;
474524defm DS_RSUB_U32 : DS_1A1D_NORET_mc<"ds_rsub_u32">;
@@ -519,10 +569,10 @@ let SubtargetPredicate = HasLdsAtomicAddF64 in {
519569} // End SubtargetPredicate = HasLdsAtomicAddF64
520570
521571let SubtargetPredicate = HasAtomicDsPkAdd16Insts in {
522- defm DS_PK_ADD_F16 : DS_1A1D_NORET_mc <"ds_pk_add_f16">;
523- defm DS_PK_ADD_RTN_F16 : DS_1A1D_RET_mc <"ds_pk_add_rtn_f16", VGPR_32>;
524- defm DS_PK_ADD_BF16 : DS_1A1D_NORET_mc <"ds_pk_add_bf16">;
525- defm DS_PK_ADD_RTN_BF16 : DS_1A1D_RET_mc <"ds_pk_add_rtn_bf16", VGPR_32>;
572+ defm DS_PK_ADD_F16 : DS_1A1D_NORET_mc_gfx9 <"ds_pk_add_f16">;
573+ defm DS_PK_ADD_RTN_F16 : DS_1A1D_RET_mc_gfx9 <"ds_pk_add_rtn_f16", VGPR_32>;
574+ defm DS_PK_ADD_BF16 : DS_1A1D_NORET_mc_gfx9 <"ds_pk_add_bf16">;
575+ defm DS_PK_ADD_RTN_BF16 : DS_1A1D_RET_mc_gfx9 <"ds_pk_add_rtn_bf16", VGPR_32>;
526576} // End SubtargetPredicate = HasAtomicDsPkAdd16Insts
527577
528578defm DS_CMPSTORE_B32 : DS_1A2D_NORET_mc<"ds_cmpstore_b32">;
@@ -1089,50 +1139,6 @@ defm : DSWritePat_mc <DS_WRITE_B128, vt, "store_align_less_than_4_local">;
10891139
10901140} // End AddedComplexity = 100
10911141
1092- multiclass DSAtomicRetPat_mc<DS_Pseudo inst, ValueType vt, string frag> {
1093- let OtherPredicates = [LDSRequiresM0Init] in {
1094- def : DSAtomicRetPat<inst, vt, !cast<PatFrag>(frag#"_local_m0_"#vt)>;
1095- }
1096-
1097- let OtherPredicates = [NotLDSRequiresM0Init] in {
1098- def : DSAtomicRetPat<!cast<DS_Pseudo>(!cast<string>(inst)#"_gfx9"), vt,
1099- !cast<PatFrag>(frag#"_local_"#vt)>;
1100- }
1101-
1102- let OtherPredicates = [HasGDS] in {
1103- def : DSAtomicRetPat<inst, vt, !cast<PatFrag>(frag#"_region_m0_"#vt),
1104- /* complexity */ 0, /* gds */ 1>;
1105- }
1106- }
1107-
1108- multiclass DSAtomicRetNoRetPat_mc<DS_Pseudo inst, DS_Pseudo noRetInst,
1109- ValueType vt, string frag> {
1110- let OtherPredicates = [LDSRequiresM0Init] in {
1111- def : DSAtomicRetPat<inst, vt,
1112- !cast<PatFrag>(frag#"_local_m0_"#vt)>;
1113- def : DSAtomicRetPat<noRetInst, vt,
1114- !cast<PatFrag>(frag#"_local_m0_noret_"#vt), /* complexity */ 1>;
1115- }
1116-
1117- let OtherPredicates = [NotLDSRequiresM0Init] in {
1118- def : DSAtomicRetPat<!cast<DS_Pseudo>(!cast<string>(inst)#"_gfx9"), vt,
1119- !cast<PatFrag>(frag#"_local_"#vt)>;
1120- def : DSAtomicRetPat<!cast<DS_Pseudo>(!cast<string>(noRetInst)#"_gfx9"), vt,
1121- !cast<PatFrag>(frag#"_local_noret_"#vt), /* complexity */ 1>;
1122- }
1123-
1124- let OtherPredicates = [HasGDS] in {
1125- def : DSAtomicRetPat<inst, vt,
1126- !cast<PatFrag>(frag#"_region_m0_"#vt),
1127- /* complexity */ 0, /* gds */ 1>;
1128- def : DSAtomicRetPat<noRetInst, vt,
1129- !cast<PatFrag>(frag#"_region_m0_noret_"#vt),
1130- /* complexity */ 1, /* gds */ 1>;
1131- }
1132- }
1133-
1134-
1135-
11361142let SubtargetPredicate = isGFX6GFX7GFX8GFX9GFX10 in {
11371143// Caution, the order of src and cmp is the *opposite* of the BUFFER_ATOMIC_CMPSWAP opcode.
11381144class DSAtomicCmpXChgSwapped<DS_Pseudo inst, ValueType vt, PatFrag frag,
@@ -1210,8 +1216,8 @@ defm : DSAtomicRetNoRetPat_mc<DS_MAX_RTN_F32, DS_MAX_F32, f32, "atomic_load_fmax
12101216
12111217
12121218let SubtargetPredicate = HasAtomicDsPkAdd16Insts in {
1213- defm : DSAtomicRetNoRetPat_mc <DS_PK_ADD_RTN_F16, DS_PK_ADD_F16, v2f16, "atomic_load_fadd">;
1214- defm : DSAtomicRetNoRetPat_mc <DS_PK_ADD_RTN_BF16, DS_PK_ADD_BF16, v2bf16, "atomic_load_fadd">;
1219+ defm : DSAtomicRetNoRetPat_NoM0_mc <DS_PK_ADD_RTN_F16, DS_PK_ADD_F16, v2f16, "atomic_load_fadd">;
1220+ defm : DSAtomicRetNoRetPat_NoM0_mc <DS_PK_ADD_RTN_BF16, DS_PK_ADD_BF16, v2bf16, "atomic_load_fadd">;
12151221}
12161222
12171223let SubtargetPredicate = isGFX6GFX7GFX8GFX9GFX10 in {
@@ -1263,7 +1269,7 @@ class DSAtomicRetPatIntrinsic<DS_Pseudo inst, ValueType vt, PatFrag frag,
12631269} // End SubtargetPredicate = HasLdsAtomicAddF64
12641270
12651271let SubtargetPredicate = HasAtomicDsPkAdd16Insts in {
1266- defm : DSAtomicRetNoRetPat_mc <DS_PK_ADD_RTN_F16, DS_PK_ADD_F16, v2f16, "atomic_load_fadd">;
1272+ defm : DSAtomicRetNoRetPat_NoM0_mc <DS_PK_ADD_RTN_F16, DS_PK_ADD_F16, v2f16, "atomic_load_fadd">;
12671273} // End SubtargetPredicate = HasAtomicDsPkAdd16Insts
12681274
12691275let OtherPredicates = [HasGDS] in
0 commit comments