[llvm] [AArch64][GlobalISel] Add widenScalarOrEltToNextPow2OrMinSize for small element vector CTPOP (PR #189397)

via llvm-commits llvm-commits at lists.llvm.org
Mon Mar 30 07:49:02 PDT 2026


llvmbot wrote:


<!--LLVM PR SUMMARY COMMENT-->

@llvm/pr-subscribers-backend-aarch64

Author: David Green (davemgreen)

<details>
<summary>Changes</summary>

This widens small ctpoop to at least i8, preventing types like v8i4 from falling back.

---
Full diff: https://github.com/llvm/llvm-project/pull/189397.diff


2 Files Affected:

- (modified) llvm/lib/Target/AArch64/GISel/AArch64LegalizerInfo.cpp (+1) 
- (modified) llvm/test/CodeGen/AArch64/ctpop.ll (+11) 


``````````diff
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

``````````

</details>


https://github.com/llvm/llvm-project/pull/189397


More information about the llvm-commits mailing list