@@ -469,6 +469,56 @@ class DSAtomicRetPat<DS_Pseudo inst, ValueType vt, PatFrag frag, int complexity
469
469
let AddedComplexity = complexity;
470
470
}
471
471
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
+
472
522
defm DS_ADD_U32 : DS_1A1D_NORET_mc<"ds_add_u32">;
473
523
defm DS_SUB_U32 : DS_1A1D_NORET_mc<"ds_sub_u32">;
474
524
defm DS_RSUB_U32 : DS_1A1D_NORET_mc<"ds_rsub_u32">;
@@ -519,10 +569,10 @@ let SubtargetPredicate = HasLdsAtomicAddF64 in {
519
569
} // End SubtargetPredicate = HasLdsAtomicAddF64
520
570
521
571
let 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>;
526
576
} // End SubtargetPredicate = HasAtomicDsPkAdd16Insts
527
577
528
578
defm 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">;
1089
1139
1090
1140
} // End AddedComplexity = 100
1091
1141
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
-
1136
1142
let SubtargetPredicate = isGFX6GFX7GFX8GFX9GFX10 in {
1137
1143
// Caution, the order of src and cmp is the *opposite* of the BUFFER_ATOMIC_CMPSWAP opcode.
1138
1144
class 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
1210
1216
1211
1217
1212
1218
let 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">;
1215
1221
}
1216
1222
1217
1223
let SubtargetPredicate = isGFX6GFX7GFX8GFX9GFX10 in {
@@ -1263,7 +1269,7 @@ class DSAtomicRetPatIntrinsic<DS_Pseudo inst, ValueType vt, PatFrag frag,
1263
1269
} // End SubtargetPredicate = HasLdsAtomicAddF64
1264
1270
1265
1271
let 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">;
1267
1273
} // End SubtargetPredicate = HasAtomicDsPkAdd16Insts
1268
1274
1269
1275
let OtherPredicates = [HasGDS] in
0 commit comments