@@ -8303,6 +8303,29 @@ def MVNIv4s_msl : SIMDModifiedImmMoveMSL<1, 1, {1,1,0,?}, V128, "mvni", ".4s",
83038303 (AArch64mvni_msl imm0_255:$imm8, (i32 imm:$shift)))]>;
83048304}
83058305
8306+ // SABA patterns for add(x, abs(y)) -> saba(x, y, 0)
8307+ def : Pat<(v8i8 (add V64:$Vn, (abs V64:$Vm))),
8308+ (SABAv8i8 V64:$Vn, V64:$Vm, (EXTRACT_SUBREG (MOVIv2d_ns (i32 0)), dsub))>;
8309+ def : Pat<(v4i16 (add V64:$Vn, (abs V64:$Vm))),
8310+ (SABAv4i16 V64:$Vn, V64:$Vm, (EXTRACT_SUBREG (MOVIv2d_ns (i32 0)), dsub))>;
8311+ def : Pat<(v2i32 (add V64:$Vn, (abs V64:$Vm))),
8312+ (SABAv2i32 V64:$Vn, V64:$Vm, (EXTRACT_SUBREG (MOVIv2d_ns (i32 0)), dsub))>;
8313+ def : Pat<(v16i8 (add V128:$Vn, (abs V128:$Vm))),
8314+ (SABAv16i8 V128:$Vn, V128:$Vm, (MOVIv2d_ns (i32 0)))>;
8315+ def : Pat<(v8i16 (add V128:$Vn, (abs V128:$Vm))),
8316+ (SABAv8i16 V128:$Vn, V128:$Vm, (MOVIv2d_ns (i32 0)))>;
8317+ def : Pat<(v4i32 (add V128:$Vn, (abs V128:$Vm))),
8318+ (SABAv4i32 V128:$Vn, V128:$Vm, (MOVIv2d_ns (i32 0)))>;
8319+
8320+ // SABAL patterns for add(x, zext(abs(y))) -> sabal(x, y, 0)
8321+ def : Pat<(v8i16 (add V128:$Vn, (zext (abs (v8i8 V64:$Vm))))),
8322+ (SABALv8i8_v8i16 V128:$Vn, V64:$Vm, (EXTRACT_SUBREG (MOVIv2d_ns (i32 0)), dsub))>;
8323+ def : Pat<(v4i32 (add V128:$Vn, (zext (abs (v4i16 V64:$Vm))))),
8324+ (SABALv4i16_v4i32 V128:$Vn, V64:$Vm, (EXTRACT_SUBREG (MOVIv2d_ns (i32 0)), dsub))>;
8325+ def : Pat<(v2i64 (add V128:$Vn, (zext (abs (v2i32 V64:$Vm))))),
8326+ (SABALv2i32_v2i64 V128:$Vn, V64:$Vm, (EXTRACT_SUBREG (MOVIv2d_ns (i32 0)), dsub))>;
8327+
8328+
83068329//----------------------------------------------------------------------------
83078330// AdvSIMD indexed element
83088331//----------------------------------------------------------------------------
0 commit comments