[clang] [llvm] [ConstantRange] Estimate tighter lower (upper) bounds for masked binary and (or) (PR #120352)

Stephen Senran Zhang via llvm-commits llvm-commits at lists.llvm.org
Mon Dec 30 18:03:04 PST 2024


================
@@ -2720,6 +2720,22 @@ TEST_F(ConstantRangeTest, binaryAnd) {
   EXPECT_EQ(R16_32.binaryAnd(R0_99), R0_32);
   EXPECT_EQ(R0_99.binaryAnd(R16_32), R0_32);
 
+  // 'And' with leading bits are masked (with common leading bits stripped)
----------------
zsrkmyn wrote:

'And' op is tricky, since it operates regardless of the signedness and all ranges can be treated as unsigned. E.g., a range (with bitwidth=8) `[1, -10)` can be treated as `[1, 246)` because of the nature of 2's complement; similarly, range `[-3, -1)` can be treated as `[253, 255)`; and results won't be affected. And I think it's how `ConstantRange` designed.

I'll add a test anyway.

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


More information about the llvm-commits mailing list