Skip to content

Commit 44a4f5f

Browse files
author
Danilo Carvalho Grael
committed
[AArch64][SVE] Add SVE2 mla unpredicated intrinsics.
Summary: Add intrinsics for the MLA unpredicated sve2 instructions: - smlalb, smlalt, umlalb, umlalt, smlslb, smlslt, umlslb, umlslt - sqdmlalb, sqdmlalt, sqdmlslb, sqdmlslt - sqdmlalbt, sqdmlslbt Reviewers: efriedma, sdesmalen, cameron.mcinally, c-rhodes, rengolin, kmclaughlin Subscribers: tschuett, kristof.beyls, hiraditya, rkruppe, psnobl, llvm-commits, amehsan Tags: #llvm Differential Revision: https://reviews.llvm.org/D73746
1 parent 3c89b75 commit 44a4f5f

File tree

4 files changed

+628
-15
lines changed

4 files changed

+628
-15
lines changed

llvm/include/llvm/IR/IntrinsicsAArch64.td

+19
Original file line numberDiff line numberDiff line change
@@ -1816,6 +1816,7 @@ def int_aarch64_sve_sqshrunt : SVE2_2VectorArg_Imm_Narrowing_Intrinsic;
18161816
def int_aarch64_sve_sqrshrunb : SVE2_1VectorArg_Imm_Narrowing_Intrinsic;
18171817
def int_aarch64_sve_sqrshrunt : SVE2_2VectorArg_Imm_Narrowing_Intrinsic;
18181818

1819+
// SVE2 MLA LANE.
18191820
def int_aarch64_sve_smlalb_lane : SVE2_3VectorArg_Indexed_Intrinsic;
18201821
def int_aarch64_sve_smlalt_lane : SVE2_3VectorArg_Indexed_Intrinsic;
18211822
def int_aarch64_sve_umlalb_lane : SVE2_3VectorArg_Indexed_Intrinsic;
@@ -1829,4 +1830,22 @@ def int_aarch64_sve_sqdmlalt_lane : SVE2_3VectorArg_Indexed_Intrinsic;
18291830
def int_aarch64_sve_sqdmlslb_lane : SVE2_3VectorArg_Indexed_Intrinsic;
18301831
def int_aarch64_sve_sqdmlslt_lane : SVE2_3VectorArg_Indexed_Intrinsic;
18311832

1833+
// SVE2 MLA Unpredicated.
1834+
def int_aarch64_sve_smlalb : SVE2_3VectorArg_Long_Intrinsic;
1835+
def int_aarch64_sve_smlalt : SVE2_3VectorArg_Long_Intrinsic;
1836+
def int_aarch64_sve_umlalb : SVE2_3VectorArg_Long_Intrinsic;
1837+
def int_aarch64_sve_umlalt : SVE2_3VectorArg_Long_Intrinsic;
1838+
def int_aarch64_sve_smlslb : SVE2_3VectorArg_Long_Intrinsic;
1839+
def int_aarch64_sve_smlslt : SVE2_3VectorArg_Long_Intrinsic;
1840+
def int_aarch64_sve_umlslb : SVE2_3VectorArg_Long_Intrinsic;
1841+
def int_aarch64_sve_umlslt : SVE2_3VectorArg_Long_Intrinsic;
1842+
1843+
def int_aarch64_sve_sqdmlalb : SVE2_3VectorArg_Long_Intrinsic;
1844+
def int_aarch64_sve_sqdmlalt : SVE2_3VectorArg_Long_Intrinsic;
1845+
def int_aarch64_sve_sqdmlslb : SVE2_3VectorArg_Long_Intrinsic;
1846+
def int_aarch64_sve_sqdmlslt : SVE2_3VectorArg_Long_Intrinsic;
1847+
def int_aarch64_sve_sqdmlalbt : SVE2_3VectorArg_Long_Intrinsic;
1848+
def int_aarch64_sve_sqdmlslbt : SVE2_3VectorArg_Long_Intrinsic;
1849+
1850+
18321851
}

llvm/lib/Target/AArch64/AArch64SVEInstrInfo.td

+14-14
Original file line numberDiff line numberDiff line change
@@ -1477,14 +1477,14 @@ let Predicates = [HasSVE2] in {
14771477
defm UMLSLT_ZZZI : sve2_int_mla_long_by_indexed_elem<0b1111, "umlslt", int_aarch64_sve_umlslt_lane>;
14781478

14791479
// SVE2 integer multiply-add long (vectors, unpredicated)
1480-
defm SMLALB_ZZZ : sve2_int_mla_long<0b10000, "smlalb">;
1481-
defm SMLALT_ZZZ : sve2_int_mla_long<0b10001, "smlalt">;
1482-
defm UMLALB_ZZZ : sve2_int_mla_long<0b10010, "umlalb">;
1483-
defm UMLALT_ZZZ : sve2_int_mla_long<0b10011, "umlalt">;
1484-
defm SMLSLB_ZZZ : sve2_int_mla_long<0b10100, "smlslb">;
1485-
defm SMLSLT_ZZZ : sve2_int_mla_long<0b10101, "smlslt">;
1486-
defm UMLSLB_ZZZ : sve2_int_mla_long<0b10110, "umlslb">;
1487-
defm UMLSLT_ZZZ : sve2_int_mla_long<0b10111, "umlslt">;
1480+
defm SMLALB_ZZZ : sve2_int_mla_long<0b10000, "smlalb", int_aarch64_sve_smlalb>;
1481+
defm SMLALT_ZZZ : sve2_int_mla_long<0b10001, "smlalt", int_aarch64_sve_smlalt>;
1482+
defm UMLALB_ZZZ : sve2_int_mla_long<0b10010, "umlalb", int_aarch64_sve_umlalb>;
1483+
defm UMLALT_ZZZ : sve2_int_mla_long<0b10011, "umlalt", int_aarch64_sve_umlalt>;
1484+
defm SMLSLB_ZZZ : sve2_int_mla_long<0b10100, "smlslb", int_aarch64_sve_smlslb>;
1485+
defm SMLSLT_ZZZ : sve2_int_mla_long<0b10101, "smlslt", int_aarch64_sve_smlslt>;
1486+
defm UMLSLB_ZZZ : sve2_int_mla_long<0b10110, "umlslb", int_aarch64_sve_umlslb>;
1487+
defm UMLSLT_ZZZ : sve2_int_mla_long<0b10111, "umlslt", int_aarch64_sve_umlslt>;
14881488

14891489
// SVE2 saturating multiply-add long (indexed)
14901490
defm SQDMLALB_ZZZI : sve2_int_mla_long_by_indexed_elem<0b0100, "sqdmlalb", int_aarch64_sve_sqdmlalb_lane>;
@@ -1493,14 +1493,14 @@ let Predicates = [HasSVE2] in {
14931493
defm SQDMLSLT_ZZZI : sve2_int_mla_long_by_indexed_elem<0b0111, "sqdmlslt", int_aarch64_sve_sqdmlslt_lane>;
14941494

14951495
// SVE2 saturating multiply-add long (vectors, unpredicated)
1496-
defm SQDMLALB_ZZZ : sve2_int_mla_long<0b11000, "sqdmlalb">;
1497-
defm SQDMLALT_ZZZ : sve2_int_mla_long<0b11001, "sqdmlalt">;
1498-
defm SQDMLSLB_ZZZ : sve2_int_mla_long<0b11010, "sqdmlslb">;
1499-
defm SQDMLSLT_ZZZ : sve2_int_mla_long<0b11011, "sqdmlslt">;
1496+
defm SQDMLALB_ZZZ : sve2_int_mla_long<0b11000, "sqdmlalb", int_aarch64_sve_sqdmlalb>;
1497+
defm SQDMLALT_ZZZ : sve2_int_mla_long<0b11001, "sqdmlalt", int_aarch64_sve_sqdmlalt>;
1498+
defm SQDMLSLB_ZZZ : sve2_int_mla_long<0b11010, "sqdmlslb", int_aarch64_sve_sqdmlslb>;
1499+
defm SQDMLSLT_ZZZ : sve2_int_mla_long<0b11011, "sqdmlslt", int_aarch64_sve_sqdmlslt>;
15001500

15011501
// SVE2 saturating multiply-add interleaved long
1502-
defm SQDMLALBT_ZZZ : sve2_int_mla_long<0b00010, "sqdmlalbt">;
1503-
defm SQDMLSLBT_ZZZ : sve2_int_mla_long<0b00011, "sqdmlslbt">;
1502+
defm SQDMLALBT_ZZZ : sve2_int_mla_long<0b00010, "sqdmlalbt", int_aarch64_sve_sqdmlalbt>;
1503+
defm SQDMLSLBT_ZZZ : sve2_int_mla_long<0b00011, "sqdmlslbt", int_aarch64_sve_sqdmlslbt>;
15041504

15051505
// SVE2 integer halving add/subtract (predicated)
15061506
defm SHADD_ZPmZ : sve2_int_arith_pred<0b100000, "shadd", int_aarch64_sve_shadd>;

llvm/lib/Target/AArch64/SVEInstrFormats.td

+5-1
Original file line numberDiff line numberDiff line change
@@ -2352,10 +2352,14 @@ multiclass sve2_int_mla<bit S, string asm, SDPatternOperator op> {
23522352
def : SVE_3_Op_Pat<nxv2i64, op, nxv2i64, nxv2i64, nxv2i64, !cast<Instruction>(NAME # _D)>;
23532353
}
23542354

2355-
multiclass sve2_int_mla_long<bits<5> opc, string asm> {
2355+
multiclass sve2_int_mla_long<bits<5> opc, string asm, SDPatternOperator op> {
23562356
def _H : sve2_int_mla<0b01, opc, asm, ZPR16, ZPR8>;
23572357
def _S : sve2_int_mla<0b10, opc, asm, ZPR32, ZPR16>;
23582358
def _D : sve2_int_mla<0b11, opc, asm, ZPR64, ZPR32>;
2359+
2360+
def : SVE_3_Op_Pat<nxv8i16, op, nxv8i16, nxv16i8, nxv16i8, !cast<Instruction>(NAME # _H)>;
2361+
def : SVE_3_Op_Pat<nxv4i32, op, nxv4i32, nxv8i16, nxv8i16, !cast<Instruction>(NAME # _S)>;
2362+
def : SVE_3_Op_Pat<nxv2i64, op, nxv2i64, nxv4i32, nxv4i32, !cast<Instruction>(NAME # _D)>;
23592363
}
23602364

23612365
//===----------------------------------------------------------------------===//

0 commit comments

Comments
 (0)