@@ -274,13 +274,13 @@ def VOP_I32_VI32_NO_EXT : VOPProfile<[i32, i32, untyped, untyped]> {
274
274
// to be a src operand. The custom inserter must add a tied implicit
275
275
// def and use of the super register since there seems to be no way to
276
276
// add an implicit def of a virtual register in tablegen.
277
- def VOP_MOVRELD : VOPProfile<[untyped, i32, untyped, untyped]> {
277
+ class VOP_MOVREL<RegisterOperand Src1RC> : VOPProfile<[untyped, i32, untyped, untyped]> {
278
278
let Src0RC32 = VOPDstOperand<VGPR_32>;
279
279
let Src0RC64 = VOPDstOperand<VGPR_32>;
280
280
281
281
let Outs = (outs);
282
- let Ins32 = (ins Src0RC32:$vdst, VSrc_b32 :$src0);
283
- let Ins64 = (ins Src0RC64:$vdst, VSrc_b32 :$src0);
282
+ let Ins32 = (ins Src0RC32:$vdst, Src1RC :$src0);
283
+ let Ins64 = (ins Src0RC64:$vdst, Src1RC :$src0);
284
284
let InsDPP = (ins DstRC:$vdst, DstRC:$old, Src0RC32:$src0,
285
285
dpp_ctrl:$dpp_ctrl, row_mask:$row_mask,
286
286
bank_mask:$bank_mask, bound_ctrl:$bound_ctrl);
@@ -306,6 +306,9 @@ def VOP_MOVRELD : VOPProfile<[untyped, i32, untyped, untyped]> {
306
306
let EmitDst = 1; // force vdst emission
307
307
}
308
308
309
+ def VOP_MOVRELD : VOP_MOVREL<VSrc_b32>;
310
+ def VOP_MOVRELSD : VOP_MOVREL<VRegSrc_32>;
311
+
309
312
let SubtargetPredicate = HasMovrel, Uses = [M0, EXEC] in {
310
313
// v_movreld_b32 is a special case because the destination output
311
314
// register is really a source. It isn't actually read (but may be
@@ -315,7 +318,7 @@ let SubtargetPredicate = HasMovrel, Uses = [M0, EXEC] in {
315
318
// so this must have an implicit def of the register added to it.
316
319
defm V_MOVRELD_B32 : VOP1Inst <"v_movreld_b32", VOP_MOVRELD>;
317
320
defm V_MOVRELS_B32 : VOP1Inst <"v_movrels_b32", VOP_I32_VI32_NO_EXT>;
318
- defm V_MOVRELSD_B32 : VOP1Inst <"v_movrelsd_b32", VOP_NO_EXT<VOP_I32_I32> >;
321
+ defm V_MOVRELSD_B32 : VOP1Inst <"v_movrelsd_b32", VOP_MOVRELSD >;
319
322
} // End Uses = [M0, EXEC]
320
323
321
324
defm V_MOV_FED_B32 : VOP1Inst <"v_mov_fed_b32", VOP_I32_I32>;
@@ -430,9 +433,8 @@ let SubtargetPredicate = isGFX10Plus in {
430
433
defm V_PIPEFLUSH : VOP1Inst<"v_pipeflush", VOP_NONE>;
431
434
432
435
let Uses = [M0] in {
433
- // FIXME-GFX10: Should V_MOVRELSD_2_B32 be VOP_NO_EXT?
434
436
defm V_MOVRELSD_2_B32 :
435
- VOP1Inst<"v_movrelsd_2_b32", VOP_NO_EXT<VOP_I32_I32> >;
437
+ VOP1Inst<"v_movrelsd_2_b32", VOP_MOVRELSD >;
436
438
437
439
def V_SWAPREL_B32 : VOP1_Pseudo<"v_swaprel_b32", VOP_SWAP_I32, [], 1> {
438
440
let Constraints = "$vdst = $src1, $vdst1 = $src0";
0 commit comments