[llvm] [DAG] isKnownToBeAPowerOfTwo - Power of 2 value is known to be power of 2 after BSWAP/BITREVERSE (PR #182207)

Manuel Dun via llvm-commits llvm-commits at lists.llvm.org
Wed Mar 4 06:50:29 PST 2026


================
@@ -957,6 +957,46 @@ define i1 @pow2_and_i128(i128 %num, i128 %shift) {
   ret i1 %bool
 }
 
+define i1 @pow2_bswap(i32 %x,i1 %c){
+; CHECK-LABEL: pow2_bswap:
+; CHECK:       # %bb.0:
+; CHECK-NEXT:    # kill: def $esi killed $esi def $rsi
+; CHECK-NEXT:    andl $1, %esi
+; CHECK-NEXT:    leal 2(%rsi,%rsi), %eax
+; CHECK-NEXT:    bswapl %eax
+; CHECK-NEXT:    testl %eax, %edi
+; CHECK-NEXT:    setne %al
+; CHECK-NEXT:    retq
+  %y = select i1 %c, i32 4, i32 2
+  %d = call i32 @llvm.bswap.i32(i32 %y)
+  %and = and i32 %x, %d
+  %r = icmp eq i32 %and, %d
+  ret i1 %r
+}
----------------
manueldun wrote:

Can I ask what is the relation between "(X & Y) == Y" and urem? if any? are they equivalent?

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


More information about the llvm-commits mailing list