Skip to content

Commit 5d20672

Browse files
committed
[AMDGPU][NFC] Refactor FLAT_Global_* pseudos.
1 parent 70c5887 commit 5d20672

File tree

1 file changed

+53
-54
lines changed

1 file changed

+53
-54
lines changed

llvm/lib/Target/AMDGPU/FLATInstructions.td

Lines changed: 53 additions & 54 deletions
Original file line numberDiff line numberDiff line change
@@ -205,13 +205,13 @@ class GlobalSaddrTable <bit is_saddr, string Name = ""> {
205205
class FLAT_Load_Pseudo <string opName, RegisterClass regClass,
206206
bit HasTiedOutput = 0,
207207
bit HasSaddr = 0, bit EnableSaddr = 0,
208+
RegisterClass VaddrRC = !if(EnableSaddr, VGPR_32, VReg_64),
208209
RegisterOperand vdata_op = getLdStRegisterOperand<regClass>.ret> : FLAT_Pseudo<
209210
opName,
210211
(outs vdata_op:$vdst),
211212
!con(
212213
!if(EnableSaddr,
213-
(ins SReg_64_XEXEC_XNULL:$saddr, VGPR_32:$vaddr),
214-
(ins VReg_64:$vaddr)),
214+
(ins SReg_64_XEXEC_XNULL:$saddr), (ins)), (ins VaddrRC:$vaddr),
215215
(ins flat_offset:$offset),
216216
// FIXME: Operands with default values do not work with following non-optional operands.
217217
!if(HasTiedOutput, (ins CPol:$cpol, vdata_op:$vdst_in),
@@ -227,14 +227,13 @@ class FLAT_Load_Pseudo <string opName, RegisterClass regClass,
227227
}
228228

229229
class FLAT_Store_Pseudo <string opName, RegisterClass vdataClass,
230-
bit HasSaddr = 0, bit EnableSaddr = 0> : FLAT_Pseudo<
230+
bit HasSaddr = 0, bit EnableSaddr = 0,
231+
RegisterClass VaddrRC = !if(EnableSaddr, VGPR_32, VReg_64),
232+
RegisterOperand vdata_op = getLdStRegisterOperand<vdataClass>.ret> : FLAT_Pseudo<
231233
opName,
232234
(outs),
233-
!con(
234-
!if(EnableSaddr,
235-
(ins VGPR_32:$vaddr, getLdStRegisterOperand<vdataClass>.ret:$vdata, SReg_64_XEXEC_XNULL:$saddr),
236-
(ins VReg_64:$vaddr, getLdStRegisterOperand<vdataClass>.ret:$vdata)),
237-
(ins flat_offset:$offset, CPol_0:$cpol)),
235+
!con((ins VaddrRC:$vaddr, vdata_op:$vdata), !if(EnableSaddr, (ins SReg_64_XEXEC_XNULL:$saddr), (ins)),
236+
(ins flat_offset:$offset, CPol_0:$cpol)),
238237
" $vaddr, $vdata"#!if(HasSaddr, !if(EnableSaddr, ", $saddr", ", off"), "")#"$offset$cpol"> {
239238
let mayLoad = 0;
240239
let mayStore = 1;
@@ -569,65 +568,65 @@ multiclass FLAT_Atomic_Pseudo<
569568
defm "" : FLAT_Atomic_Pseudo_RTN<opName, vdst_rc, vt, data_vt, data_rc, data_op>;
570569
}
571570

572-
multiclass FLAT_Global_Atomic_Pseudo_NO_RTN<
571+
class FLAT_Global_Atomic_Pseudo_NO_RTN<
573572
string opName,
574573
RegisterClass vdst_rc,
575574
ValueType vt,
576575
ValueType data_vt = vt,
577576
RegisterClass data_rc = vdst_rc,
578-
RegisterOperand data_op = getLdStRegisterOperand<data_rc>.ret> {
579-
580-
let is_flat_global = 1 in {
581-
def "" : FLAT_AtomicNoRet_Pseudo <opName,
577+
bit EnableSaddr = 0,
578+
RegisterClass VaddrRC = !if(EnableSaddr, VGPR_32, VReg_64),
579+
RegisterOperand data_op = getLdStRegisterOperand<data_rc>.ret> :
580+
FLAT_AtomicNoRet_Pseudo <opName,
582581
(outs),
583-
(ins VReg_64:$vaddr, data_op:$vdata, flat_offset:$offset, CPol_0:$cpol),
584-
" $vaddr, $vdata, off$offset$cpol">,
582+
!con((ins VaddrRC:$vaddr, data_op:$vdata), !if(EnableSaddr, (ins SReg_64_XEXEC_XNULL:$saddr), (ins)),
583+
(ins flat_offset:$offset, CPol_0:$cpol)),
584+
" $vaddr, $vdata, "#!if(EnableSaddr, "$saddr", "off")#"$offset$cpol">,
585585
GlobalSaddrTable<0, opName> {
586-
let has_saddr = 1;
587-
let FPAtomic = data_vt.isFP;
588-
}
586+
let has_saddr = 1;
587+
let enabled_saddr = EnableSaddr;
588+
let FPAtomic = data_vt.isFP;
589+
let is_flat_global = 1;
590+
}
589591

590-
def _SADDR : FLAT_AtomicNoRet_Pseudo <opName,
591-
(outs),
592-
(ins VGPR_32:$vaddr, data_op:$vdata, SReg_64_XEXEC_XNULL:$saddr, flat_offset:$offset, CPol_0:$cpol),
593-
" $vaddr, $vdata, $saddr$offset$cpol">,
594-
GlobalSaddrTable<1, opName> {
595-
let has_saddr = 1;
596-
let enabled_saddr = 1;
597-
let FPAtomic = data_vt.isFP;
598-
}
599-
}
592+
multiclass FLAT_Global_Atomic_Pseudo_Helper_NO_RTN<string opName,
593+
RegisterClass vdst_rc,
594+
ValueType vt,
595+
ValueType data_vt = vt,
596+
RegisterClass data_rc = vdst_rc> {
597+
def "" : FLAT_Global_Atomic_Pseudo_NO_RTN<opName, vdst_rc, vt, data_vt, data_rc, 0>;
598+
def _SADDR : FLAT_Global_Atomic_Pseudo_NO_RTN<opName, vdst_rc, vt, data_vt, data_rc, 1>;
600599
}
601600

602-
multiclass FLAT_Global_Atomic_Pseudo_RTN<
601+
class FLAT_Global_Atomic_Pseudo_RTN<
603602
string opName,
604603
RegisterClass vdst_rc,
605604
ValueType vt,
606605
ValueType data_vt = vt,
607606
RegisterClass data_rc = vdst_rc,
607+
bit EnableSaddr = 0,
608+
RegisterClass VaddrRC = !if(EnableSaddr, VGPR_32, VReg_64),
608609
RegisterOperand data_op = getLdStRegisterOperand<data_rc>.ret,
609-
RegisterOperand vdst_op = getLdStRegisterOperand<vdst_rc>.ret> {
610-
611-
let is_flat_global = 1 in {
612-
def _RTN : FLAT_AtomicRet_Pseudo <opName,
610+
RegisterOperand vdst_op = getLdStRegisterOperand<vdst_rc>.ret> :
611+
FLAT_AtomicRet_Pseudo <opName,
613612
(outs vdst_op:$vdst),
614-
(ins VReg_64:$vaddr, data_op:$vdata, flat_offset:$offset, CPol_GLC1:$cpol),
615-
" $vdst, $vaddr, $vdata, off$offset$cpol">,
613+
!con((ins VaddrRC:$vaddr, data_op:$vdata), !if(EnableSaddr, (ins SReg_64_XEXEC_XNULL:$saddr), (ins)),
614+
(ins flat_offset:$offset, CPol_GLC1:$cpol)),
615+
" $vdst, $vaddr, $vdata, "#!if(EnableSaddr, "$saddr", "off")#"$offset$cpol">,
616616
GlobalSaddrTable<0, opName#"_rtn"> {
617-
let has_saddr = 1;
618-
let FPAtomic = data_vt.isFP;
619-
}
617+
let has_saddr = 1;
618+
let enabled_saddr = EnableSaddr;
619+
let FPAtomic = data_vt.isFP;
620+
let is_flat_global = 1;
621+
}
620622

621-
def _SADDR_RTN : FLAT_AtomicRet_Pseudo <opName,
622-
(outs vdst_op:$vdst),
623-
(ins VGPR_32:$vaddr, data_op:$vdata, SReg_64_XEXEC_XNULL:$saddr, flat_offset:$offset, CPol_GLC1:$cpol),
624-
" $vdst, $vaddr, $vdata, $saddr$offset$cpol">,
625-
GlobalSaddrTable<1, opName#"_rtn"> {
626-
let has_saddr = 1;
627-
let enabled_saddr = 1;
628-
let FPAtomic = data_vt.isFP;
629-
}
630-
}
623+
multiclass FLAT_Global_Atomic_Pseudo_Helper_RTN<string opName,
624+
RegisterClass vdst_rc,
625+
ValueType vt,
626+
ValueType data_vt = vt,
627+
RegisterClass data_rc = vdst_rc> {
628+
def _RTN : FLAT_Global_Atomic_Pseudo_RTN<opName, vdst_rc, vt, data_vt, data_rc, 0>;
629+
def _SADDR_RTN : FLAT_Global_Atomic_Pseudo_RTN<opName, vdst_rc, vt, data_vt, data_rc, 1>;
631630
}
632631

633632
multiclass FLAT_Global_Atomic_Pseudo<
@@ -636,8 +635,8 @@ multiclass FLAT_Global_Atomic_Pseudo<
636635
ValueType vt,
637636
ValueType data_vt = vt,
638637
RegisterClass data_rc = vdst_rc> {
639-
defm "" : FLAT_Global_Atomic_Pseudo_NO_RTN<opName, vdst_rc, vt, data_vt, data_rc>;
640-
defm "" : FLAT_Global_Atomic_Pseudo_RTN<opName, vdst_rc, vt, data_vt, data_rc>;
638+
defm "" : FLAT_Global_Atomic_Pseudo_Helper_NO_RTN<opName, vdst_rc, vt, data_vt, data_rc>;
639+
defm "" : FLAT_Global_Atomic_Pseudo_Helper_RTN<opName, vdst_rc, vt, data_vt, data_rc>;
641640
}
642641

643642
//===----------------------------------------------------------------------===//
@@ -1018,19 +1017,19 @@ let SubtargetPredicate = isGFX10Plus in {
10181017
} // End SubtargetPredicate = isGFX10Plus
10191018

10201019
let OtherPredicates = [HasAtomicFaddNoRtnInsts] in
1021-
defm GLOBAL_ATOMIC_ADD_F32 : FLAT_Global_Atomic_Pseudo_NO_RTN <
1020+
defm GLOBAL_ATOMIC_ADD_F32 : FLAT_Global_Atomic_Pseudo_Helper_NO_RTN <
10221021
"global_atomic_add_f32", VGPR_32, f32
10231022
>;
10241023
let OtherPredicates = [HasAtomicBufferGlobalPkAddF16NoRtnInsts] in
1025-
defm GLOBAL_ATOMIC_PK_ADD_F16 : FLAT_Global_Atomic_Pseudo_NO_RTN <
1024+
defm GLOBAL_ATOMIC_PK_ADD_F16 : FLAT_Global_Atomic_Pseudo_Helper_NO_RTN <
10261025
"global_atomic_pk_add_f16", VGPR_32, v2f16
10271026
>;
10281027
let OtherPredicates = [HasAtomicFaddRtnInsts] in
1029-
defm GLOBAL_ATOMIC_ADD_F32 : FLAT_Global_Atomic_Pseudo_RTN <
1028+
defm GLOBAL_ATOMIC_ADD_F32 : FLAT_Global_Atomic_Pseudo_Helper_RTN <
10301029
"global_atomic_add_f32", VGPR_32, f32
10311030
>;
10321031
let OtherPredicates = [HasAtomicBufferGlobalPkAddF16Insts] in
1033-
defm GLOBAL_ATOMIC_PK_ADD_F16 : FLAT_Global_Atomic_Pseudo_RTN <
1032+
defm GLOBAL_ATOMIC_PK_ADD_F16 : FLAT_Global_Atomic_Pseudo_Helper_RTN <
10341033
"global_atomic_pk_add_f16", VGPR_32, v2f16
10351034
>;
10361035

0 commit comments

Comments
 (0)