@@ -1517,6 +1517,18 @@ multiclass InsertExtractPatV2<ValueType vecty, ValueType elemty> {
15171517 }
15181518}
15191519
1520+ multiclass VAvgPat<SDPatternOperator OpNode, string Inst, ValueType vt> {
1521+ def : Pat<(OpNode (vt (add vt:$vj, vt:$vk)), (vt (vsplat_imm_eq_1))),
1522+ (!cast<LAInst>(Inst) vt:$vj, vt:$vk)>;
1523+ }
1524+
1525+ multiclass VAvgrPat<SDPatternOperator OpNode, string Inst, ValueType vt> {
1526+ def : Pat<(OpNode (vt (add (vt (add vt:$vj, vt:$vk)),
1527+ (vt (vsplat_imm_eq_1)))),
1528+ (vt (vsplat_imm_eq_1))),
1529+ (!cast<LAInst>(Inst) vt:$vj, vt:$vk)>;
1530+ }
1531+
15201532let Predicates = [HasExtLSX] in {
15211533
15221534// VADD_{B/H/W/D}
@@ -2154,54 +2166,22 @@ def : Pat<(f64 f64imm_vldi:$in),
21542166 (f64 (EXTRACT_SUBREG (VLDI (to_f64imm_vldi f64imm_vldi:$in)), sub_64))>;
21552167
21562168// 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)>;
2169+ defm : VAvgPat<sra, "VAVG_B", v16i8>;
2170+ defm : VAvgPat<sra, "VAVG_H", v8i16>;
2171+ defm : VAvgPat<sra, "VAVG_W", v4i32>;
2172+ defm : VAvgPat<sra, "VAVG_D", v2i64>;
2173+ defm : VAvgPat<srl, "VAVG_BU", v16i8>;
2174+ defm : VAvgPat<srl, "VAVG_HU", v8i16>;
2175+ defm : VAvgPat<srl, "VAVG_WU", v4i32>;
2176+ defm : VAvgPat<srl, "VAVG_DU", v2i64>;
2177+ defm : VAvgrPat<sra, "VAVGR_B", v16i8>;
2178+ defm : VAvgrPat<sra, "VAVGR_H", v8i16>;
2179+ defm : VAvgrPat<sra, "VAVGR_W", v4i32>;
2180+ defm : VAvgrPat<sra, "VAVGR_D", v2i64>;
2181+ defm : VAvgrPat<srl, "VAVGR_BU", v16i8>;
2182+ defm : VAvgrPat<srl, "VAVGR_HU", v8i16>;
2183+ defm : VAvgrPat<srl, "VAVGR_WU", v4i32>;
2184+ defm : VAvgrPat<srl, "VAVGR_DU", v2i64>;
22052185
22062186// VABSD_{B/H/W/D}[U]
22072187defm : PatVrVr<abds, "VABSD">;
0 commit comments