@@ -8323,6 +8323,29 @@ def MVNIv4s_msl : SIMDModifiedImmMoveMSL<1, 1, {1,1,0,?}, V128, "mvni", ".4s",
83238323 (AArch64mvni_msl imm0_255:$imm8, (i32 imm:$shift)))]>;
83248324}
83258325
8326+ // SABA patterns for add(x, abs(y)) -> saba(x, y, 0)
8327+ def : Pat<(v8i8 (add V64:$Vn, (abs V64:$Vm))),
8328+ (SABAv8i8 V64:$Vn, V64:$Vm, (EXTRACT_SUBREG (MOVIv2d_ns (i32 0)), dsub))>;
8329+ def : Pat<(v4i16 (add V64:$Vn, (abs V64:$Vm))),
8330+ (SABAv4i16 V64:$Vn, V64:$Vm, (EXTRACT_SUBREG (MOVIv2d_ns (i32 0)), dsub))>;
8331+ def : Pat<(v2i32 (add V64:$Vn, (abs V64:$Vm))),
8332+ (SABAv2i32 V64:$Vn, V64:$Vm, (EXTRACT_SUBREG (MOVIv2d_ns (i32 0)), dsub))>;
8333+ def : Pat<(v16i8 (add V128:$Vn, (abs V128:$Vm))),
8334+ (SABAv16i8 V128:$Vn, V128:$Vm, (MOVIv2d_ns (i32 0)))>;
8335+ def : Pat<(v8i16 (add V128:$Vn, (abs V128:$Vm))),
8336+ (SABAv8i16 V128:$Vn, V128:$Vm, (MOVIv2d_ns (i32 0)))>;
8337+ def : Pat<(v4i32 (add V128:$Vn, (abs V128:$Vm))),
8338+ (SABAv4i32 V128:$Vn, V128:$Vm, (MOVIv2d_ns (i32 0)))>;
8339+
8340+ // SABAL patterns for add(x, zext(abs(y))) -> sabal(x, y, 0)
8341+ def : Pat<(v8i16 (add V128:$Vn, (zext (abs (v8i8 V64:$Vm))))),
8342+ (SABALv8i8_v8i16 V128:$Vn, V64:$Vm, (EXTRACT_SUBREG (MOVIv2d_ns (i32 0)), dsub))>;
8343+ def : Pat<(v4i32 (add V128:$Vn, (zext (abs (v4i16 V64:$Vm))))),
8344+ (SABALv4i16_v4i32 V128:$Vn, V64:$Vm, (EXTRACT_SUBREG (MOVIv2d_ns (i32 0)), dsub))>;
8345+ def : Pat<(v2i64 (add V128:$Vn, (zext (abs (v2i32 V64:$Vm))))),
8346+ (SABALv2i32_v2i64 V128:$Vn, V64:$Vm, (EXTRACT_SUBREG (MOVIv2d_ns (i32 0)), dsub))>;
8347+
8348+
83268349//----------------------------------------------------------------------------
83278350// AdvSIMD indexed element
83288351//----------------------------------------------------------------------------
0 commit comments