@@ -1059,6 +1059,10 @@ def AArch64sdot : SDNode<"AArch64ISD::SDOT", SDT_AArch64Dot>;
10591059def AArch64udot : SDNode<"AArch64ISD::UDOT", SDT_AArch64Dot>;
10601060def AArch64usdot : SDNode<"AArch64ISD::USDOT", SDT_AArch64Dot>;
10611061
1062+ // saba/sabal
1063+ def AArch64neonsaba : SDNode<"AArch64ISD::SABA", SDT_AArch64trivec>;
1064+ def AArch64neonsabal : SDNode<"AArch64ISD::SABAL", SDT_AArch64Dot>;
1065+
10621066// Vector across-lanes addition
10631067// Only the lower result lane is defined.
10641068def AArch64saddv : SDNode<"AArch64ISD::SADDV", SDT_AArch64UnaryVec>;
@@ -6121,6 +6125,19 @@ defm SQRDMLAH : SIMDThreeSameVectorSQRDMLxHTiedHS<1,0b10000,"sqrdmlah",
61216125defm SQRDMLSH : SIMDThreeSameVectorSQRDMLxHTiedHS<1,0b10001,"sqrdmlsh",
61226126 int_aarch64_neon_sqrdmlsh>;
61236127
6128+ def : Pat<(AArch64neonsaba (v8i8 V64:$Rd), V64:$Rn, V64:$Rm),
6129+ (SABAv8i8 V64:$Rd, V64:$Rn, V64:$Rm)>;
6130+ def : Pat<(AArch64neonsaba (v4i16 V64:$Rd), V64:$Rn, V64:$Rm),
6131+ (SABAv4i16 V64:$Rd, V64:$Rn, V64:$Rm)>;
6132+ def : Pat<(AArch64neonsaba (v2i32 V64:$Rd), V64:$Rn, V64:$Rm),
6133+ (SABAv2i32 V64:$Rd, V64:$Rn, V64:$Rm)>;
6134+ def : Pat<(AArch64neonsaba (v16i8 V128:$Rd), V128:$Rn, V128:$Rm),
6135+ (SABAv16i8 V128:$Rd, V128:$Rn, V128:$Rm)>;
6136+ def : Pat<(AArch64neonsaba (v8i16 V128:$Rd), V128:$Rn, V128:$Rm),
6137+ (SABAv8i16 V128:$Rd, V128:$Rn, V128:$Rm)>;
6138+ def : Pat<(AArch64neonsaba (v4i32 V128:$Rd), V128:$Rn, V128:$Rm),
6139+ (SABAv4i32 V128:$Rd, V128:$Rn, V128:$Rm)>;
6140+
61246141defm AND : SIMDLogicalThreeVector<0, 0b00, "and", and>;
61256142defm BIC : SIMDLogicalThreeVector<0, 0b01, "bic",
61266143 BinOpFrag<(and node:$LHS, (vnot node:$RHS))> >;
@@ -7008,6 +7025,14 @@ defm : AddSubHNPatterns<ADDHNv2i64_v2i32, ADDHNv2i64_v4i32,
70087025 SUBHNv2i64_v2i32, SUBHNv2i64_v4i32,
70097026 v2i32, v2i64, 32>;
70107027
7028+ // Patterns for SABAL
7029+ def : Pat<(AArch64neonsabal (v8i16 V128:$Rd), (v8i8 V64:$Rn), (v8i8 V64:$Rm)),
7030+ (SABALv8i8_v8i16 V128:$Rd, V64:$Rn, V64:$Rm)>;
7031+ def : Pat<(AArch64neonsabal (v4i32 V128:$Rd), (v4i16 V64:$Rn), (v4i16 V64:$Rm)),
7032+ (SABALv4i16_v4i32 V128:$Rd, V64:$Rn, V64:$Rm)>;
7033+ def : Pat<(AArch64neonsabal (v2i64 V128:$Rd), (v2i32 V64:$Rn), (v2i32 V64:$Rm)),
7034+ (SABALv2i32_v2i64 V128:$Rd, V64:$Rn, V64:$Rm)>;
7035+
70117036//----------------------------------------------------------------------------
70127037// AdvSIMD bitwise extract from vector instruction.
70137038//----------------------------------------------------------------------------
0 commit comments