@@ -2153,6 +2153,56 @@ def : Pat<(f32 f32imm_vldi:$in),
21532153def : Pat<(f64 f64imm_vldi:$in),
21542154 (f64 (EXTRACT_SUBREG (VLDI (to_f64imm_vldi f64imm_vldi:$in)), sub_64))>;
21552155
2156+ // VAVG_{B/H/W/D/BU/HU/WU/DU}, VAVGR_{B/H/W/D/BU/HU/WU/DU}
2157+ def : Pat<(sra (v16i8 (add v16i8:$vj, v16i8:$vk)), (v16i8 (vsplat_imm_eq_1))),
2158+ (VAVG_B v16i8:$vj, v16i8:$vk)>;
2159+ def : Pat<(sra (v8i16 (add v8i16:$vj, v8i16:$vk)), (v8i16 (vsplat_imm_eq_1))),
2160+ (VAVG_H v8i16:$vj, v8i16:$vk)>;
2161+ def : Pat<(sra (v4i32 (add v4i32:$vj, v4i32:$vk)), (v4i32 (vsplat_imm_eq_1))),
2162+ (VAVG_W v4i32:$vj, v4i32:$vk)>;
2163+ def : Pat<(sra (v2i64 (add v2i64:$vj, v2i64:$vk)), (v2i64 (vsplat_imm_eq_1))),
2164+ (VAVG_D v2i64:$vj, v2i64:$vk)>;
2165+ def : Pat<(srl (v16i8 (add v16i8:$vj, v16i8:$vk)), (v16i8 (vsplat_imm_eq_1))),
2166+ (VAVG_BU v16i8:$vj, v16i8:$vk)>;
2167+ def : Pat<(srl (v8i16 (add v8i16:$vj, v8i16:$vk)), (v8i16 (vsplat_imm_eq_1))),
2168+ (VAVG_HU v8i16:$vj, v8i16:$vk)>;
2169+ def : Pat<(srl (v4i32 (add v4i32:$vj, v4i32:$vk)), (v4i32 (vsplat_imm_eq_1))),
2170+ (VAVG_WU v4i32:$vj, v4i32:$vk)>;
2171+ def : Pat<(srl (v2i64 (add v2i64:$vj, v2i64:$vk)), (v2i64 (vsplat_imm_eq_1))),
2172+ (VAVG_DU v2i64:$vj, v2i64:$vk)>;
2173+ def : Pat<(sra (v16i8 (add (v16i8 (add v16i8:$vj, v16i8:$vk)),
2174+ (v16i8 (vsplat_imm_eq_1)))),
2175+ (v16i8 (vsplat_imm_eq_1))),
2176+ (VAVGR_B v16i8:$vj, v16i8:$vk)>;
2177+ def : Pat<(sra (v8i16 (add (v8i16 (add v8i16:$vj, v8i16:$vk)),
2178+ (v8i16 (vsplat_imm_eq_1)))),
2179+ (v8i16 (vsplat_imm_eq_1))),
2180+ (VAVGR_H v8i16:$vj, v8i16:$vk)>;
2181+ def : Pat<(sra (v4i32 (add (v4i32 (add v4i32:$vj, v4i32:$vk)),
2182+ (v4i32 (vsplat_imm_eq_1)))),
2183+ (v4i32 (vsplat_imm_eq_1))),
2184+ (VAVGR_W v4i32:$vj, v4i32:$vk)>;
2185+ def : Pat<(sra (v2i64 (add (v2i64 (add v2i64:$vj, v2i64:$vk)),
2186+ (v2i64 (vsplat_imm_eq_1)))),
2187+ (v2i64 (vsplat_imm_eq_1))),
2188+ (VAVGR_D v2i64:$vj, v2i64:$vk)>;
2189+ def : Pat<(srl (v16i8 (add (v16i8 (add v16i8:$vj, v16i8:$vk)),
2190+ (v16i8 (vsplat_imm_eq_1)))),
2191+ (v16i8 (vsplat_imm_eq_1))),
2192+ (VAVGR_BU v16i8:$vj, v16i8:$vk)>;
2193+ def : Pat<(srl (v8i16 (add (v8i16 (add v8i16:$vj, v8i16:$vk)),
2194+ (v8i16 (vsplat_imm_eq_1)))),
2195+ (v8i16 (vsplat_imm_eq_1))),
2196+ (VAVGR_HU v8i16:$vj, v8i16:$vk)>;
2197+ def : Pat<(srl (v4i32 (add (v4i32 (add v4i32:$vj, v4i32:$vk)),
2198+ (v4i32 (vsplat_imm_eq_1)))),
2199+ (v4i32 (vsplat_imm_eq_1))),
2200+ (VAVGR_WU v4i32:$vj, v4i32:$vk)>;
2201+ def : Pat<(srl (v2i64 (add (v2i64 (add v2i64:$vj, v2i64:$vk)),
2202+ (v2i64 (vsplat_imm_eq_1)))),
2203+ (v2i64 (vsplat_imm_eq_1))),
2204+ (VAVGR_DU v2i64:$vj, v2i64:$vk)>;
2205+
21562206// VABSD_{B/H/W/D}[U]
21572207defm : PatVrVr<abds, "VABSD">;
21582208defm : PatVrVrU<abdu, "VABSD">;
0 commit comments