<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/105632>105632</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
[InstCombine] Missed optimization with cmp+switch
</td>
</tr>
<tr>
<th>Labels</th>
<td>
llvm:instcombine,
missed-optimization
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
dtcxzyw
</td>
</tr>
</table>
<pre>
Alive2: https://alive2.llvm.org/ce/z/x8aCLE
```
define i8 @src(i32 %a, i32 %b) {
%res = call i8 @llvm.ucmp.i8.i32(i32 %a, i32 %b)
switch i8 %res, label %bb1 [
i8 -1, label %bb2
i8 0, label %bb2
]
bb1:
ret i8 1
bb2:
ret i8 2
}
define i8 @tgt(i32 %a, i32 %b) {
%cmp = icmp ugt i32 %a, %b
br i1 %cmp, label %bb1, label %bb2
bb1:
ret i8 1
bb2:
ret i8 2
}
```
This pattern exists in some rust applications.
cc @Poseydon42 @nikic
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJysU8uOnDAQ_JrmYg0ybWDgwGF2CFKkRMohP2AbL3TCS9js6-sje0iybLJSDpGQsd1VZbpwSWupm4ypILuDrI7k5vp5rVqnn16eHyM1t8_VZaAHgyAurHdusSAugA1gI8N-PAwPYzyvHWCjDWDzAtg8FfL66QPwGvgFcr4_Ydmae5oMo4JByu2qAQsSyAAzCXhl-1wBlgzOdzcO81ursQxEzbQchp0ejt70uMRUxCTwfa2fOvaRnO4DPSh62CCVGQJQJcz7sGOZh52SNxA8lPk7VcjqvfswKpV423bmapznJkcE_onY1eB8EDs46Dr3zw7qcQkOkp9snWOvaYGyY9XKKNkZbx36e8P_t83jjbmNX3uybJHOmXVi5omss4wmZufRsHWzjsllGUhLR_Nk49dMrb1RX2Zrntt5StGvJvpOmt3qUVuJthSljEyVnDEVSS7yMuqrUutcannPkWMpklLwVLdZUSolWuRnHlGFHFNeIPIizXkZG54aqdokwbxMubiHlJtR0vArJBFZu5kq4VkuMAo-2pA9RA8BcaHJOj2PiiYDiIBXQBzJWtOe5sXRSC-hRV_L6mitPO2kts76PHhXfp_lyA0h2R8n6667Zlazz0GOvZZjj-R6Fn733S0j0bYO1THwHbl-U7GeR8AmfO7tdVrW-ZvRDrAJ7VnAZu_wocIfAQAA__9jYDkE">