Skip to content

Commit

Permalink
[AArch64][SME] NFC: Extend tile_slice ComplexPattern to match default…
Browse files Browse the repository at this point in the history
… case.

A tile slice offset of '0' is the default and by moving this into
SelectSMETileSlice we can remove some redundant patterns.

Reviewed By: kmclaughlin

Differential Revision: https://reviews.llvm.org/D128506
  • Loading branch information
sdesmalen-arm committed Jun 28, 2022
1 parent 96ab083 commit ab72182
Show file tree
Hide file tree
Showing 2 changed files with 16 additions and 36 deletions.
11 changes: 7 additions & 4 deletions llvm/lib/Target/AArch64/AArch64ISelDAGToDAG.cpp
Expand Up @@ -5256,9 +5256,12 @@ bool AArch64DAGToDAGISel::SelectAllActivePredicate(SDValue N) {
}

bool AArch64DAGToDAGISel::SelectSMETileSlice(SDValue N, unsigned Scale,
SDValue &Vector, SDValue &Offset) {
if (N.getOpcode() != ISD::ADD)
return false;
SDValue &Base, SDValue &Offset) {
if (N.getOpcode() != ISD::ADD) {
Base = N;
Offset = CurDAG->getTargetConstant(0, SDLoc(N), MVT::i64);
return true;
}

// Process an ADD node.
const SDValue LHS = N.getOperand(0);
Expand All @@ -5271,7 +5274,7 @@ bool AArch64DAGToDAGISel::SelectSMETileSlice(SDValue N, unsigned Scale,
if (ImmOff < 0 || ImmOff > MaxSize)
return false;

Vector = LHS;
Base = LHS;
Offset = CurDAG->getTargetConstant(ImmOff, SDLoc(N), MVT::i64);
return true;
}
Expand Down
41 changes: 9 additions & 32 deletions llvm/lib/Target/AArch64/SMEInstrFormats.td
Expand Up @@ -251,25 +251,13 @@ multiclass sme_mem_ld_ss_patterns<Instruction Inst, SDPatternOperator Load,
Operand tile_ty, Operand offset_ty,
ComplexPattern addr,
ComplexPattern tileslice> {
// base
// base, tileslice
def : Pat<(Load PPR3bAny:$pg, GPR64sp:$base, tile_ty:$tile,
MatrixIndexGPR32Op12_15:$idx),
(Inst tile_ty:$tile, $idx, 0, $pg, $base, XZR)>;
// reg + reg
let AddedComplexity = 1 in {
def : Pat<(Load PPR3bAny:$pg, (addr GPR64sp:$base, GPR64:$offset),
tile_ty:$tile, MatrixIndexGPR32Op12_15:$idx),
(Inst tile_ty:$tile, $idx, 0, $pg, $base, $offset)>;
}
(i32 (tileslice MatrixIndexGPR32Op12_15:$idx, offset_ty:$imm))),
(Inst tile_ty:$tile, $idx, $imm, $pg, $base, XZR)>;

// base, tileslice
let AddedComplexity = 1 in {
def : Pat<(Load PPR3bAny:$pg, GPR64sp:$base, tile_ty:$tile,
(i32 (tileslice MatrixIndexGPR32Op12_15:$idx, offset_ty:$imm))),
(Inst tile_ty:$tile, $idx, $imm, $pg, $base, XZR)>;
}
// reg + reg, tileslice
let AddedComplexity = 2 in {
let AddedComplexity = 1 in {
def : Pat<(Load PPR3bAny:$pg, (addr GPR64sp:$base, GPR64:$offset),
tile_ty:$tile, (i32 (tileslice MatrixIndexGPR32Op12_15:$idx,
offset_ty:$imm))),
Expand Down Expand Up @@ -410,24 +398,13 @@ multiclass sme_mem_st_ss_patterns<Instruction Inst, SDPatternOperator Store,
ComplexPattern imm2tile,
ComplexPattern addr,
ComplexPattern tileslice> {
// base
def : Pat<(Store PPR3bAny:$pg, GPR64sp:$base, (imm2tile untyped:$tile),
MatrixIndexGPR32Op12_15:$idx),
(Inst $tile, $idx, 0, $pg, $base, XZR)>;
// reg + reg
let AddedComplexity = 1 in {
def : Pat<(Store PPR3bAny:$pg, (addr GPR64sp:$base, GPR64:$offset),
(imm2tile untyped:$tile), MatrixIndexGPR32Op12_15:$idx),
(Inst $tile, $idx, 0, $pg, $base, $offset)>;
}
// base, tileslice
let AddedComplexity = 1 in {
def : Pat<(Store PPR3bAny:$pg, GPR64sp:$base, (imm2tile untyped:$tile),
(i32 (tileslice MatrixIndexGPR32Op12_15:$idx, offset_ty:$imm))),
(Inst $tile, $idx, $imm, $pg, $base, XZR)>;
}
def : Pat<(Store PPR3bAny:$pg, GPR64sp:$base, (imm2tile untyped:$tile),
(i32 (tileslice MatrixIndexGPR32Op12_15:$idx, offset_ty:$imm))),
(Inst $tile, $idx, $imm, $pg, $base, XZR)>;

// reg + reg, tileslice
let AddedComplexity = 2 in {
let AddedComplexity = 1 in {
def : Pat<(Store PPR3bAny:$pg, (addr GPR64sp:$base, GPR64:$offset),
(imm2tile untyped:$tile),
(i32 (tileslice MatrixIndexGPR32Op12_15:$idx, offset_ty:$imm))),
Expand Down

0 comments on commit ab72182

Please sign in to comment.