<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/117107>117107</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
signed comparison case missed by constraint elimination
</td>
</tr>
<tr>
<th>Labels</th>
<td>
missed-optimization
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
regehr
</td>
</tr>
</table>
<pre>
starting with this:
```c
extern void side_effect(void);
void f(int v0, int v1, int v2) {
if (v0 < v1) return;
if (v1 < v2) return;
if (v0 < v2) side_effect();
return;
}
```
here's what constraint elimination sees:
```llvm
define void @f(i32 noundef %v0, i32 noundef %v1, i32 noundef %v2) {
entry:
%cmp = icmp sge i32 %v0, %v1
%cmp1 = icmp sge i32 %v1, %v2
%or.cond.not11 = and i1 %cmp, %cmp1
%cmp4 = icmp slt i32 %v0, %v2
%or.cond10 = and i1 %cmp4, %or.cond.not11
br i1 %or.cond10, label %if.then5, label %return
if.then5: ; preds = %entry
tail call void @side_effect() #2
br label %return
return: ; preds = %if.then5, %entry
ret void
}
```
this should all optimize away: https://alive2.llvm.org/ce/z/EPLL_9
but it doesn't: https://gcc.godbolt.org/z/enxd5dqxr
the debug output looks sensible, the relations that we want are getting picked up by the constraint system, but I'm not deeply enough into the code to see where we're going wrong
```
Processing condition to simplify: %cmp = icmp sge i32 %v0, %v1
Checking %cmp = icmp sge i32 %v0, %v1
---
%v0 + -1 * %v1 <= -1
sat
---
-1 * %v0 + %v1 <= 0
sat
Adding 'icmp sge i32 %v1, %v2'
constraint: -1 * %v1 + %v2 <= 0
Checking %cmp = icmp sge i32 %v0, %v1
---
-1 * %v1 + %v2 <= 0
%v0 + -1 * %v1 <= -1
sat
---
-1 * %v1 + %v2 <= 0
-1 * %v0 + %v1 <= 0
sat
Processing condition to simplify: %cmp1 = icmp sge i32 %v1, %v2
Checking %cmp1 = icmp sge i32 %v1, %v2
---
%v1 + -1 * %v2 <= -1
sat
---
-1 * %v1 + %v2 <= 0
sat
Adding 'icmp sge i32 %v0, %v1'
constraint: -1 * %v0 + %v1 <= 0
Checking %cmp1 = icmp sge i32 %v1, %v2
---
-1 * %v0 + %v1 <= 0
%v1 + -1 * %v2 <= -1
sat
---
-1 * %v0 + %v1 <= 0
-1 * %v1 + %v2 <= 0
sat
Processing condition to simplify: %cmp4 = icmp slt i32 %v0, %v2
Checking %cmp4 = icmp slt i32 %v0, %v2
---
-1 * %v0 + %v2 <= 0
sat
---
%v0 + -1 * %v2 <= -1
sat
Processing fact to add to the system: icmp slt i32 %v0, %v2
Adding 'icmp slt i32 %v0, %v2'
constraint: %v0 + -1 * %v2 <= -1
---
%v0 + -1 * %v2 <= -1
%v0 <= -1
sat
Top of stack : 1 2
CB: 1 2
Processing fact to add to the system: icmp sge i32 %v0, %v1
Adding 'icmp sge i32 %v0, %v1'
constraint: -1 * %v0 + %v1 <= 0
---
%v0 + -1 * %v2 <= -1
-1 * %v0 + %v1 <= 0
%v1 <= -1
sat
Top of stack : 1 2
CB: 1 2
Processing fact to add to the system: icmp sge i32 %v1, %v2
Adding 'icmp sge i32 %v1, %v2'
constraint: -1 * %v1 + %v2 <= 0
---
%v0 + -1 * %v2 <= -1
-1 * %v0 + %v1 <= 0
-1 * %v1 + %v2 <= 0
%v2 <= -1
unsat
Adding 'icmp uge i32 %v1, %v2'
constraint: -1 * %v1 + %v2 <= 0
```
cc @fhahn
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJzEWE-Tm7gT_TTypcsuaLCJDxw8mZ-rflU55LD3lIwa0A6WWEmMx_n0WwLGAf9bnEx2U6kZrHn9-vWj1Qhza2WhiFK2fGLL5xlvXKlNaqig0sx2WhxT67hxUhVwkK4EV0rLog0LnlmwYaug-591n-nNkVHwqqUAKwV9ozynzDH85JcYrln01Ee2P1tgzvCTVA5eA4afob0KT1fIcA0s6aMAZA6eLQAWfW5xazDkGqNOzCdM2GHwHiYYYMaCh2LhPJ4lz2cGDKsqyRDDxMKh5A4yrawz3FdDldxLxZ3UCizRFR-r6nXfLQnKpaLOShYHrUkRgtKNEuTFL3u_zhbDa4tjF0k5czzlBo_I9jWw6Bmkv7AFtQynHB3vCB1eh4fvcBzAtVlkWomF0i7s4rgSIMOeqg_xpOMc8SBH5S4lXckRBpf8cY8fyXgP3ZkeeCLw6IrvqPKrMl-4ktRytNg3w-COn2DRBqb-Y9ET1IaEbRUzXHa3pdfluKwg41V16oCL9gSGEQ7quKPvvX2nq7uib-jFuVxDrhU6ZXv4CQK21E0lwBeoayf38jsBP3DfllA6V7d7A7cMt7ySr4QLvzMW2hQMtxkx3H5nuP3f1y9fvq2H3LvGgXQgNFnFMHGXdEWWLQotdrpyPZ1nIvUmluKvNzMWSiBo1xSgG1c3DiqtXyxYUlbuKvI-eIihqt3SFpzf7weCA1cOuCEoyLWTs5bZCwloatgd25jBULBH62jvybz4_zNM9qC0A0FUV0cgpZui9MNQ95GCwGk_P-DgJw0c_LDxyXQ7pI1WxVX3vxqdkbUe5DtdtmPIM8l9Xcn82LXHI8Pgc0nZi-d7LGw-n_cC_R-B4RPM_R7cdCA_kj3PvIdb7s7iBugufBQXnIVthPAaGSb3xhUm77384954R8bK-lx4lutj7JiW6tc9u03-mLGPNNTE58WFhRPjRi0VntuDH2TPlJYa3N0JLXXb5Q_yY1quXzftNvljzj7SUxPPBxceToy7X-bNCu5Pt9uuDirPeeZ80VwI6Md-_5SINv-s-7w5r0NPzTnuzWmif6rSHnWj_D90DToH63j2Al5JCO_372n08TGf7szdBzfxT-_hB216ZMf-Z16ez5t_7Rn7O8yc_Ny9oG_UrUdC8zscGJ_nsqx9MSx5qWAm0kisozWfURomEYarIA5xVqZ5vFpFGAaxCMJglceraCWyCJecx0RhwGcyxQDjMMQwiOIgxIXAJBAY45qSHJMVsTigPZfV6QQ-k9Y2lIZhEgbJrH3rsO3XB4h7aS2JeX-ib0_FDJEtn2cm9eHzXVNYFgeVtM7-IHTSVZS2X0QIyPS-5kZarSDjlqDj9Afn62_Ss8ZU6dkZX7qy2S0yvWe4bV-pu1_z2ug_2_enbVuDZbjty3hN8e8AAAD__47XhTA">