<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/55505>55505</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
[VRP] Some optimization omissions of small constants
</td>
</tr>
<tr>
<th>Labels</th>
<td>
new issue
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
vfdff
</td>
</tr>
</table>
<pre>
For the two similar case foo1000 and foo1001, gcc do sve for foo1000 , while llvm does none for the both, see https://godbolt.org/z/fcWxs6G3b.
- gcc: improve the float compare **if (i_16 > 1.0e+0)** to int compare in 153t.ivcanon for foo1000, so later, it can do sve.
- llvm: maybe need improve in function isKnownExactCastIntToFP ?
```
int foo1000 (int index){
int aLength = 1500;
int a[aLength];
for(float i = 1000; i > 0; i--){
a[(int)i] = (int)(i);
}
return a[index];
}
int foo1001 (int index){
int aLength = 1500;
int a[aLength];
for(float i = 1001; i > 0; i--){
a[(int)i] = (int)(i);
}
return a[index];
}
```
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJzNVE2PmzAQ_TVwGQWZz4QDh93Npqraw6qt2mM1YBNcGTvCJtntr-_YpEk2f6C1AM8wz2_ejBhaw9-anZnADQLcyYCVo1Q4QYdWQG9MyhgD1Pxsp1H2BPuuA07Qo0dMF5QPnQapBCh1HAkhLGijF5Dnb40bPMgKAYNzBxvlD1G2o2tveGuUS8y0J-833X3349VWH_I2idg2Yg_Lc-Vz0ymQ42EylN_T9sqgg86MB5wEqSDOB9mTsZE_0wqi_BnShIkoe2RRVi9xcAakvp6SGtIyd4k8dkiab-sKig0odGLytqRTqM8NSP7q8iV7YSO-tQK0EPyikbj7WXdOEq-0n7Q56edX7NwTWvdRu29m90Iid-c6K3a-gus1Xvu78a7UXLz6QtaPCwZo-QB-FnrvBuLaUjEkPL8HROXjGRSV20v4CqKqKcnST7nwsMATvGdYzNXqPrtfnnxRSFFJ_OH85Y03_HarKVpv7xVMws2TDmRLnbc638PvG5T-qwal_1-D3n9Et8-YNzmv8xpjJ50SDfF8__Li1Xw1owBzcPQD-I3hYzWjtJYMC6YHO6JSNC_aOtTOxvOkmrshlm6Y24RGipwwD8u2ojH4JToqckd8s7BklGXJynhoup7XdZF2WBXIivWGcyzqDbI2bdm6ZnWssBXKNqF3mRYnCBRkk-RYNhnLMlamVZqVOcuSds1T3KRZX2FRFXwTFUyMKFXidfi_Szw1QVI77y0FlbTOXoNI5e5pdkM64sfZDWZqjj3v-zgkboLwP5z6edk">