[llvm] [X86] known-pow2.ll - add srl vector test for #182562 (PR #185405)
Simon Pilgrim via llvm-commits
llvm-commits at lists.llvm.org
Mon Mar 9 05:35:35 PDT 2026
https://github.com/RKSimon created https://github.com/llvm/llvm-project/pull/185405
None
>From b00abec88ee4a3aed92a8eecbc64c162aa607cb0 Mon Sep 17 00:00:00 2001
From: Simon Pilgrim <llvm-dev at redking.me.uk>
Date: Mon, 9 Mar 2026 12:33:23 +0000
Subject: [PATCH] [X86] known-pow2.ll - add srl vector test for #182562
---
llvm/test/CodeGen/X86/known-pow2.ll | 32 +++++++++++++++++++++++++++++
1 file changed, 32 insertions(+)
diff --git a/llvm/test/CodeGen/X86/known-pow2.ll b/llvm/test/CodeGen/X86/known-pow2.ll
index 677adcc5db1ba..66ceb7f9508f1 100644
--- a/llvm/test/CodeGen/X86/known-pow2.ll
+++ b/llvm/test/CodeGen/X86/known-pow2.ll
@@ -161,6 +161,38 @@ define i1 @pow2_srl(i32 %x, i32 %y) {
ret i1 %r
}
+define i32 @pow2_srl_vec(<4 x i32> %x, <4 x i32> %y, i32 %z, ptr %p) {
+; CHECK-LABEL: pow2_srl_vec:
+; CHECK: # %bb.0:
+; CHECK-NEXT: movl %edi, %eax
+; CHECK-NEXT: pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
+; CHECK-NEXT: pshuflw {{.*#+}} xmm0 = xmm1[2,3,3,3,4,5,6,7]
+; CHECK-NEXT: movdqa {{.*#+}} xmm2 = [1048576,4294967295,4294967295,0]
+; CHECK-NEXT: movdqa %xmm2, %xmm3
+; CHECK-NEXT: psrld %xmm0, %xmm3
+; CHECK-NEXT: pshuflw {{.*#+}} xmm0 = xmm1[0,1,1,1,4,5,6,7]
+; CHECK-NEXT: movdqa %xmm2, %xmm4
+; CHECK-NEXT: psrld %xmm0, %xmm4
+; CHECK-NEXT: movd %xmm4, %ecx
+; CHECK-NEXT: punpcklqdq {{.*#+}} xmm4 = xmm4[0],xmm3[0]
+; CHECK-NEXT: pshufd {{.*#+}} xmm0 = xmm1[2,3,2,3]
+; CHECK-NEXT: pshuflw {{.*#+}} xmm0 = xmm0[0,1,1,1,4,5,6,7]
+; CHECK-NEXT: psrld %xmm0, %xmm2
+; CHECK-NEXT: psrldq {{.*#+}} xmm2 = xmm2[8,9,10,11,12,13,14,15],zero,zero,zero,zero,zero,zero,zero,zero
+; CHECK-NEXT: shufps {{.*#+}} xmm4 = xmm4[0,3],xmm2[0,3]
+; CHECK-NEXT: movaps %xmm4, (%rsi)
+; CHECK-NEXT: xorl %edx, %edx
+; CHECK-NEXT: divl %ecx
+; CHECK-NEXT: movl %edx, %eax
+; CHECK-NEXT: retq
+ %yy = and <4 x i32> %y, splat (i32 7)
+ %d = lshr <4 x i32> <i32 1048576, i32 -1, i32 -1, i32 0>, %yy
+ store <4 x i32> %d, ptr %p
+ %elt = extractelement <4 x i32> %d, i32 0
+ %r = urem i32 %z, %elt
+ ret i32 %r
+}
+
define i1 @pow2_srl_fail0(i32 %x, i32 %y) {
; CHECK-LABEL: pow2_srl_fail0:
; CHECK: # %bb.0:
More information about the llvm-commits
mailing list