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