<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/63404>63404</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
Attributor special casing of return select interferes with nofpclass inference
</td>
</tr>
<tr>
<th>Labels</th>
<td>
missed-optimization,
floating-point
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
jdoerfert
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
arsenm
</td>
</tr>
</table>
<pre>
Noticed this when working on https://reviews.llvm.org/D153089
Attributor seems to specially treat return of select, such that computeKnownFPClass is never called on the select instruction. In this example, it fails to add nofpclass(nan) to the return value. If you obscure the return value with some kind of call, it works:
```
define float @ret_select_nnan_flag(i1 %cond, float %arg0, float %arg1) {
%select = select nnan i1 %cond, float %arg0, float %arg1
ret float %select
}
declare float @llvm.arithmetic.fence.f32(float)
define float @ret_fence_select_nnan_flag(i1 %cond, float %arg0, float %arg1) {
%select = select nnan i1 %cond, float %arg0, float %arg1
%fence = call float @llvm.arithmetic.fence.f32(float %select)
ret float %fence
}
```
This will miss instruction flags and select clamping patterns computeKnownFPClass could recognize
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJyslEGPozgQhX-NuZQ6IiYkcODQ01Gk0UqrPey9ZewCasbYyC462_PrVwbSnemZy0gtRUQY-1HvUfWpGKl3iI0ovwgpvxmPocPAQkpRnjM18-BDo0JEN2atN6_N355JowEeKMJ1QAdXH76T68E7GJinKIpHIS9CXgK-EF7jztqXcedDL-TlvC-LvKpFfhb543p9ZA7UzuwDRMQxAnuIE2pS1r4CB1QMAXkODnwHES1qFvIJ4qwH4EExaD9OM-Nfzl_d5Z8nq2IEiuDwBQNoZS2aVBwPuB0HcpHDrJm828FXt5rB_9Q4WUzaxNApskstyhhwvpt00hWycsoJWacnSXCr7EXZGXfwtYNXP4Nvo54D_rIBrsQDRD8ifCdnkp9U3vbGlGMKD-7TEcd8-y23BjtyCJ31ikEc8oD8vHp6dk65586qXsiK9iBkqb0zSXvbLUsV-vzjwj6ZEacvqz6k1S0kUZxveSVt-CPRTS0gvz_Yvt3q63S-t2lQWxXujC09owLxMCKT3nXoNO66QgpZLZuErH8W-DWY5cznxvO56QhZLjUuYqkT_sD_XaC3JD7EvRz5bdofmmq9_rsMNFkLI6UBeh8RSLFFUM7cHGurxinN_KSYMbj42xnUfrYGAmrfO_qBmWkKUxe1yrDZH6uTPB72-zIbmtq0-tBpWedY7cuyPVTGtDmeZHcqTnUhM2pkLov8KPO9lFVR7rq27MpjrlGbtjoVhTjkOCqyb6jJKMYZm2NxyA-ZVS3auCEumUPz4CemkX6o5C_BTj4JKZfoyPUPkyd3Y2BokuhDO_cxfReK_E60jIktNvcIW8kFWsWFid0NAG_k4YWwGFcYvJEFyKVlpzGbg21-JmlPPMztTvtRyEt6-fb3MAX_bWmBy2I4CnlZPP8fAAD__8-J43g">