[llvm-branch-commits] [llvm] [LoongArch] Revert "Add patterns to support vector type average instructions generation" (PR #198704)

via llvm-branch-commits llvm-branch-commits at lists.llvm.org
Tue May 19 21:12:08 PDT 2026


https://github.com/heiher created https://github.com/llvm/llvm-project/pull/198704

Backport of 301e89fa4456a983d9b0c100e8b211a6551ad81a

Requested-by: @heiher

>From 7d2d4a4685b0b96b149997bd884f4fd093aa7e0f Mon Sep 17 00:00:00 2001
From: hev <wangrui at loongson.cn>
Date: Wed, 20 May 2026 09:09:52 +0800
Subject: [PATCH] [LoongArch] Revert "Add patterns to support vector type
 average instructions generation" (#198306)

Fixes #198254
---
 .../LoongArch/LoongArchLASXInstrInfo.td       |  18 -
 .../Target/LoongArch/LoongArchLSXInstrInfo.td |  30 --
 .../LoongArch/lasx/ir-instruction/avg.ll      | 321 ------------------
 .../LoongArch/lsx/ir-instruction/avg.ll       | 321 ------------------
 4 files changed, 690 deletions(-)
 delete mode 100644 llvm/test/CodeGen/LoongArch/lasx/ir-instruction/avg.ll
 delete mode 100644 llvm/test/CodeGen/LoongArch/lsx/ir-instruction/avg.ll

diff --git a/llvm/lib/Target/LoongArch/LoongArchLASXInstrInfo.td b/llvm/lib/Target/LoongArch/LoongArchLASXInstrInfo.td
index fa4b720e7ba98..d539781dc63eb 100644
--- a/llvm/lib/Target/LoongArch/LoongArchLASXInstrInfo.td
+++ b/llvm/lib/Target/LoongArch/LoongArchLASXInstrInfo.td
@@ -2037,24 +2037,6 @@ def : Pat<(v4i32(fp_to_uint v4f64:$vj)),
                (XVFTINTRZ_LU_D v4f64:$vj)),
               sub_128)>;
 
-// XVAVG_{B/H/W/D/BU/HU/WU/DU}, XVAVGR_{B/H/W/D/BU/HU/WU/DU}
-defm : VAvgPat<sra, "XVAVG_B", v32i8>;
-defm : VAvgPat<sra, "XVAVG_H", v16i16>;
-defm : VAvgPat<sra, "XVAVG_W", v8i32>;
-defm : VAvgPat<sra, "XVAVG_D", v4i64>;
-defm : VAvgPat<srl, "XVAVG_BU", v32i8>;
-defm : VAvgPat<srl, "XVAVG_HU", v16i16>;
-defm : VAvgPat<srl, "XVAVG_WU", v8i32>;
-defm : VAvgPat<srl, "XVAVG_DU", v4i64>;
-defm : VAvgrPat<sra, "XVAVGR_B", v32i8>;
-defm : VAvgrPat<sra, "XVAVGR_H", v16i16>;
-defm : VAvgrPat<sra, "XVAVGR_W", v8i32>;
-defm : VAvgrPat<sra, "XVAVGR_D", v4i64>;
-defm : VAvgrPat<srl, "XVAVGR_BU", v32i8>;
-defm : VAvgrPat<srl, "XVAVGR_HU", v16i16>;
-defm : VAvgrPat<srl, "XVAVGR_WU", v8i32>;
-defm : VAvgrPat<srl, "XVAVGR_DU", v4i64>;
-
 // abs
 def : Pat<(abs v32i8:$xj), (XVSIGNCOV_B v32i8:$xj, v32i8:$xj)>;
 def : Pat<(abs v16i16:$xj), (XVSIGNCOV_H v16i16:$xj, v16i16:$xj)>;
diff --git a/llvm/lib/Target/LoongArch/LoongArchLSXInstrInfo.td b/llvm/lib/Target/LoongArch/LoongArchLSXInstrInfo.td
index da7b6e833c996..1336e751ed355 100644
--- a/llvm/lib/Target/LoongArch/LoongArchLSXInstrInfo.td
+++ b/llvm/lib/Target/LoongArch/LoongArchLSXInstrInfo.td
@@ -1530,18 +1530,6 @@ multiclass InsertExtractPatV2<ValueType vecty, ValueType elemty> {
   }
 }
 
-multiclass VAvgPat<SDPatternOperator OpNode, string Inst, ValueType vt> {
-  def : Pat<(OpNode (vt (add vt:$vj, vt:$vk)), (vt (vsplat_imm_eq_1))),
-            (!cast<LAInst>(Inst) vt:$vj, vt:$vk)>;
-}
-
-multiclass VAvgrPat<SDPatternOperator OpNode, string Inst, ValueType vt> {
-  def : Pat<(OpNode (vt (add (vt (add vt:$vj, vt:$vk)),
-                             (vt (vsplat_imm_eq_1)))),
-                    (vt (vsplat_imm_eq_1))),
-            (!cast<LAInst>(Inst) vt:$vj, vt:$vk)>;
-}
-
 let Predicates = [HasExtLSX] in {
 
 // VADD_{B/H/W/D}
@@ -2187,24 +2175,6 @@ def : Pat<(f32 f32imm_vldi:$in),
 def : Pat<(f64 f64imm_vldi:$in),
           (f64 (EXTRACT_SUBREG (VLDI (to_f64imm_vldi f64imm_vldi:$in)), sub_64))>;
 
-// VAVG_{B/H/W/D/BU/HU/WU/DU}, VAVGR_{B/H/W/D/BU/HU/WU/DU}
-defm : VAvgPat<sra, "VAVG_B", v16i8>;
-defm : VAvgPat<sra, "VAVG_H", v8i16>;
-defm : VAvgPat<sra, "VAVG_W", v4i32>;
-defm : VAvgPat<sra, "VAVG_D", v2i64>;
-defm : VAvgPat<srl, "VAVG_BU", v16i8>;
-defm : VAvgPat<srl, "VAVG_HU", v8i16>;
-defm : VAvgPat<srl, "VAVG_WU", v4i32>;
-defm : VAvgPat<srl, "VAVG_DU", v2i64>;
-defm : VAvgrPat<sra, "VAVGR_B", v16i8>;
-defm : VAvgrPat<sra, "VAVGR_H", v8i16>;
-defm : VAvgrPat<sra, "VAVGR_W", v4i32>;
-defm : VAvgrPat<sra, "VAVGR_D", v2i64>;
-defm : VAvgrPat<srl, "VAVGR_BU", v16i8>;
-defm : VAvgrPat<srl, "VAVGR_HU", v8i16>;
-defm : VAvgrPat<srl, "VAVGR_WU", v4i32>;
-defm : VAvgrPat<srl, "VAVGR_DU", v2i64>;
-
 // abs
 def : Pat<(abs v16i8:$vj), (VSIGNCOV_B v16i8:$vj, v16i8:$vj)>;
 def : Pat<(abs v8i16:$vj), (VSIGNCOV_H v8i16:$vj, v8i16:$vj)>;
diff --git a/llvm/test/CodeGen/LoongArch/lasx/ir-instruction/avg.ll b/llvm/test/CodeGen/LoongArch/lasx/ir-instruction/avg.ll
deleted file mode 100644
index 5c5c19935080b..0000000000000
--- a/llvm/test/CodeGen/LoongArch/lasx/ir-instruction/avg.ll
+++ /dev/null
@@ -1,321 +0,0 @@
-; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 6
-; RUN: llc --mtriple=loongarch32 --mattr=+32s,+lasx < %s | FileCheck %s --check-prefixes=CHECK,LA32
-; RUN: llc --mtriple=loongarch64 --mattr=+lasx < %s | FileCheck %s --check-prefixes=CHECK,LA64
-
-define void @xvavg_b(ptr %res, ptr %a, ptr %b) nounwind {
-; CHECK-LABEL: xvavg_b:
-; CHECK:       # %bb.0: # %entry
-; CHECK-NEXT:    xvld $xr0, $a1, 0
-; CHECK-NEXT:    xvld $xr1, $a2, 0
-; CHECK-NEXT:    xvavg.b $xr0, $xr0, $xr1
-; CHECK-NEXT:    xvst $xr0, $a0, 0
-; CHECK-NEXT:    ret
-entry:
-  %va = load <32 x i8>, ptr %a
-  %vb = load <32 x i8>, ptr %b
-  %add = add <32 x i8> %va, %vb
-  %shr = ashr <32 x i8> %add, <i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1>
-  store <32 x i8> %shr, ptr %res
-  ret void
-}
-
-define void @xvavg_h(ptr %res, ptr %a, ptr %b) nounwind {
-; CHECK-LABEL: xvavg_h:
-; CHECK:       # %bb.0: # %entry
-; CHECK-NEXT:    xvld $xr0, $a1, 0
-; CHECK-NEXT:    xvld $xr1, $a2, 0
-; CHECK-NEXT:    xvavg.h $xr0, $xr0, $xr1
-; CHECK-NEXT:    xvst $xr0, $a0, 0
-; CHECK-NEXT:    ret
-entry:
-  %va = load <16 x i16>, ptr %a
-  %vb = load <16 x i16>, ptr %b
-  %add = add <16 x i16> %va, %vb
-  %shr = ashr <16 x i16> %add, <i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1>
-  store <16 x i16> %shr, ptr %res
-  ret void
-}
-
-define void @xvavg_w(ptr %res, ptr %a, ptr %b) nounwind {
-; CHECK-LABEL: xvavg_w:
-; CHECK:       # %bb.0: # %entry
-; CHECK-NEXT:    xvld $xr0, $a1, 0
-; CHECK-NEXT:    xvld $xr1, $a2, 0
-; CHECK-NEXT:    xvavg.w $xr0, $xr0, $xr1
-; CHECK-NEXT:    xvst $xr0, $a0, 0
-; CHECK-NEXT:    ret
-entry:
-  %va = load <8 x i32>, ptr %a
-  %vb = load <8 x i32>, ptr %b
-  %add = add <8 x i32> %va, %vb
-  %shr = ashr <8 x i32> %add, <i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1>
-  store <8 x i32> %shr, ptr %res
-  ret void
-}
-
-define void @xvavg_d(ptr %res, ptr %a, ptr %b) nounwind {
-; LA32-LABEL: xvavg_d:
-; LA32:       # %bb.0: # %entry
-; LA32-NEXT:    xvld $xr0, $a1, 0
-; LA32-NEXT:    xvld $xr1, $a2, 0
-; LA32-NEXT:    xvadd.d $xr0, $xr0, $xr1
-; LA32-NEXT:    xvsrai.d $xr0, $xr0, 1
-; LA32-NEXT:    xvst $xr0, $a0, 0
-; LA32-NEXT:    ret
-;
-; LA64-LABEL: xvavg_d:
-; LA64:       # %bb.0: # %entry
-; LA64-NEXT:    xvld $xr0, $a1, 0
-; LA64-NEXT:    xvld $xr1, $a2, 0
-; LA64-NEXT:    xvavg.d $xr0, $xr0, $xr1
-; LA64-NEXT:    xvst $xr0, $a0, 0
-; LA64-NEXT:    ret
-entry:
-  %va = load <4 x i64>, ptr %a
-  %vb = load <4 x i64>, ptr %b
-  %add = add <4 x i64> %va, %vb
-  %shr = ashr <4 x i64> %add, <i64 1, i64 1, i64 1, i64 1>
-  store <4 x i64> %shr, ptr %res
-  ret void
-}
-
-define void @xvavg_bu(ptr %res, ptr %a, ptr %b) nounwind {
-; CHECK-LABEL: xvavg_bu:
-; CHECK:       # %bb.0: # %entry
-; CHECK-NEXT:    xvld $xr0, $a1, 0
-; CHECK-NEXT:    xvld $xr1, $a2, 0
-; CHECK-NEXT:    xvavg.bu $xr0, $xr0, $xr1
-; CHECK-NEXT:    xvst $xr0, $a0, 0
-; CHECK-NEXT:    ret
-entry:
-  %va = load <32 x i8>, ptr %a
-  %vb = load <32 x i8>, ptr %b
-  %add = add <32 x i8> %va, %vb
-  %shr = lshr <32 x i8> %add, <i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1>
-  store <32 x i8> %shr, ptr %res
-  ret void
-}
-
-define void @xvavg_hu(ptr %res, ptr %a, ptr %b) nounwind {
-; CHECK-LABEL: xvavg_hu:
-; CHECK:       # %bb.0: # %entry
-; CHECK-NEXT:    xvld $xr0, $a1, 0
-; CHECK-NEXT:    xvld $xr1, $a2, 0
-; CHECK-NEXT:    xvavg.hu $xr0, $xr0, $xr1
-; CHECK-NEXT:    xvst $xr0, $a0, 0
-; CHECK-NEXT:    ret
-entry:
-  %va = load <16 x i16>, ptr %a
-  %vb = load <16 x i16>, ptr %b
-  %add = add <16 x i16> %va, %vb
-  %shr = lshr <16 x i16> %add, <i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1>
-  store <16 x i16> %shr, ptr %res
-  ret void
-}
-
-define void @xvavg_wu(ptr %res, ptr %a, ptr %b) nounwind {
-; CHECK-LABEL: xvavg_wu:
-; CHECK:       # %bb.0: # %entry
-; CHECK-NEXT:    xvld $xr0, $a1, 0
-; CHECK-NEXT:    xvld $xr1, $a2, 0
-; CHECK-NEXT:    xvavg.wu $xr0, $xr0, $xr1
-; CHECK-NEXT:    xvst $xr0, $a0, 0
-; CHECK-NEXT:    ret
-entry:
-  %va = load <8 x i32>, ptr %a
-  %vb = load <8 x i32>, ptr %b
-  %add = add <8 x i32> %va, %vb
-  %shr = lshr <8 x i32> %add, <i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1>
-  store <8 x i32> %shr, ptr %res
-  ret void
-}
-
-define void @xvavg_du(ptr %res, ptr %a, ptr %b) nounwind {
-; LA32-LABEL: xvavg_du:
-; LA32:       # %bb.0: # %entry
-; LA32-NEXT:    xvld $xr0, $a1, 0
-; LA32-NEXT:    xvld $xr1, $a2, 0
-; LA32-NEXT:    xvadd.d $xr0, $xr0, $xr1
-; LA32-NEXT:    xvsrli.d $xr0, $xr0, 1
-; LA32-NEXT:    xvst $xr0, $a0, 0
-; LA32-NEXT:    ret
-;
-; LA64-LABEL: xvavg_du:
-; LA64:       # %bb.0: # %entry
-; LA64-NEXT:    xvld $xr0, $a1, 0
-; LA64-NEXT:    xvld $xr1, $a2, 0
-; LA64-NEXT:    xvavg.du $xr0, $xr0, $xr1
-; LA64-NEXT:    xvst $xr0, $a0, 0
-; LA64-NEXT:    ret
-entry:
-  %va = load <4 x i64>, ptr %a
-  %vb = load <4 x i64>, ptr %b
-  %add = add <4 x i64> %va, %vb
-  %shr = lshr <4 x i64> %add, <i64 1, i64 1, i64 1, i64 1>
-  store <4 x i64> %shr, ptr %res
-  ret void
-}
-
-define void @xvavgr_b(ptr %res, ptr %a, ptr %b) nounwind {
-; CHECK-LABEL: xvavgr_b:
-; CHECK:       # %bb.0: # %entry
-; CHECK-NEXT:    xvld $xr0, $a1, 0
-; CHECK-NEXT:    xvld $xr1, $a2, 0
-; CHECK-NEXT:    xvavgr.b $xr0, $xr0, $xr1
-; CHECK-NEXT:    xvst $xr0, $a0, 0
-; CHECK-NEXT:    ret
-entry:
-  %va = load <32 x i8>, ptr %a
-  %vb = load <32 x i8>, ptr %b
-  %add = add <32 x i8> %va, %vb
-  %add1 = add <32 x i8> %add, <i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1>
-  %shr = ashr <32 x i8> %add1, <i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1>
-  store <32 x i8> %shr, ptr %res
-  ret void
-}
-
-define void @xvavgr_h(ptr %res, ptr %a, ptr %b) nounwind {
-; CHECK-LABEL: xvavgr_h:
-; CHECK:       # %bb.0: # %entry
-; CHECK-NEXT:    xvld $xr0, $a1, 0
-; CHECK-NEXT:    xvld $xr1, $a2, 0
-; CHECK-NEXT:    xvavgr.h $xr0, $xr0, $xr1
-; CHECK-NEXT:    xvst $xr0, $a0, 0
-; CHECK-NEXT:    ret
-entry:
-  %va = load <16 x i16>, ptr %a
-  %vb = load <16 x i16>, ptr %b
-  %add = add <16 x i16> %va, %vb
-  %add1 = add <16 x i16> %add, <i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1>
-  %shr = ashr <16 x i16> %add1, <i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1>
-  store <16 x i16> %shr, ptr %res
-  ret void
-}
-
-define void @xvavgr_w(ptr %res, ptr %a, ptr %b) nounwind {
-; CHECK-LABEL: xvavgr_w:
-; CHECK:       # %bb.0: # %entry
-; CHECK-NEXT:    xvld $xr0, $a1, 0
-; CHECK-NEXT:    xvld $xr1, $a2, 0
-; CHECK-NEXT:    xvavgr.w $xr0, $xr0, $xr1
-; CHECK-NEXT:    xvst $xr0, $a0, 0
-; CHECK-NEXT:    ret
-entry:
-  %va = load <8 x i32>, ptr %a
-  %vb = load <8 x i32>, ptr %b
-  %add = add <8 x i32> %va, %vb
-  %add1 = add <8 x i32> %add, <i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1>
-  %shr = ashr <8 x i32> %add1, <i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1>
-  store <8 x i32> %shr, ptr %res
-  ret void
-}
-
-define void @xvavgr_d(ptr %res, ptr %a, ptr %b) nounwind {
-; LA32-LABEL: xvavgr_d:
-; LA32:       # %bb.0: # %entry
-; LA32-NEXT:    xvld $xr0, $a1, 0
-; LA32-NEXT:    xvld $xr1, $a2, 0
-; LA32-NEXT:    xvadd.d $xr0, $xr0, $xr1
-; LA32-NEXT:    xvaddi.du $xr0, $xr0, 1
-; LA32-NEXT:    xvsrai.d $xr0, $xr0, 1
-; LA32-NEXT:    xvst $xr0, $a0, 0
-; LA32-NEXT:    ret
-;
-; LA64-LABEL: xvavgr_d:
-; LA64:       # %bb.0: # %entry
-; LA64-NEXT:    xvld $xr0, $a1, 0
-; LA64-NEXT:    xvld $xr1, $a2, 0
-; LA64-NEXT:    xvavgr.d $xr0, $xr0, $xr1
-; LA64-NEXT:    xvst $xr0, $a0, 0
-; LA64-NEXT:    ret
-entry:
-  %va = load <4 x i64>, ptr %a
-  %vb = load <4 x i64>, ptr %b
-  %add = add <4 x i64> %va, %vb
-  %add1 = add <4 x i64> %add, <i64 1, i64 1, i64 1, i64 1>
-  %shr = ashr <4 x i64> %add1, <i64 1, i64 1, i64 1, i64 1>
-  store <4 x i64> %shr, ptr %res
-  ret void
-}
-
-define void @xvavgr_bu(ptr %res, ptr %a, ptr %b) nounwind {
-; CHECK-LABEL: xvavgr_bu:
-; CHECK:       # %bb.0: # %entry
-; CHECK-NEXT:    xvld $xr0, $a1, 0
-; CHECK-NEXT:    xvld $xr1, $a2, 0
-; CHECK-NEXT:    xvavgr.bu $xr0, $xr0, $xr1
-; CHECK-NEXT:    xvst $xr0, $a0, 0
-; CHECK-NEXT:    ret
-entry:
-  %va = load <32 x i8>, ptr %a
-  %vb = load <32 x i8>, ptr %b
-  %add = add <32 x i8> %va, %vb
-  %add1 = add <32 x i8> %add, <i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1>
-  %shr = lshr <32 x i8> %add1, <i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1>
-  store <32 x i8> %shr, ptr %res
-  ret void
-}
-
-define void @xvavgr_hu(ptr %res, ptr %a, ptr %b) nounwind {
-; CHECK-LABEL: xvavgr_hu:
-; CHECK:       # %bb.0: # %entry
-; CHECK-NEXT:    xvld $xr0, $a1, 0
-; CHECK-NEXT:    xvld $xr1, $a2, 0
-; CHECK-NEXT:    xvavgr.hu $xr0, $xr0, $xr1
-; CHECK-NEXT:    xvst $xr0, $a0, 0
-; CHECK-NEXT:    ret
-entry:
-  %va = load <16 x i16>, ptr %a
-  %vb = load <16 x i16>, ptr %b
-  %add = add <16 x i16> %va, %vb
-  %add1 = add <16 x i16> %add, <i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1>
-  %shr = lshr <16 x i16> %add1, <i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1>
-  store <16 x i16> %shr, ptr %res
-  ret void
-}
-
-define void @xvavgr_wu(ptr %res, ptr %a, ptr %b) nounwind {
-; CHECK-LABEL: xvavgr_wu:
-; CHECK:       # %bb.0: # %entry
-; CHECK-NEXT:    xvld $xr0, $a1, 0
-; CHECK-NEXT:    xvld $xr1, $a2, 0
-; CHECK-NEXT:    xvavgr.wu $xr0, $xr0, $xr1
-; CHECK-NEXT:    xvst $xr0, $a0, 0
-; CHECK-NEXT:    ret
-entry:
-  %va = load <8 x i32>, ptr %a
-  %vb = load <8 x i32>, ptr %b
-  %add = add <8 x i32> %va, %vb
-  %add1 = add <8 x i32> %add, <i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1>
-  %shr = lshr <8 x i32> %add1, <i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1>
-  store <8 x i32> %shr, ptr %res
-  ret void
-}
-
-define void @xvavgr_du(ptr %res, ptr %a, ptr %b) nounwind {
-; LA32-LABEL: xvavgr_du:
-; LA32:       # %bb.0: # %entry
-; LA32-NEXT:    xvld $xr0, $a1, 0
-; LA32-NEXT:    xvld $xr1, $a2, 0
-; LA32-NEXT:    xvadd.d $xr0, $xr0, $xr1
-; LA32-NEXT:    xvaddi.du $xr0, $xr0, 1
-; LA32-NEXT:    xvsrli.d $xr0, $xr0, 1
-; LA32-NEXT:    xvst $xr0, $a0, 0
-; LA32-NEXT:    ret
-;
-; LA64-LABEL: xvavgr_du:
-; LA64:       # %bb.0: # %entry
-; LA64-NEXT:    xvld $xr0, $a1, 0
-; LA64-NEXT:    xvld $xr1, $a2, 0
-; LA64-NEXT:    xvavgr.du $xr0, $xr0, $xr1
-; LA64-NEXT:    xvst $xr0, $a0, 0
-; LA64-NEXT:    ret
-entry:
-  %va = load <4 x i64>, ptr %a
-  %vb = load <4 x i64>, ptr %b
-  %add = add <4 x i64> %va, %vb
-  %add1 = add <4 x i64> %add, <i64 1, i64 1, i64 1, i64 1>
-  %shr = lshr <4 x i64> %add1, <i64 1, i64 1, i64 1, i64 1>
-  store <4 x i64> %shr, ptr %res
-  ret void
-}
diff --git a/llvm/test/CodeGen/LoongArch/lsx/ir-instruction/avg.ll b/llvm/test/CodeGen/LoongArch/lsx/ir-instruction/avg.ll
deleted file mode 100644
index 334af22edee59..0000000000000
--- a/llvm/test/CodeGen/LoongArch/lsx/ir-instruction/avg.ll
+++ /dev/null
@@ -1,321 +0,0 @@
-; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 6
-; RUN: llc --mtriple=loongarch32 --mattr=+32s,+lsx < %s | FileCheck %s --check-prefixes=CHECK,LA32
-; RUN: llc --mtriple=loongarch64 --mattr=+lsx < %s | FileCheck %s --check-prefixes=CHECK,LA64
-
-define void @vavg_b(ptr %res, ptr %a, ptr %b) nounwind {
-; CHECK-LABEL: vavg_b:
-; CHECK:       # %bb.0: # %entry
-; CHECK-NEXT:    vld $vr0, $a1, 0
-; CHECK-NEXT:    vld $vr1, $a2, 0
-; CHECK-NEXT:    vavg.b $vr0, $vr0, $vr1
-; CHECK-NEXT:    vst $vr0, $a0, 0
-; CHECK-NEXT:    ret
-entry:
-  %va = load <16 x i8>, ptr %a
-  %vb = load <16 x i8>, ptr %b
-  %add = add <16 x i8> %va, %vb
-  %shr = ashr <16 x i8> %add, <i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1>
-  store <16 x i8> %shr, ptr %res
-  ret void
-}
-
-define void @vavg_h(ptr %res, ptr %a, ptr %b) nounwind {
-; CHECK-LABEL: vavg_h:
-; CHECK:       # %bb.0: # %entry
-; CHECK-NEXT:    vld $vr0, $a1, 0
-; CHECK-NEXT:    vld $vr1, $a2, 0
-; CHECK-NEXT:    vavg.h $vr0, $vr0, $vr1
-; CHECK-NEXT:    vst $vr0, $a0, 0
-; CHECK-NEXT:    ret
-entry:
-  %va = load <8 x i16>, ptr %a
-  %vb = load <8 x i16>, ptr %b
-  %add = add <8 x i16> %va, %vb
-  %shr = ashr <8 x i16> %add, <i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1>
-  store <8 x i16> %shr, ptr %res
-  ret void
-}
-
-define void @vavg_w(ptr %res, ptr %a, ptr %b) nounwind {
-; CHECK-LABEL: vavg_w:
-; CHECK:       # %bb.0: # %entry
-; CHECK-NEXT:    vld $vr0, $a1, 0
-; CHECK-NEXT:    vld $vr1, $a2, 0
-; CHECK-NEXT:    vavg.w $vr0, $vr0, $vr1
-; CHECK-NEXT:    vst $vr0, $a0, 0
-; CHECK-NEXT:    ret
-entry:
-  %va = load <4 x i32>, ptr %a
-  %vb = load <4 x i32>, ptr %b
-  %add = add <4 x i32> %va, %vb
-  %shr = ashr <4 x i32> %add, <i32 1, i32 1, i32 1, i32 1>
-  store <4 x i32> %shr, ptr %res
-  ret void
-}
-
-define void @vavg_d(ptr %res, ptr %a, ptr %b) nounwind {
-; LA32-LABEL: vavg_d:
-; LA32:       # %bb.0: # %entry
-; LA32-NEXT:    vld $vr0, $a1, 0
-; LA32-NEXT:    vld $vr1, $a2, 0
-; LA32-NEXT:    vadd.d $vr0, $vr0, $vr1
-; LA32-NEXT:    vsrai.d $vr0, $vr0, 1
-; LA32-NEXT:    vst $vr0, $a0, 0
-; LA32-NEXT:    ret
-;
-; LA64-LABEL: vavg_d:
-; LA64:       # %bb.0: # %entry
-; LA64-NEXT:    vld $vr0, $a1, 0
-; LA64-NEXT:    vld $vr1, $a2, 0
-; LA64-NEXT:    vavg.d $vr0, $vr0, $vr1
-; LA64-NEXT:    vst $vr0, $a0, 0
-; LA64-NEXT:    ret
-entry:
-  %va = load <2 x i64>, ptr %a
-  %vb = load <2 x i64>, ptr %b
-  %add = add <2 x i64> %va, %vb
-  %shr = ashr <2 x i64> %add, <i64 1, i64 1>
-  store <2 x i64> %shr, ptr %res
-  ret void
-}
-
-define void @vavg_bu(ptr %res, ptr %a, ptr %b) nounwind {
-; CHECK-LABEL: vavg_bu:
-; CHECK:       # %bb.0: # %entry
-; CHECK-NEXT:    vld $vr0, $a1, 0
-; CHECK-NEXT:    vld $vr1, $a2, 0
-; CHECK-NEXT:    vavg.bu $vr0, $vr0, $vr1
-; CHECK-NEXT:    vst $vr0, $a0, 0
-; CHECK-NEXT:    ret
-entry:
-  %va = load <16 x i8>, ptr %a
-  %vb = load <16 x i8>, ptr %b
-  %add = add <16 x i8> %va, %vb
-  %shr = lshr <16 x i8> %add, <i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1>
-  store <16 x i8> %shr, ptr %res
-  ret void
-}
-
-define void @vavg_hu(ptr %res, ptr %a, ptr %b) nounwind {
-; CHECK-LABEL: vavg_hu:
-; CHECK:       # %bb.0: # %entry
-; CHECK-NEXT:    vld $vr0, $a1, 0
-; CHECK-NEXT:    vld $vr1, $a2, 0
-; CHECK-NEXT:    vavg.hu $vr0, $vr0, $vr1
-; CHECK-NEXT:    vst $vr0, $a0, 0
-; CHECK-NEXT:    ret
-entry:
-  %va = load <8 x i16>, ptr %a
-  %vb = load <8 x i16>, ptr %b
-  %add = add <8 x i16> %va, %vb
-  %shr = lshr <8 x i16> %add, <i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1>
-  store <8 x i16> %shr, ptr %res
-  ret void
-}
-
-define void @vavg_wu(ptr %res, ptr %a, ptr %b) nounwind {
-; CHECK-LABEL: vavg_wu:
-; CHECK:       # %bb.0: # %entry
-; CHECK-NEXT:    vld $vr0, $a1, 0
-; CHECK-NEXT:    vld $vr1, $a2, 0
-; CHECK-NEXT:    vavg.wu $vr0, $vr0, $vr1
-; CHECK-NEXT:    vst $vr0, $a0, 0
-; CHECK-NEXT:    ret
-entry:
-  %va = load <4 x i32>, ptr %a
-  %vb = load <4 x i32>, ptr %b
-  %add = add <4 x i32> %va, %vb
-  %shr = lshr <4 x i32> %add, <i32 1, i32 1, i32 1, i32 1>
-  store <4 x i32> %shr, ptr %res
-  ret void
-}
-
-define void @vavg_du(ptr %res, ptr %a, ptr %b) nounwind {
-; LA32-LABEL: vavg_du:
-; LA32:       # %bb.0: # %entry
-; LA32-NEXT:    vld $vr0, $a1, 0
-; LA32-NEXT:    vld $vr1, $a2, 0
-; LA32-NEXT:    vadd.d $vr0, $vr0, $vr1
-; LA32-NEXT:    vsrli.d $vr0, $vr0, 1
-; LA32-NEXT:    vst $vr0, $a0, 0
-; LA32-NEXT:    ret
-;
-; LA64-LABEL: vavg_du:
-; LA64:       # %bb.0: # %entry
-; LA64-NEXT:    vld $vr0, $a1, 0
-; LA64-NEXT:    vld $vr1, $a2, 0
-; LA64-NEXT:    vavg.du $vr0, $vr0, $vr1
-; LA64-NEXT:    vst $vr0, $a0, 0
-; LA64-NEXT:    ret
-entry:
-  %va = load <2 x i64>, ptr %a
-  %vb = load <2 x i64>, ptr %b
-  %add = add <2 x i64> %va, %vb
-  %shr = lshr <2 x i64> %add, <i64 1, i64 1>
-  store <2 x i64> %shr, ptr %res
-  ret void
-}
-
-define void @vavgr_b(ptr %res, ptr %a, ptr %b) nounwind {
-; CHECK-LABEL: vavgr_b:
-; CHECK:       # %bb.0: # %entry
-; CHECK-NEXT:    vld $vr0, $a1, 0
-; CHECK-NEXT:    vld $vr1, $a2, 0
-; CHECK-NEXT:    vavgr.b $vr0, $vr0, $vr1
-; CHECK-NEXT:    vst $vr0, $a0, 0
-; CHECK-NEXT:    ret
-entry:
-  %va = load <16 x i8>, ptr %a
-  %vb = load <16 x i8>, ptr %b
-  %add = add <16 x i8> %va, %vb
-  %add1 = add <16 x i8> %add, <i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1>
-  %shr = ashr <16 x i8> %add1, <i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1>
-  store <16 x i8> %shr, ptr %res
-  ret void
-}
-
-define void @vavgr_h(ptr %res, ptr %a, ptr %b) nounwind {
-; CHECK-LABEL: vavgr_h:
-; CHECK:       # %bb.0: # %entry
-; CHECK-NEXT:    vld $vr0, $a1, 0
-; CHECK-NEXT:    vld $vr1, $a2, 0
-; CHECK-NEXT:    vavgr.h $vr0, $vr0, $vr1
-; CHECK-NEXT:    vst $vr0, $a0, 0
-; CHECK-NEXT:    ret
-entry:
-  %va = load <8 x i16>, ptr %a
-  %vb = load <8 x i16>, ptr %b
-  %add = add <8 x i16> %va, %vb
-  %add1 = add <8 x i16> %add, <i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1>
-  %shr = ashr <8 x i16> %add1, <i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1>
-  store <8 x i16> %shr, ptr %res
-  ret void
-}
-
-define void @vavgr_w(ptr %res, ptr %a, ptr %b) nounwind {
-; CHECK-LABEL: vavgr_w:
-; CHECK:       # %bb.0: # %entry
-; CHECK-NEXT:    vld $vr0, $a1, 0
-; CHECK-NEXT:    vld $vr1, $a2, 0
-; CHECK-NEXT:    vavgr.w $vr0, $vr0, $vr1
-; CHECK-NEXT:    vst $vr0, $a0, 0
-; CHECK-NEXT:    ret
-entry:
-  %va = load <4 x i32>, ptr %a
-  %vb = load <4 x i32>, ptr %b
-  %add = add <4 x i32> %va, %vb
-  %add1 = add <4 x i32> %add, <i32 1, i32 1, i32 1, i32 1>
-  %shr = ashr <4 x i32> %add1, <i32 1, i32 1, i32 1, i32 1>
-  store <4 x i32> %shr, ptr %res
-  ret void
-}
-
-define void @vavgr_d(ptr %res, ptr %a, ptr %b) nounwind {
-; LA32-LABEL: vavgr_d:
-; LA32:       # %bb.0: # %entry
-; LA32-NEXT:    vld $vr0, $a1, 0
-; LA32-NEXT:    vld $vr1, $a2, 0
-; LA32-NEXT:    vadd.d $vr0, $vr0, $vr1
-; LA32-NEXT:    vaddi.du $vr0, $vr0, 1
-; LA32-NEXT:    vsrai.d $vr0, $vr0, 1
-; LA32-NEXT:    vst $vr0, $a0, 0
-; LA32-NEXT:    ret
-;
-; LA64-LABEL: vavgr_d:
-; LA64:       # %bb.0: # %entry
-; LA64-NEXT:    vld $vr0, $a1, 0
-; LA64-NEXT:    vld $vr1, $a2, 0
-; LA64-NEXT:    vavgr.d $vr0, $vr0, $vr1
-; LA64-NEXT:    vst $vr0, $a0, 0
-; LA64-NEXT:    ret
-entry:
-  %va = load <2 x i64>, ptr %a
-  %vb = load <2 x i64>, ptr %b
-  %add = add <2 x i64> %va, %vb
-  %add1 = add <2 x i64> %add, <i64 1, i64 1>
-  %shr = ashr <2 x i64> %add1, <i64 1, i64 1>
-  store <2 x i64> %shr, ptr %res
-  ret void
-}
-
-define void @vavgr_bu(ptr %res, ptr %a, ptr %b) nounwind {
-; CHECK-LABEL: vavgr_bu:
-; CHECK:       # %bb.0: # %entry
-; CHECK-NEXT:    vld $vr0, $a1, 0
-; CHECK-NEXT:    vld $vr1, $a2, 0
-; CHECK-NEXT:    vavgr.bu $vr0, $vr0, $vr1
-; CHECK-NEXT:    vst $vr0, $a0, 0
-; CHECK-NEXT:    ret
-entry:
-  %va = load <16 x i8>, ptr %a
-  %vb = load <16 x i8>, ptr %b
-  %add = add <16 x i8> %va, %vb
-  %add1 = add <16 x i8> %add, <i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1>
-  %shr = lshr <16 x i8> %add1, <i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1>
-  store <16 x i8> %shr, ptr %res
-  ret void
-}
-
-define void @vavgr_hu(ptr %res, ptr %a, ptr %b) nounwind {
-; CHECK-LABEL: vavgr_hu:
-; CHECK:       # %bb.0: # %entry
-; CHECK-NEXT:    vld $vr0, $a1, 0
-; CHECK-NEXT:    vld $vr1, $a2, 0
-; CHECK-NEXT:    vavgr.hu $vr0, $vr0, $vr1
-; CHECK-NEXT:    vst $vr0, $a0, 0
-; CHECK-NEXT:    ret
-entry:
-  %va = load <8 x i16>, ptr %a
-  %vb = load <8 x i16>, ptr %b
-  %add = add <8 x i16> %va, %vb
-  %add1 = add <8 x i16> %add, <i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1>
-  %shr = lshr <8 x i16> %add1, <i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1>
-  store <8 x i16> %shr, ptr %res
-  ret void
-}
-
-define void @vavgr_wu(ptr %res, ptr %a, ptr %b) nounwind {
-; CHECK-LABEL: vavgr_wu:
-; CHECK:       # %bb.0: # %entry
-; CHECK-NEXT:    vld $vr0, $a1, 0
-; CHECK-NEXT:    vld $vr1, $a2, 0
-; CHECK-NEXT:    vavgr.wu $vr0, $vr0, $vr1
-; CHECK-NEXT:    vst $vr0, $a0, 0
-; CHECK-NEXT:    ret
-entry:
-  %va = load <4 x i32>, ptr %a
-  %vb = load <4 x i32>, ptr %b
-  %add = add <4 x i32> %va, %vb
-  %add1 = add <4 x i32> %add, <i32 1, i32 1, i32 1, i32 1>
-  %shr = lshr <4 x i32> %add1, <i32 1, i32 1, i32 1, i32 1>
-  store <4 x i32> %shr, ptr %res
-  ret void
-}
-
-define void @vavgr_du(ptr %res, ptr %a, ptr %b) nounwind {
-; LA32-LABEL: vavgr_du:
-; LA32:       # %bb.0: # %entry
-; LA32-NEXT:    vld $vr0, $a1, 0
-; LA32-NEXT:    vld $vr1, $a2, 0
-; LA32-NEXT:    vadd.d $vr0, $vr0, $vr1
-; LA32-NEXT:    vaddi.du $vr0, $vr0, 1
-; LA32-NEXT:    vsrli.d $vr0, $vr0, 1
-; LA32-NEXT:    vst $vr0, $a0, 0
-; LA32-NEXT:    ret
-;
-; LA64-LABEL: vavgr_du:
-; LA64:       # %bb.0: # %entry
-; LA64-NEXT:    vld $vr0, $a1, 0
-; LA64-NEXT:    vld $vr1, $a2, 0
-; LA64-NEXT:    vavgr.du $vr0, $vr0, $vr1
-; LA64-NEXT:    vst $vr0, $a0, 0
-; LA64-NEXT:    ret
-entry:
-  %va = load <2 x i64>, ptr %a
-  %vb = load <2 x i64>, ptr %b
-  %add = add <2 x i64> %va, %vb
-  %add1 = add <2 x i64> %add, <i64 1, i64 1>
-  %shr = lshr <2 x i64> %add1, <i64 1, i64 1>
-  store <2 x i64> %shr, ptr %res
-  ret void
-}



More information about the llvm-branch-commits mailing list