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