<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/75190>75190</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
Missing optimization : adjust if conditions `(a | b) == 0` and `b == 0 && a != 0` to simplify cfg
</td>
</tr>
<tr>
<th>Labels</th>
<td>
new issue
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
XChy
</td>
</tr>
</table>
<pre>
Alive2 proof: https://alive2.llvm.org/ce/z/BF4K-B
### Description:
```c
void src(unsigned a, unsigned b) {
if((a | b) == 0){ // InstCombine always folds a != 0 && b != 0 to (a | b) == 0
dummy();
}else{
if(b == 0 && a != 0){
dummy1();
}else{
dummy2();
}
}
}
```
can be folded to
```c
void tgt(unsigned a, unsigned b) {
if(b == 0){
if(a == 0){
dummy();
}else{
dummy1();
}
}else{
dummy2();
}
}
```
Unless `dummy` is called more probably, I think it's always profitable to avoid reduntant calculation on condition expression.
### Real-world motivation
This snippet of IR is derived from [redis/src/aof.c@backgroundRewriteDoneHandler](https://github.com/redis/redis/blob/c85a9b7896b9727709b71fed414bf8a117436d71/src/aof.c#L2587) (after O3 pipeline).
The example above is a reduced version. If you're interested in the original suboptimal IR and optimal IR, see also:https://godbolt.org/z/zYhPe33ds
**Let me know if you can confirm that it's an optimization opportunity, thanks.**
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJyUVVtv4ygU_jXk5agRxvcHP7SNoq12VruqdqXdRzDHMVMMFuB00l-_glx6UZvRRCg2Bj6-850b917tDGJHyjtSblZ8CaN13b_342ElrDx0t1rtkcHsrB1IfgtjCLMn-S1hW8K2PK2utd5Pa-t2hG17JGz7Qtj2blv8fnNH6IbQ29M_y48DNuh7p-agrIlQb_dU9Dj643xvlQTvesKaxSSqEjhh93CZCcJaIPXpJgAANRDWENZwIPX9aT3fkHwDlLCW1HdwJA8Pxod7OwllELh-5gcPg9XSAwfCsnQACKsIq0C8fgkWvgA_MpDLNB0Sg5bkb2iReoPa4zuqF7rignK-8ZXDkfRb9OwT-GtXxF86yL4-ePpweXt9ObvkOO25AYFJKJQQ7BW_hV34Zb-JD776RCt-dcvF1o-m_lScK6pe8eKXuv5UyX-MRu-BVPTIt6KgPPRca5QwWYcx6wQX-hCFe4AwKvMEKhBW-3O8zs4OKnChMcYlT7I7lIsJ3ISI1S-axzwDa6C3Rqo0wR-zQ--VNevPM_QRub55tk5HJkHtE8bbrX-PyoM3ap4xgB3g4TGSl-jUHiUMzk5AyjuHUnnCtimDt9wO654UVPD-aefsYuQjPjsVcGMN_saN1OhIuSGseV9ldiqMi1j3diJse4Y8P4W2ItadpuStqJu2Em3N6pq2os4GlEVWiKHhWVYXeSXr7AMZln9jZVOnWGQNHwI6-DOHWc2olUHC2vXZXgT8wadZI3Bh9xjN5UnrHiXs0SU14WGAg10Iqx2CMgEd-oASlIEwIlindspwDX4Rdg5q4joqx42E12n0tsdYkrwl-e0HLawUVodTtY2F9uW_8S_Mc-nfezKObxhgQngy9hlUIgYxfXtrBuUmCCMPl3gyRwbq5RQu82xdWIwKKfrCyM2TXx9hV7LLZZu3fIVdVlOWt7TJ2GrsRIWypJLSsqUFz9qB9U1fSF4Wecl7FCvVMcryjGUsKxjNsnVf5rwcRMY4G9qcClJQnLjSl5ayUt4v2NVl1tKV5gK1T72KMYPPkBYJY7F1uS6euRHLzpOCauWDf0UJKmjs_lDeK7N7b2nsalx-X3yIGl1yJCXmF4W-osllpKJX63aVmoVX06zVcIB-2K0Wp7srwR35nh43s7PfsQ-EbZOVMdaTCv8HAAD__yY-MgY">