Skip to content

Commit 1f85dfb

Browse files
author
Danilo Carvalho Grael
committed
[AArch64][SVE] Add SVE2 mla indexed intrinsics.
Summary: Add SVE2 mla indexed intrinsics: - smlalb, smalalt, umlalb, umlalt, smlslb, smlslt, umlslb, umlslt. Reviewers: efriedma, sdesmalen, dancgr, cameron.mcinally, c-rhodes, rengolin Subscribers: tschuett, kristof.beyls, hiraditya, rkruppe, arphaman, psnobl, llvm-commits, amehsan Tags: #llvm Differential Revision: https://reviews.llvm.org/D73576
1 parent dba29f7 commit 1f85dfb

File tree

4 files changed

+492
-13
lines changed

4 files changed

+492
-13
lines changed

llvm/include/llvm/IR/IntrinsicsAArch64.td

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1080,6 +1080,14 @@ let TargetPrefix = "aarch64" in { // All intrinsics start with "llvm.aarch64.".
10801080
llvm_i32_ty],
10811081
[IntrNoMem, ImmArg<2>]>;
10821082

1083+
class SVE2_3VectorArg_Indexed_Intrinsic
1084+
: Intrinsic<[llvm_anyvector_ty],
1085+
[LLVMMatchType<0>,
1086+
LLVMSubdivide2VectorType<0>,
1087+
LLVMSubdivide2VectorType<0>,
1088+
llvm_i64_ty],
1089+
[IntrNoMem, ImmArg<3>]>;
1090+
10831091
// NOTE: There is no relationship between these intrinsics beyond an attempt
10841092
// to reuse currently identical class definitions.
10851093
class AdvSIMD_SVE_LOGB_Intrinsic : AdvSIMD_SVE_CNT_Intrinsic;
@@ -1732,4 +1740,14 @@ def int_aarch64_sve_sqshrunt : SVE2_2VectorArg_Imm_Narrowing_Intrinsic;
17321740

17331741
def int_aarch64_sve_sqrshrunb : SVE2_1VectorArg_Imm_Narrowing_Intrinsic;
17341742
def int_aarch64_sve_sqrshrunt : SVE2_2VectorArg_Imm_Narrowing_Intrinsic;
1743+
1744+
def int_aarch64_sve_smlalb : SVE2_3VectorArg_Indexed_Intrinsic;
1745+
def int_aarch64_sve_smlalt : SVE2_3VectorArg_Indexed_Intrinsic;
1746+
def int_aarch64_sve_umlalb : SVE2_3VectorArg_Indexed_Intrinsic;
1747+
def int_aarch64_sve_umlalt : SVE2_3VectorArg_Indexed_Intrinsic;
1748+
def int_aarch64_sve_smlslb : SVE2_3VectorArg_Indexed_Intrinsic;
1749+
def int_aarch64_sve_smlslt : SVE2_3VectorArg_Indexed_Intrinsic;
1750+
def int_aarch64_sve_umlslb : SVE2_3VectorArg_Indexed_Intrinsic;
1751+
def int_aarch64_sve_umlslt : SVE2_3VectorArg_Indexed_Intrinsic;
1752+
17351753
}

llvm/lib/Target/AArch64/AArch64SVEInstrInfo.td

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1467,14 +1467,14 @@ let Predicates = [HasSVE2] in {
14671467
defm SQDMULLT_ZZZI : sve2_int_mul_long_by_indexed_elem<0b101, "sqdmullt">;
14681468

14691469
// SVE2 integer multiply-add long (indexed)
1470-
defm SMLALB_ZZZI : sve2_int_mla_long_by_indexed_elem<0b1000, "smlalb">;
1471-
defm SMLALT_ZZZI : sve2_int_mla_long_by_indexed_elem<0b1001, "smlalt">;
1472-
defm UMLALB_ZZZI : sve2_int_mla_long_by_indexed_elem<0b1010, "umlalb">;
1473-
defm UMLALT_ZZZI : sve2_int_mla_long_by_indexed_elem<0b1011, "umlalt">;
1474-
defm SMLSLB_ZZZI : sve2_int_mla_long_by_indexed_elem<0b1100, "smlslb">;
1475-
defm SMLSLT_ZZZI : sve2_int_mla_long_by_indexed_elem<0b1101, "smlslt">;
1476-
defm UMLSLB_ZZZI : sve2_int_mla_long_by_indexed_elem<0b1110, "umlslb">;
1477-
defm UMLSLT_ZZZI : sve2_int_mla_long_by_indexed_elem<0b1111, "umlslt">;
1470+
defm SMLALB_ZZZI : sve2_int_mla_long_by_indexed_elem<0b1000, "smlalb", int_aarch64_sve_smlalb>;
1471+
defm SMLALT_ZZZI : sve2_int_mla_long_by_indexed_elem<0b1001, "smlalt", int_aarch64_sve_smlalt>;
1472+
defm UMLALB_ZZZI : sve2_int_mla_long_by_indexed_elem<0b1010, "umlalb", int_aarch64_sve_umlalb>;
1473+
defm UMLALT_ZZZI : sve2_int_mla_long_by_indexed_elem<0b1011, "umlalt", int_aarch64_sve_umlalt>;
1474+
defm SMLSLB_ZZZI : sve2_int_mla_long_by_indexed_elem<0b1100, "smlslb", int_aarch64_sve_smlslb>;
1475+
defm SMLSLT_ZZZI : sve2_int_mla_long_by_indexed_elem<0b1101, "smlslt", int_aarch64_sve_smlslt>;
1476+
defm UMLSLB_ZZZI : sve2_int_mla_long_by_indexed_elem<0b1110, "umlslb", int_aarch64_sve_umlslb>;
1477+
defm UMLSLT_ZZZI : sve2_int_mla_long_by_indexed_elem<0b1111, "umlslt", int_aarch64_sve_umlslt>;
14781478

14791479
// SVE2 integer multiply-add long (vectors, unpredicated)
14801480
defm SMLALB_ZZZ : sve2_int_mla_long<0b10000, "smlalb">;
@@ -1487,10 +1487,10 @@ let Predicates = [HasSVE2] in {
14871487
defm UMLSLT_ZZZ : sve2_int_mla_long<0b10111, "umlslt">;
14881488

14891489
// SVE2 saturating multiply-add long (indexed)
1490-
defm SQDMLALB_ZZZI : sve2_int_mla_long_by_indexed_elem<0b0100, "sqdmlalb">;
1491-
defm SQDMLALT_ZZZI : sve2_int_mla_long_by_indexed_elem<0b0101, "sqdmlalt">;
1492-
defm SQDMLSLB_ZZZI : sve2_int_mla_long_by_indexed_elem<0b0110, "sqdmlslb">;
1493-
defm SQDMLSLT_ZZZI : sve2_int_mla_long_by_indexed_elem<0b0111, "sqdmlslt">;
1490+
defm SQDMLALB_ZZZI : sve2_int_mla_long_by_indexed_elem<0b0100, "sqdmlalb", null_frag>;
1491+
defm SQDMLALT_ZZZI : sve2_int_mla_long_by_indexed_elem<0b0101, "sqdmlalt", null_frag>;
1492+
defm SQDMLSLB_ZZZI : sve2_int_mla_long_by_indexed_elem<0b0110, "sqdmlslb", null_frag>;
1493+
defm SQDMLSLT_ZZZI : sve2_int_mla_long_by_indexed_elem<0b0111, "sqdmlslt", null_frag>;
14941494

14951495
// SVE2 saturating multiply-add long (vectors, unpredicated)
14961496
defm SQDMLALB_ZZZ : sve2_int_mla_long<0b11000, "sqdmlalb">;

llvm/lib/Target/AArch64/SVEInstrFormats.td

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2402,7 +2402,7 @@ multiclass sve2_int_mla_by_indexed_elem<bits<2> opc, bit S, string asm> {
24022402
// SVE2 Integer Multiply-Add Long - Indexed Group
24032403
//===----------------------------------------------------------------------===//
24042404

2405-
multiclass sve2_int_mla_long_by_indexed_elem<bits<4> opc, string asm> {
2405+
multiclass sve2_int_mla_long_by_indexed_elem<bits<4> opc, string asm, SDPatternOperator op> {
24062406
def _S : sve2_int_mla_by_indexed_elem<0b10, { opc{3}, 0b0, opc{2-1}, ?, opc{0} },
24072407
asm, ZPR32, ZPR16, ZPR3b16, VectorIndexH> {
24082408
bits<3> Zm;
@@ -2419,6 +2419,9 @@ multiclass sve2_int_mla_long_by_indexed_elem<bits<4> opc, string asm> {
24192419
let Inst{19-16} = Zm;
24202420
let Inst{11} = iop{0};
24212421
}
2422+
2423+
def : SVE_4_Op_Imm_Pat<nxv4i32, op, nxv4i32, nxv8i16, nxv8i16, i64, VectorIndexH_timm, !cast<Instruction>(NAME # _S)>;
2424+
def : SVE_4_Op_Imm_Pat<nxv2i64, op, nxv2i64, nxv4i32, nxv4i32, i64, VectorIndexS_timm, !cast<Instruction>(NAME # _D)>;
24222425
}
24232426

24242427
//===----------------------------------------------------------------------===//

0 commit comments

Comments
 (0)