@@ -167,6 +167,20 @@ multiclass SM_Pseudo_Loads<RegisterClass baseClass,
167
167
def _IMM : SM_Load_Pseudo <opName, baseClass, dstClass, IMM_Offset>;
168
168
def _SGPR : SM_Load_Pseudo <opName, baseClass, dstClass, SGPR_Offset>;
169
169
def _SGPR_IMM : SM_Load_Pseudo <opName, baseClass, dstClass, SGPR_IMM_Offset>;
170
+
171
+ // The constrained multi-dword load equivalents with early clobber flag at
172
+ // the dst operand. They are needed only for codegen and there is no need for
173
+ // their real opcodes.
174
+ let SubtargetPredicate = isGFX8Plus,
175
+ Constraints = !if(!gt(dstClass.RegTypes[0].Size, 32),
176
+ "@earlyclobber $sdst", "") in {
177
+ let PseudoInstr = NAME # !cast<OffsetMode>(IMM_Offset).Variant in
178
+ def _IMM_ec : SM_Load_Pseudo <opName, baseClass, dstClass, IMM_Offset>;
179
+ let PseudoInstr = NAME # !cast<OffsetMode>(SGPR_Offset).Variant in
180
+ def _SGPR_ec : SM_Load_Pseudo <opName, baseClass, dstClass, SGPR_Offset>;
181
+ let PseudoInstr = NAME # !cast<OffsetMode>(SGPR_IMM_Offset).Variant in
182
+ def _SGPR_IMM_ec : SM_Load_Pseudo <opName, baseClass, dstClass, SGPR_IMM_Offset>;
183
+ }
170
184
}
171
185
172
186
multiclass SM_Pseudo_Stores<RegisterClass baseClass,
0 commit comments