@@ -62,6 +62,8 @@ class SM_Real <SM_Pseudo ps>
62
62
let UseNamedOperandTable = ps.UseNamedOperandTable;
63
63
let SMRD = ps.SMRD;
64
64
65
+ let TSFlags = ps.TSFlags;
66
+
65
67
bit is_buffer = ps.is_buffer;
66
68
67
69
// encoding
@@ -227,24 +229,29 @@ class SM_Atomic_Pseudo <string opName,
227
229
let ScalarStore = 1;
228
230
let hasSideEffects = 1;
229
231
let maybeAtomic = 1;
232
+
233
+ let IsAtomicNoRet = !not(isRet);
234
+ let IsAtomicRet = isRet;
230
235
}
231
236
232
237
class SM_Pseudo_Atomic<string opName,
233
238
RegisterClass baseClass,
234
239
RegisterClass dataClass,
235
240
bit isImm,
236
- bit isRet> :
241
+ bit isRet,
242
+ string opNameWithSuffix = opName # !if(isImm,
243
+ !if(isRet, "_IMM_RTN", "_IMM"),
244
+ !if(isRet, "_SGPR_RTN", "_SGPR"))> :
237
245
SM_Atomic_Pseudo<opName,
238
246
!if(isRet, (outs dataClass:$sdst), (outs)),
239
247
!if(isImm,
240
248
(ins dataClass:$sdata, baseClass:$sbase, smem_offset:$offset, DLC:$dlc),
241
249
(ins dataClass:$sdata, baseClass:$sbase, SReg_32:$offset, DLC:$dlc)),
242
250
!if(isRet, " $sdst", " $sdata") # ", $sbase, $offset" # !if(isRet, " glc", "") # "$dlc",
243
- isRet> {
251
+ isRet>,
252
+ AtomicNoRet <opNameWithSuffix, isRet> {
244
253
let offset_is_imm = isImm;
245
- let PseudoInstr = opName # !if(isImm,
246
- !if(isRet, "_IMM_RTN", "_IMM"),
247
- !if(isRet, "_SGPR_RTN", "_SGPR"));
254
+ let PseudoInstr = opNameWithSuffix;
248
255
249
256
let Constraints = !if(isRet, "$sdst = $sdata", "");
250
257
let DisableEncoding = !if(isRet, "$sdata", "");
@@ -589,7 +596,8 @@ defm S_ATC_PROBE_BUFFER : SM_Real_Probe_vi <0x27, "S_ATC_PROBE_BUFFER">;
589
596
//===----------------------------------------------------------------------===//
590
597
591
598
class SMEM_Atomic_Real_vi <bits<8> op, SM_Atomic_Pseudo ps>
592
- : SMEM_Real_vi <op, ps> {
599
+ : SMEM_Real_vi <op, ps>,
600
+ AtomicNoRet <!subst("_RTN","",NAME), ps.glc> {
593
601
594
602
bits<7> sdata;
595
603
@@ -973,7 +981,8 @@ defm S_ATC_PROBE : SM_Real_Probe_gfx10 <0x26, "S_ATC_PROBE">;
973
981
defm S_ATC_PROBE_BUFFER : SM_Real_Probe_gfx10 <0x27, "S_ATC_PROBE_BUFFER">;
974
982
975
983
class SMEM_Atomic_Real_gfx10 <bits<8> op, SM_Atomic_Pseudo ps>
976
- : SMEM_Real_gfx10 <op, ps> {
984
+ : SMEM_Real_gfx10 <op, ps>,
985
+ AtomicNoRet <!subst("_RTN","",NAME), ps.glc> {
977
986
978
987
bits<7> sdata;
979
988
bit dlc;
0 commit comments