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