We currently already canonicalize icmp eq (%x & Pow2), Pow2 to icmp ne (%x & Pow2), 0. This patch generalizes the fold based on known bits.
In particular, this allows us to handle comparisons against !range !{i64 0, i64 2} loads, which addresses an optimization regression in Rust caused by https://github.com/llvm/llvm-project/commit/8df376db7282b955e7990cb8887ee9dcd3565040.
nit: "is" -> "is known to be".
also maybe "Pow2" -> "C_Pow2" so its a little clearer to you are refering to the exact same value.