Skip to content

Commit 865104a

Browse files
[AArch64][SME] Change output class of FORM_TRANSPOSED_REG_TUPLE pseudos (llvm#123755)
The FORM_TRANSPOSED_REG_TUPLE pseudo nodes use either the ZPR2Mul2 or ZPR4Mul4 register classes for output. This patch changes the class so that these can be extended to other multi-vector intrinsics which instead create a ZPR2/ZPR4 register sequence.
1 parent 0510d4e commit 865104a

File tree

2 files changed

+463
-4
lines changed

2 files changed

+463
-4
lines changed

llvm/lib/Target/AArch64/SMEInstrFormats.td

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -46,14 +46,14 @@ def am_sme_indexed_b4 : ComplexPattern<iPTR, 2, "SelectAddrModeIndexedSVE<0, 15>
4646
// to a REG_SEQUENCE using the post-isel hook.
4747

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

5555
def FORM_TRANSPOSED_REG_TUPLE_X4_PSEUDO :
56-
Pseudo<(outs ZPR4Mul4:$tup),
56+
Pseudo<(outs ZPR4:$tup),
5757
(ins ZPR:$zn0, ZPR:$zn1, ZPR:$zn2, ZPR:$zn3), []>, Sched<[]>{
5858
let hasSideEffects = 0;
5959
let hasPostISelHook = 1;
@@ -164,14 +164,14 @@ class SME2_ZA_TwoOp_Multi_Single_Pat<string name, SDPatternOperator intrinsic, O
164164
class SME2_ZA_TwoOp_VG2_Multi_Single_Pat<string name, SDPatternOperator intrinsic, Operand index_ty, ZPRRegOp zpr_ty,
165165
ValueType vt, ComplexPattern tileslice>
166166
: Pat<(intrinsic (i32 (tileslice MatrixIndexGPR32Op8_11:$base, index_ty:$offset)), vt:$Zn1, vt:$Zn2, vt:$Zm),
167-
(!cast<Instruction>(name # _PSEUDO) $base, $offset, (REG_SEQUENCE ZPR2, vt:$Zn1, zsub0, vt:$Zn2, zsub1),
167+
(!cast<Instruction>(name # _PSEUDO) $base, $offset, (FORM_TRANSPOSED_REG_TUPLE_X2_PSEUDO vt:$Zn1, vt:$Zn2),
168168
zpr_ty:$Zm)>;
169169
class SME2_ZA_TwoOp_VG4_Multi_Single_Pat<string name, SDPatternOperator intrinsic, Operand index_ty, ZPRRegOp zpr_ty,
170170
ValueType vt, ComplexPattern tileslice>
171171
: Pat<(intrinsic (i32 (tileslice MatrixIndexGPR32Op8_11:$base, index_ty:$offset)),
172172
vt:$Zn1, vt:$Zn2, vt:$Zn3, vt:$Zn4, vt:$Zm),
173173
(!cast<Instruction>(name # _PSEUDO) $base, $offset,
174-
(REG_SEQUENCE ZPR4, vt:$Zn1, zsub0, vt:$Zn2, zsub1, vt:$Zn3, zsub2, vt:$Zn4, zsub3),
174+
(FORM_TRANSPOSED_REG_TUPLE_X4_PSEUDO vt:$Zn1, vt:$Zn2, vt:$Zn3, vt:$Zn4),
175175
zpr_ty:$Zm)>;
176176

177177
class SME2_ZA_TwoOp_VG2_Multi_Multi_Pat<string name, SDPatternOperator intrinsic, Operand index_ty, ValueType vt, ComplexPattern tileslice>

0 commit comments

Comments
 (0)