[llvm] ce19103 - [AArch64] Add freeze(avg(x,y)) test coverage for #147696 (#156918)
via llvm-commits
llvm-commits at lists.llvm.org
Thu Sep 4 09:38:45 PDT 2025
Author: Simon Pilgrim
Date: 2025-09-04T16:38:41Z
New Revision: ce19103cfb054285da5c21eda013314360a217ab
URL: https://github.com/llvm/llvm-project/commit/ce19103cfb054285da5c21eda013314360a217ab
DIFF: https://github.com/llvm/llvm-project/commit/ce19103cfb054285da5c21eda013314360a217ab.diff
LOG: [AArch64] Add freeze(avg(x,y)) test coverage for #147696 (#156918)
Added:
Modified:
llvm/test/CodeGen/AArch64/freeze.ll
Removed:
################################################################################
diff --git a/llvm/test/CodeGen/AArch64/freeze.ll b/llvm/test/CodeGen/AArch64/freeze.ll
index 36d88c5524932..2a33a4c061dce 100644
--- a/llvm/test/CodeGen/AArch64/freeze.ll
+++ b/llvm/test/CodeGen/AArch64/freeze.ll
@@ -430,6 +430,82 @@ define <8 x i16> @freeze_abds(<8 x i16> %a, <8 x i16> %b) {
ret <8 x i16> %r
}
+; TODO: Unnecessary final and
+define <8 x i16> @freeze_uhadd(<8 x i16> %a0, <8 x i16> %a1) {
+; CHECK-LABEL: freeze_uhadd:
+; CHECK: // %bb.0:
+; CHECK-NEXT: movi v2.8h, #15
+; CHECK-NEXT: and v0.16b, v0.16b, v2.16b
+; CHECK-NEXT: and v1.16b, v1.16b, v2.16b
+; CHECK-NEXT: movi v2.8h, #31
+; CHECK-NEXT: uhadd v0.8h, v0.8h, v1.8h
+; CHECK-NEXT: and v0.16b, v0.16b, v2.16b
+; CHECK-NEXT: ret
+ %m0 = and <8 x i16> %a0, splat (i16 15)
+ %m1 = and <8 x i16> %a1, splat (i16 15)
+ %avg = call <8 x i16> @llvm.aarch64.neon.uhadd.v8i16(<8 x i16> %m0, <8 x i16> %m1)
+ %frozen = freeze <8 x i16> %avg
+ %masked = and <8 x i16> %frozen, splat (i16 31)
+ ret <8 x i16> %masked
+}
+
+; TODO: Unnecessary final and
+define <8 x i16> @freeze_urhadd(<8 x i16> %a0, <8 x i16> %a1) {
+; CHECK-LABEL: freeze_urhadd:
+; CHECK: // %bb.0:
+; CHECK-NEXT: movi v2.8h, #15
+; CHECK-NEXT: and v0.16b, v0.16b, v2.16b
+; CHECK-NEXT: and v1.16b, v1.16b, v2.16b
+; CHECK-NEXT: movi v2.8h, #31
+; CHECK-NEXT: urhadd v0.8h, v0.8h, v1.8h
+; CHECK-NEXT: and v0.16b, v0.16b, v2.16b
+; CHECK-NEXT: ret
+ %m0 = and <8 x i16> %a0, splat (i16 15)
+ %m1 = and <8 x i16> %a1, splat (i16 15)
+ %avg = call <8 x i16> @llvm.aarch64.neon.urhadd.v8i16(<8 x i16> %m0, <8 x i16> %m1)
+ %frozen = freeze <8 x i16> %avg
+ %masked = and <8 x i16> %frozen, splat (i16 31)
+ ret <8 x i16> %masked
+}
+
+; TODO: Unnecessary sext_inreg
+define <8 x i16> @freeze_shadd(<8 x i8> %a0, <8 x i16> %a1) {
+; CHECK-LABEL: freeze_shadd:
+; CHECK: // %bb.0:
+; CHECK-NEXT: sshll v0.8h, v0.8b, #0
+; CHECK-NEXT: sshr v1.8h, v1.8h, #8
+; CHECK-NEXT: shadd v0.8h, v0.8h, v1.8h
+; CHECK-NEXT: shl v0.8h, v0.8h, #8
+; CHECK-NEXT: sshr v0.8h, v0.8h, #8
+; CHECK-NEXT: ret
+ %x0 = sext <8 x i8> %a0 to <8 x i16>
+ %x1 = ashr <8 x i16> %a1, splat (i16 8)
+ %avg = call <8 x i16> @llvm.aarch64.neon.shadd.v8i16(<8 x i16> %x0, <8 x i16> %x1)
+ %frozen = freeze <8 x i16> %avg
+ %trunc = trunc <8 x i16> %frozen to <8 x i8>
+ %sext = sext <8 x i8> %trunc to <8 x i16>
+ ret <8 x i16> %sext
+}
+
+; TODO: Unnecessary sext_inreg
+define <8 x i16> @freeze_srhadd(<8 x i8> %a0, <8 x i16> %a1) {
+; CHECK-LABEL: freeze_srhadd:
+; CHECK: // %bb.0:
+; CHECK-NEXT: sshll v0.8h, v0.8b, #0
+; CHECK-NEXT: sshr v1.8h, v1.8h, #8
+; CHECK-NEXT: srhadd v0.8h, v0.8h, v1.8h
+; CHECK-NEXT: shl v0.8h, v0.8h, #8
+; CHECK-NEXT: sshr v0.8h, v0.8h, #8
+; CHECK-NEXT: ret
+ %x0 = sext <8 x i8> %a0 to <8 x i16>
+ %x1 = ashr <8 x i16> %a1, splat (i16 8)
+ %avg = call <8 x i16> @llvm.aarch64.neon.srhadd.v8i16(<8 x i16> %x0, <8 x i16> %x1)
+ %frozen = freeze <8 x i16> %avg
+ %trunc = trunc <8 x i16> %frozen to <8 x i8>
+ %sext = sext <8 x i8> %trunc to <8 x i16>
+ ret <8 x i16> %sext
+}
+
define i32 @freeze_scmp(i32 %a0) nounwind {
; CHECK-LABEL: freeze_scmp:
; CHECK: // %bb.0:
More information about the llvm-commits
mailing list