[llvm] [DAG] Improved handling of ISD::ROTL and ISD::ROTR in isKnownToBeAPowerOfTwo (PR #182744)
Matt Arsenault via llvm-commits
llvm-commits at lists.llvm.org
Tue Mar 3 00:48:56 PST 2026
================
@@ -1006,3 +1008,83 @@ define i32 @pow2_blsi_sub(i32 %x, i32 %a) {
%r = and i32 %x_sub_y, %y
ret i32 %r
}
+
+define i1 @pow2_rotl_extract_vec(<4 x i32> %a0, <4 x i32> %rotamt, i32 %x) {
+; CHECK-LABEL: pow2_rotl_extract_vec:
+; CHECK: # %bb.0: # %entry
+; CHECK-NEXT: pxor %xmm2, %xmm2
+; CHECK-NEXT: pcmpgtd %xmm0, %xmm2
+; CHECK-NEXT: movl $4096, %eax # imm = 0x1000
+; CHECK-NEXT: movd %eax, %xmm0
+; CHECK-NEXT: movl $1024, %eax # imm = 0x400
+; CHECK-NEXT: movd %eax, %xmm3
+; CHECK-NEXT: pand %xmm2, %xmm3
+; CHECK-NEXT: pandn %xmm0, %xmm2
+; CHECK-NEXT: por %xmm2, %xmm3
+; CHECK-NEXT: pslld $23, %xmm1
+; CHECK-NEXT: pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
+; CHECK-NEXT: paddd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
+; CHECK-NEXT: cvttps2dq %xmm1, %xmm0
+; CHECK-NEXT: pmuludq %xmm3, %xmm0
+; CHECK-NEXT: pshufd {{.*#+}} xmm1 = xmm0[1,1,3,3]
+; CHECK-NEXT: por %xmm0, %xmm1
+; CHECK-NEXT: movd %xmm1, %eax
+; CHECK-NEXT: notl %edi
+; CHECK-NEXT: testl %edi, %eax
+; CHECK-NEXT: sete %al
+; CHECK-NEXT: retq
+
+ %cmp = icmp sgt <4 x i32> zeroinitializer, %a0
----------------
arsenm wrote:
Use canonical IR?
https://github.com/llvm/llvm-project/pull/182744
More information about the llvm-commits
mailing list