Skip to content

Commit 48d2e04

Browse files
committed
[AMDGPU] Mark SMRD atomics
We did not have atomic flags on SMRD, did not copy TSFlags to real instructions, and did not have ret/noret atomic map. At the moment it is NFC, but needed for D96469. Differential Revision: https://reviews.llvm.org/D96823
1 parent d55d46f commit 48d2e04

File tree

1 file changed

+16
-7
lines changed

1 file changed

+16
-7
lines changed

llvm/lib/Target/AMDGPU/SMInstructions.td

Lines changed: 16 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,8 @@ class SM_Real <SM_Pseudo ps>
6262
let UseNamedOperandTable = ps.UseNamedOperandTable;
6363
let SMRD = ps.SMRD;
6464

65+
let TSFlags = ps.TSFlags;
66+
6567
bit is_buffer = ps.is_buffer;
6668

6769
// encoding
@@ -227,24 +229,29 @@ class SM_Atomic_Pseudo <string opName,
227229
let ScalarStore = 1;
228230
let hasSideEffects = 1;
229231
let maybeAtomic = 1;
232+
233+
let IsAtomicNoRet = !not(isRet);
234+
let IsAtomicRet = isRet;
230235
}
231236

232237
class SM_Pseudo_Atomic<string opName,
233238
RegisterClass baseClass,
234239
RegisterClass dataClass,
235240
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"))> :
237245
SM_Atomic_Pseudo<opName,
238246
!if(isRet, (outs dataClass:$sdst), (outs)),
239247
!if(isImm,
240248
(ins dataClass:$sdata, baseClass:$sbase, smem_offset:$offset, DLC:$dlc),
241249
(ins dataClass:$sdata, baseClass:$sbase, SReg_32:$offset, DLC:$dlc)),
242250
!if(isRet, " $sdst", " $sdata") # ", $sbase, $offset" # !if(isRet, " glc", "") # "$dlc",
243-
isRet> {
251+
isRet>,
252+
AtomicNoRet <opNameWithSuffix, isRet> {
244253
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;
248255

249256
let Constraints = !if(isRet, "$sdst = $sdata", "");
250257
let DisableEncoding = !if(isRet, "$sdata", "");
@@ -589,7 +596,8 @@ defm S_ATC_PROBE_BUFFER : SM_Real_Probe_vi <0x27, "S_ATC_PROBE_BUFFER">;
589596
//===----------------------------------------------------------------------===//
590597

591598
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> {
593601

594602
bits<7> sdata;
595603

@@ -973,7 +981,8 @@ defm S_ATC_PROBE : SM_Real_Probe_gfx10 <0x26, "S_ATC_PROBE">;
973981
defm S_ATC_PROBE_BUFFER : SM_Real_Probe_gfx10 <0x27, "S_ATC_PROBE_BUFFER">;
974982

975983
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> {
977986

978987
bits<7> sdata;
979988
bit dlc;

0 commit comments

Comments
 (0)