@@ -167,6 +167,20 @@ multiclass SM_Pseudo_Loads<RegisterClass baseClass,
167167 def _IMM : SM_Load_Pseudo <opName, baseClass, dstClass, IMM_Offset>;
168168 def _SGPR : SM_Load_Pseudo <opName, baseClass, dstClass, SGPR_Offset>;
169169 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+ }
170184}
171185
172186multiclass SM_Pseudo_Stores<RegisterClass baseClass,
0 commit comments