[llvm] [DAG] isKnownToBeAPowerOfTwo - Power of 2 value is known to be power of 2 after BSWAP/BITREVERSE (PR #182207)
Simon Pilgrim via llvm-commits
llvm-commits at lists.llvm.org
Tue Mar 3 04:02:24 PST 2026
================
@@ -990,6 +1057,52 @@ define i32 @pow2_blsi_add(i32 %x, i32 %a) {
ret i32 %r
}
+
+; Test that (X + Y) & Y --> ~X & Y when Y = a & -a (pow2-or-zero).
+define i32 @pow2_rotl_orzero(i32 %x, i1 %c) {
+; CHECK-LABEL: pow2_rotl_orzero:
+; CHECK: # %bb.0:
+; CHECK-NEXT: # kill: def $edi killed $edi def $rdi
+; CHECK-NEXT: notb %sil
+; CHECK-NEXT: movzbl %sil, %ecx
+; CHECK-NEXT: andl $1, %ecx
+; CHECK-NEXT: addl %ecx, %ecx
+; CHECK-NEXT: bswapl %ecx
+; CHECK-NEXT: roll $3, %ecx
+; CHECK-NEXT: leal (%rdi,%rcx), %eax
+; CHECK-NEXT: andl %ecx, %eax
+; CHECK-NEXT: retq
+ %y = select i1 %c, i32 0, i32 2
+ %d = call i32 @llvm.bswap.i32(i32 %y)
+ %rot_y = call i32 @llvm.fshl.i32(i32 %d, i32 %d, i32 3)
+ %x_add_y = add i32 %x, %rot_y
+ %r = and i32 %x_add_y, %rot_y
+ ret i32 %r
+}
----------------
RKSimon wrote:
remove this new rot test coverage
https://github.com/llvm/llvm-project/pull/182207
More information about the llvm-commits
mailing list