[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