[llvm] [AArch64][GlobalISel] Add widenScalarOrEltToNextPow2OrMinSize for small element vector CTPOP (PR #189397)
David Green via llvm-commits
llvm-commits at lists.llvm.org
Mon Mar 30 07:48:22 PDT 2026
https://github.com/davemgreen created https://github.com/llvm/llvm-project/pull/189397
This widens small ctpoop to at least i8, preventing types like v8i4 from falling back.
>From e942981bf69ba2386530e3fb48044d1c5a9a84cc Mon Sep 17 00:00:00 2001
From: David Green <david.green at arm.com>
Date: Mon, 30 Mar 2026 15:47:03 +0100
Subject: [PATCH] [AArch64][GlobalISel] Add widenScalarOrEltToNextPow2OrMinSize
for small element vector CTPOP
This widens small ctpoop to at least i8, preventing types like v8i4 from
falling back.
---
.../lib/Target/AArch64/GISel/AArch64LegalizerInfo.cpp | 1 +
llvm/test/CodeGen/AArch64/ctpop.ll | 11 +++++++++++
2 files changed, 12 insertions(+)
diff --git a/llvm/lib/Target/AArch64/GISel/AArch64LegalizerInfo.cpp b/llvm/lib/Target/AArch64/GISel/AArch64LegalizerInfo.cpp
index 61ba8960d526b..1e769ef0c4d72 100644
--- a/llvm/lib/Target/AArch64/GISel/AArch64LegalizerInfo.cpp
+++ b/llvm/lib/Target/AArch64/GISel/AArch64LegalizerInfo.cpp
@@ -330,6 +330,7 @@ AArch64LegalizerInfo::AArch64LegalizerInfo(const AArch64Subtarget &ST)
{v2s64, v2s64}})
.clampScalar(0, s32, s128)
.widenScalarToNextPow2(0)
+ .widenScalarOrEltToNextPow2OrMinSize(0, 8)
.minScalarEltSameAsIf(always, 1, 0)
.maxScalarEltSameAsIf(always, 1, 0)
.clampNumElements(0, v8s8, v16s8)
diff --git a/llvm/test/CodeGen/AArch64/ctpop.ll b/llvm/test/CodeGen/AArch64/ctpop.ll
index 24fff7506731f..9e7e5888fa6e6 100644
--- a/llvm/test/CodeGen/AArch64/ctpop.ll
+++ b/llvm/test/CodeGen/AArch64/ctpop.ll
@@ -502,6 +502,17 @@ entry:
ret <4 x i128> %s
}
+define <8 x i4> @v8i4(<8 x i4> %a) {
+; CHECK-LABEL: v8i4:
+; CHECK: // %bb.0:
+; CHECK-NEXT: movi v1.8b, #15
+; CHECK-NEXT: and v0.8b, v0.8b, v1.8b
+; CHECK-NEXT: cnt v0.8b, v0.8b
+; CHECK-NEXT: ret
+ %r = call <8 x i4> @llvm.ctpop(<8 x i4> %a)
+ ret <8 x i4> %r
+}
+
define i8 @i8(i8 %x) {
; CHECK-SD-LABEL: i8:
; CHECK-SD: // %bb.0: // %entry
More information about the llvm-commits
mailing list