Skip to content

Commit 8839f10

Browse files
- Remove new nodes and always use ZPR2/ZPR4 register classes
1 parent 463c0fa commit 8839f10

File tree

5 files changed

+19
-41
lines changed

5 files changed

+19
-41
lines changed

llvm/lib/Target/AArch64/AArch64ExpandPseudoInsts.cpp

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1755,10 +1755,8 @@ bool AArch64ExpandPseudo::expandMI(MachineBasicBlock &MBB,
17551755
MBB, MBBI, AArch64::ZPR4RegClass, AArch64::ZPR4StridedRegClass,
17561756
AArch64::LDNT1D_4Z, AArch64::LDNT1D_4Z_STRIDED);
17571757
case AArch64::FORM_TRANSPOSED_REG_TUPLE_X2_PSEUDO:
1758-
case AArch64::FORM_TRANSPOSED_REG_TUPLE_MULX2_PSEUDO:
17591758
return expandFormTuplePseudo(MBB, MBBI, NextMBBI, 2);
17601759
case AArch64::FORM_TRANSPOSED_REG_TUPLE_X4_PSEUDO:
1761-
case AArch64::FORM_TRANSPOSED_REG_TUPLE_MULX4_PSEUDO:
17621760
return expandFormTuplePseudo(MBB, MBBI, NextMBBI, 4);
17631761
}
17641762
return false;

llvm/lib/Target/AArch64/AArch64ISelLowering.cpp

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -8759,19 +8759,17 @@ static bool checkZExtBool(SDValue Arg, const SelectionDAG &DAG) {
87598759
// %6:zpr2stridedorcontiguous = LD1B_2Z_PSEUDO ..
87608760
// %7:zpr = COPY %6.zsub1:zpr2stridedorcontiguous
87618761
// %8:zpr = COPY %6.zsub0:zpr2stridedorcontiguous
8762-
// %9:zpr2mul2 = FORM_TRANSPOSED_REG_TUPLE_MULX2_PSEUDO %5:zpr, %8:zpr
8762+
// %9:zpr2mul2 = FORM_TRANSPOSED_REG_TUPLE_X2_PSEUDO %5:zpr, %8:zpr
87638763
//
87648764
bool shouldUseFormStridedPseudo(MachineInstr &MI) {
87658765
MachineRegisterInfo &MRI = MI.getMF()->getRegInfo();
87668766

87678767
const TargetRegisterClass *RegClass = nullptr;
87688768
switch (MI.getOpcode()) {
87698769
case AArch64::FORM_TRANSPOSED_REG_TUPLE_X2_PSEUDO:
8770-
case AArch64::FORM_TRANSPOSED_REG_TUPLE_MULX2_PSEUDO:
87718770
RegClass = &AArch64::ZPR2StridedOrContiguousRegClass;
87728771
break;
87738772
case AArch64::FORM_TRANSPOSED_REG_TUPLE_X4_PSEUDO:
8774-
case AArch64::FORM_TRANSPOSED_REG_TUPLE_MULX4_PSEUDO:
87758773
RegClass = &AArch64::ZPR4StridedOrContiguousRegClass;
87768774
break;
87778775
default:
@@ -8826,14 +8824,14 @@ void AArch64TargetLowering::AdjustInstrPostInstrSelection(MachineInstr &MI,
88268824
}
88278825
}
88288826

8829-
const AArch64InstrInfo *TII =
8830-
MI.getMF()->getSubtarget<AArch64Subtarget>().getInstrInfo();
8831-
if (TII->isFormTransposedOpcode(MI.getOpcode())) {
8827+
if (MI.getOpcode() == AArch64::FORM_TRANSPOSED_REG_TUPLE_X2_PSEUDO ||
8828+
MI.getOpcode() == AArch64::FORM_TRANSPOSED_REG_TUPLE_X4_PSEUDO) {
88328829
// If input values to the FORM_TRANSPOSED_REG_TUPLE pseudo aren't copies
88338830
// from a StridedOrContiguous class, fall back on REG_SEQUENCE node.
88348831
if (shouldUseFormStridedPseudo(MI))
88358832
return;
88368833

8834+
const TargetInstrInfo *TII = Subtarget->getInstrInfo();
88378835
MachineInstrBuilder MIB = BuildMI(*MI.getParent(), MI, MI.getDebugLoc(),
88388836
TII->get(TargetOpcode::REG_SEQUENCE),
88398837
MI.getOperand(0).getReg());

llvm/lib/Target/AArch64/AArch64InstrInfo.h

Lines changed: 0 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -548,18 +548,6 @@ class AArch64InstrInfo final : public AArch64GenInstrInfo {
548548
Register TargetReg,
549549
bool FrameSetup) const;
550550

551-
bool isFormTransposedOpcode(unsigned Opc) const {
552-
switch (Opc) {
553-
case AArch64::FORM_TRANSPOSED_REG_TUPLE_X2_PSEUDO:
554-
case AArch64::FORM_TRANSPOSED_REG_TUPLE_X4_PSEUDO:
555-
case AArch64::FORM_TRANSPOSED_REG_TUPLE_MULX2_PSEUDO:
556-
case AArch64::FORM_TRANSPOSED_REG_TUPLE_MULX4_PSEUDO:
557-
return true;
558-
default:
559-
return false;
560-
}
561-
}
562-
563551
#define GET_INSTRINFO_HELPER_DECLS
564552
#include "AArch64GenInstrInfo.inc"
565553

llvm/lib/Target/AArch64/AArch64RegisterInfo.cpp

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1109,14 +1109,13 @@ bool AArch64RegisterInfo::getRegAllocationHints(
11091109
// so we add the strided registers as a hint.
11101110
unsigned RegID = MRI.getRegClass(VirtReg)->getID();
11111111
// Look through uses of the register for FORM_TRANSPOSED_REG_TUPLE.
1112-
const AArch64InstrInfo *TII =
1113-
MF.getSubtarget<AArch64Subtarget>().getInstrInfo();
11141112
if ((RegID == AArch64::ZPR2StridedOrContiguousRegClassID ||
11151113
RegID == AArch64::ZPR4StridedOrContiguousRegClassID) &&
1116-
any_of(MRI.use_nodbg_instructions(VirtReg),
1117-
[&TII](const MachineInstr &Use) {
1118-
return TII->isFormTransposedOpcode(Use.getOpcode());
1119-
})) {
1114+
any_of(MRI.use_nodbg_instructions(VirtReg), [](const MachineInstr &Use) {
1115+
return Use.getOpcode() ==
1116+
AArch64::FORM_TRANSPOSED_REG_TUPLE_X2_PSEUDO ||
1117+
Use.getOpcode() == AArch64::FORM_TRANSPOSED_REG_TUPLE_X4_PSEUDO;
1118+
})) {
11201119
const TargetRegisterClass *StridedRC =
11211120
RegID == AArch64::ZPR2StridedOrContiguousRegClassID
11221121
? &AArch64::ZPR2StridedRegClass
@@ -1131,7 +1130,8 @@ bool AArch64RegisterInfo::getRegAllocationHints(
11311130
}
11321131

11331132
for (MachineInstr &MI : MRI.def_instructions(VirtReg)) {
1134-
if (!TII->isFormTransposedOpcode(MI.getOpcode()))
1133+
if (MI.getOpcode() != AArch64::FORM_TRANSPOSED_REG_TUPLE_X2_PSEUDO &&
1134+
MI.getOpcode() != AArch64::FORM_TRANSPOSED_REG_TUPLE_X4_PSEUDO)
11351135
return TargetRegisterInfo::getRegAllocationHints(VirtReg, Order, Hints,
11361136
MF, VRM);
11371137

llvm/lib/Target/AArch64/SMEInstrFormats.td

Lines changed: 8 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -45,26 +45,20 @@ def am_sme_indexed_b4 : ComplexPattern<iPTR, 2, "SelectAddrModeIndexedSVE<0, 15>
4545
// If the operands do not match this pattern, the pseudos are expanded
4646
// to a REG_SEQUENCE using the post-isel hook.
4747

48-
class sme_form_transpose_x2_pseudo<RegisterClass multi_vector_class>
49-
: Pseudo<(outs multi_vector_class:$tup), (ins ZPR:$zn0, ZPR:$zn1), []>,
50-
Sched<[]> {
48+
def FORM_TRANSPOSED_REG_TUPLE_X2_PSEUDO :
49+
Pseudo<(outs ZPR2:$tup),
50+
(ins ZPR:$zn0, ZPR:$zn1), []>, Sched<[]>{
5151
let hasSideEffects = 0;
5252
let hasPostISelHook = 1;
5353
}
5454

55-
def FORM_TRANSPOSED_REG_TUPLE_X2_PSEUDO : sme_form_transpose_x2_pseudo<ZPR2>;
56-
def FORM_TRANSPOSED_REG_TUPLE_MULX2_PSEUDO : sme_form_transpose_x2_pseudo<ZPR2Mul2>;
57-
58-
class sme_form_transpose_x4_pseudo<RegisterClass multi_vector_class>
59-
: Pseudo<(outs multi_vector_class:$tup), (ins ZPR:$zn0, ZPR:$zn1, ZPR:$zn2, ZPR:$zn3), []>,
60-
Sched<[]> {
55+
def FORM_TRANSPOSED_REG_TUPLE_X4_PSEUDO :
56+
Pseudo<(outs ZPR4:$tup),
57+
(ins ZPR:$zn0, ZPR:$zn1, ZPR:$zn2, ZPR:$zn3), []>, Sched<[]>{
6158
let hasSideEffects = 0;
6259
let hasPostISelHook = 1;
6360
}
6461

65-
def FORM_TRANSPOSED_REG_TUPLE_X4_PSEUDO : sme_form_transpose_x4_pseudo<ZPR4>;
66-
def FORM_TRANSPOSED_REG_TUPLE_MULX4_PSEUDO : sme_form_transpose_x4_pseudo<ZPR4Mul4>;
67-
6862
def SDTZALoadStore : SDTypeProfile<0, 3, [SDTCisInt<0>, SDTCisPtrTy<1>, SDTCisInt<2>]>;
6963
def AArch64SMELdr : SDNode<"AArch64ISD::SME_ZA_LDR", SDTZALoadStore,
7064
[SDNPHasChain, SDNPSideEffect, SDNPMayLoad]>;
@@ -203,14 +197,14 @@ class SME2_ZA_TwoOp_VG2_Multi_Index_Pat<string name, SDPatternOperator intrinsic
203197
Operand imm_ty, ComplexPattern tileslice>
204198
: Pat<(intrinsic (i32 (tileslice MatrixIndexGPR32Op8_11:$base, index_ty:$offset)), vt:$Zn1, vt:$Zn2, vt:$Zm, (i32 imm_ty:$i)),
205199
(!cast<Instruction>(name # _PSEUDO) $base, $offset,
206-
(FORM_TRANSPOSED_REG_TUPLE_MULX2_PSEUDO vt:$Zn1,vt:$Zn2), zpr_ty:$Zm, imm_ty:$i)>;
200+
(FORM_TRANSPOSED_REG_TUPLE_X2_PSEUDO vt:$Zn1,vt:$Zn2), zpr_ty:$Zm, imm_ty:$i)>;
207201

208202
class SME2_ZA_TwoOp_VG4_Multi_Index_Pat<string name, SDPatternOperator intrinsic, Operand index_ty, ZPRRegOp zpr_ty, ValueType vt,
209203
Operand imm_ty, ComplexPattern tileslice>
210204
: Pat<(intrinsic (i32 (tileslice MatrixIndexGPR32Op8_11:$base, index_ty:$offset)),
211205
vt:$Zn1, vt:$Zn2, vt:$Zn3, vt:$Zn4, vt:$Zm, (i32 imm_ty:$i)),
212206
(!cast<Instruction>(name # _PSEUDO) $base, $offset,
213-
(FORM_TRANSPOSED_REG_TUPLE_MULX4_PSEUDO vt:$Zn1, vt:$Zn2, vt:$Zn3, vt:$Zn4),
207+
(FORM_TRANSPOSED_REG_TUPLE_X4_PSEUDO vt:$Zn1, vt:$Zn2, vt:$Zn3, vt:$Zn4),
214208
zpr_ty:$Zm, imm_ty:$i)>;
215209

216210
class SME2_Sat_Shift_VG2_Pat<string name, SDPatternOperator intrinsic, ValueType out_vt, ValueType in_vt, Operand imm_ty>

0 commit comments

Comments
 (0)