Skip to content

Commit eeb7feb

Browse files
authored
[AMDGPU] Define constrained multi-dword scalar load instructions. (#96161)
1 parent 939a662 commit eeb7feb

File tree

1 file changed

+17
-4
lines changed

1 file changed

+17
-4
lines changed

llvm/lib/Target/AMDGPU/SMInstructions.td

Lines changed: 17 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -161,12 +161,25 @@ class SM_Discard_Pseudo <string opName, OffsetMode offsets>
161161
let has_soffset = offsets.HasSOffset;
162162
}
163163

164+
multiclass SM_Load_Pseudos<string op, RegisterClass baseClass,
165+
RegisterClass dstClass, OffsetMode offsets> {
166+
defvar opName = !tolower(op);
167+
def "" : SM_Load_Pseudo <opName, baseClass, dstClass, offsets>;
168+
169+
// The constrained multi-dword load equivalents with early clobber flag at
170+
// the dst operands. They are needed only for codegen and there is no need
171+
// for their real opcodes.
172+
if !gt(dstClass.RegTypes[0].Size, 32) then
173+
let Constraints = "@earlyclobber $sdst",
174+
PseudoInstr = op # offsets.Variant in
175+
def "" # _ec : SM_Load_Pseudo <opName, baseClass, dstClass, offsets>;
176+
}
177+
164178
multiclass SM_Pseudo_Loads<RegisterClass baseClass,
165179
RegisterClass dstClass> {
166-
defvar opName = !tolower(NAME);
167-
def _IMM : SM_Load_Pseudo <opName, baseClass, dstClass, IMM_Offset>;
168-
def _SGPR : SM_Load_Pseudo <opName, baseClass, dstClass, SGPR_Offset>;
169-
def _SGPR_IMM : SM_Load_Pseudo <opName, baseClass, dstClass, SGPR_IMM_Offset>;
180+
defm _IMM : SM_Load_Pseudos <NAME, baseClass, dstClass, IMM_Offset>;
181+
defm _SGPR : SM_Load_Pseudos <NAME, baseClass, dstClass, SGPR_Offset>;
182+
defm _SGPR_IMM : SM_Load_Pseudos <NAME, baseClass, dstClass, SGPR_IMM_Offset>;
170183
}
171184

172185
multiclass SM_Pseudo_Stores<RegisterClass baseClass,

0 commit comments

Comments
 (0)