<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/152797>152797</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
Missed optimization: (x + y) & (2^C) -> x & 2^C when y % 2^(C+1) == 0
</td>
</tr>
<tr>
<th>Labels</th>
<td>
new issue
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
zxt5
</td>
</tr>
</table>
<pre>
```
define i1 @src(ptr %0) {
%v0 = getelementptr inbounds nuw i8, ptr %0, i64 4
%v1 = load i32, ptr %v0, align 4
%v2 = zext i32 %v1 to i64
%v3 = ptrtoint ptr %v0 to i64
%v4 = add i64 %v2, %v3
%v5 = and i64 %v4, 2
%v6 = icmp eq i64 %v5, 0
ret i1 %v6
}
define i1 @tgt(ptr %0) {
%v0 = getelementptr inbounds nuw i8, ptr %0, i64 4
%v1 = load i32, ptr %v0, align 4
%v2 = and i32 %v1, 2
%v3 = icmp eq i32 %v2, 0
ret i1 %v3
}
```
alive2: https://alive2.llvm.org/ce/z/h8HYTo
godbolt: https://godbolt.org/z/Mqzs9W8q4
Found this pattern in https://github.com/dtcxzyw/llvm-opt-benchmark/blob/main/bench/linux/optimized/static_call_inline.ll
</pre>
<img width="1" height="1" alt="" src="http://email.email.llvm.org/o/eJzMlMtu8zYQhZ9mtCFiUKP7QgtfInSTXYGiq4CSaIstRSriyLenL8g4cpAWXf-AYYDDb454DgcUzqmTkbKGbAfZIRILDXau71fKotb2txpy_vjxbS-PykimYgYpd3MHWE40M8CMA1YMih3wLfPrM2eQHNhJktRylIY8p0xrF9M7ZpYLUyXgnj3b90zlKUtXgTgIaCt6phL8xp4DLLQ6mW84Bvwur-TxhwJZL7oySWAmmskqQ0-9n1waONH34UhB3X8ySKxQ9gmZJ5R6CFcgD4DqxonJjxXKPMQDNEsKUXoW-BaKg___kTKd6JdLOZj-Cnk1_Ux49fxg8D89J0_P30YM-FZodZYIyZYNRJODZAvYADaf9Y3W53Fj5xNg00nA5g7YDOVvf_5ugW9Ptm-tpn83PzYejb7n7ePuqj_Kj_Tzq40PjdGgHJsEkZwNU-aniKJhaTedHQGbnrrr_XYBbPyJXuxEL6003TCK-W_AptW2BWxGoYxf-R2PKrNcARs7kRrVXfaAjSNBqnvvhNbvymhl5EbrqK-TvkoqEck6LrI0L0teFNFQp2V1LDHnWZodeZEWRVnkeZ5znmOSiWMVqRo5ZrzkJcYYx8WmTUWVtlVXlXnbpVhCyuUolF6TjJRzi6zjDIuqiLRopXbhPUA08sLCLiD652Gug9l2OTlIuVaO3FOGFGlZvynnZM8eDgUpa_x1AJZXBrhjtzDEmPsKQva69-sXSF7ZNZRDjV0GadjND0ooAJZ7wF0cepODnzIeLbOu_-eC_Lm-bmea7V-yI8AmuHGAzcPuucZ_AgAA__9B3WxV">