<table border="1" cellspacing="0" cellpadding="8">
    <tr>
        <th>Issue</th>
        <td>
            <a href=https://github.com/llvm/llvm-project/issues/71280>71280</a>
        </td>
    </tr>

    <tr>
        <th>Summary</th>
        <td>
            clang is suboptimal for `(a % b) lt/ge (b-1)` where b is a power of 2
        </td>
    </tr>

    <tr>
      <th>Labels</th>
      <td>
            clang
      </td>
    </tr>

    <tr>
      <th>Assignees</th>
      <td>
      </td>
    </tr>

    <tr>
      <th>Reporter</th>
      <td>
          k-arrows
      </td>
    </tr>
</table>

<pre>
    Example-1 (b=512, "less than")
https://godbolt.org/z/Tdc6onb6e
https://alive2.llvm.org/ce/z/wvSEvC
```cpp
int foo(int a)
{
   return (a % 512) < 511;
}

int bar(int a)
{
   return (a & -2147483137) != 511;
}
```



Example-2 (b=8, "greater than or equal to")
https://godbolt.org/z/cxdveoT1n
https://alive2.llvm.org/ce/z/sm3xs5
```cpp
int baz(int a)
{
   return (a % 8) >= 7;
}

int qux(int a)
{
   return (a & -2147483641) == 7;
}
```

</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJyck9tuozAQhp9muLES2WOOF1y0pXmB7QvYMCTsOpjaJsn26VeGpNtdbStlJQQjNAf__zdW3g_7kaiG7BGyJlFzOFhX_9go5-zZJ9p2P-vnizpOhjaCAZYaZJMJBHxigGjIexYOagREwAp4A_zhEMLkQT4A7gB3e9tpa8LWuj3g7g1w99K1uR11Tv9KV2Y4EW6NOR2vJS1d686nb8-np7UIcr4-7TStf4YxsN5awDJG6v00UDyuAWPMUZjdGGUoBpixRUjFQD6xTAiQj7eS5hq8d9bK3dE5ZxsUaZGWUshimYACZPPJkJuUjzM_vm_-483_8ur-3pEK5BYAzDpGr7MyLNh7YLSX7kT2RYx3wvBHefHZVzC0ersLRrmieI5GFV-xeJ0v_8UiT8U6ovlsxJ8kkq6WXSUrlVAt8qriVV6UPDnUuqWi64q26vMWUy0qjZXqW9V1GlXbq2SokaMUgqdCiCrlW5JZT6rvhaa84EpCyumoBvNubTJ4P1NdCCx5YpQm45c7idgaNe4j0axJXB3zN3ree0i5GXzwvzuEIRiql3Q2eOZnbacwHJVhvXUsqro5raMNJsR9oGWnNtEYyDk7H8gR07FescmeyTHbM0xmZ-q_NmkIh1lvW3sE3MUzXD-bydnv1MbmiyQPuFtU_QoAAP__DmY3lA">