<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/143649>143649</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
Missed optimization: fold fcmp ord + select before fcmp one (x, C) into a single fcmp one (x, C)
</td>
</tr>
<tr>
<th>Labels</th>
<td>
new issue
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
Cancelll
</td>
</tr>
</table>
<pre>
This is a follow-up issue of #142711
It seems having the last ```select``` instruction prevent the optimization.
```llvm
define double @src(double %arg0) {
%2 = fcmp ord double %arg0, 0.000000e+00
%3 = select i1 %2, double %arg0, double 0.000000e+00
%4 = call double @llvm.fabs.f64(double %3)
%5 = fcmp one double %4, 0x7FF0000000000000
%6 = select i1 %5, double %3, double 0.000000e+00
ret double %6
}
define double @tgt(double %arg0) {
%2 = call double @llvm.fabs.f64(double %arg0)
%3 = fcmp one double %2, 0x7FF0000000000000
%4 = select i1 %3, double %arg0, double 0.000000e+00
ret double %4
}
```
alive2: https://alive2.llvm.org/ce/z/G8UmjY
godbolt: https://godbolt.org/z/8sjT9P5TY
Found this pattern in
https://github.com/dtcxzyw/llvm-opt-benchmark/blob/013f9638352b38eb8f26daddafeeb0d87fc6510b/bench/typst-rs/optimized/4qskctz4kwc33g7b.ll
</pre>
<img width="1" height="1" alt="" src="http://email.email.llvm.org/o/eJyUVE1z4ygQ_TWtCxUXatDXQQcnKW3tYav2kD3MEURLJsFCK5Dz8eu3JNsTezybmlFxAfq1Xr_XtArB9gNRDdk9ZI-JmuPOT_WDGlpyziXam_f6aWcDs4Ep1nnn_OvdPDIbwkzMdwxQpBKLNAW-_TOyQLQPbKcOduhZ3BFzKkQGOT-uQI7a-H3L7BDiNLfR-oGNEx1oiCvKj9Hu7YdaLjbAt8s6g5w77IFvDXV2IGb8rB0xkDxMLWB53mOmpp4DVgyKe-BbthwhA_HIunY_Mj8Z9mPsA-Mbvn4EeM_5GSZW2JE7s-maaYm-xZ9Ofp5Grmla5dwF66WaTad02HS5vOIvAKszNLsgflE0ZnJl_VY0Db_8zrj8lnl2zVx8TXuieBGcLz4Uj0dDbgyIffw1A35ZglOGax9-ogJ-rYK8VUH8pn_XOshPHc5dedREOXsgBLFluxjHAGIL2AA2x_PNWqmfesCmJcDmA7D5o_xn__wN-Lb3RnsXb8GnixNwwZTh-an6O3v6dvxr4-fBsLg801HFSNPA7AB8-0MaG3ez3rR-D9iY2L59vL8CNgunOz_GO01Du9ur6QWw0c5rwIanoqtyUYoMtShJlx3mRhmjOiLNTVl0bZ6lfAld0YBNfB9DvJsCYHN6xGQAG_lveGnjh3x5bYXoC71xLjG1MJWoVEJ1WsgqTxErmexq1aVdyqUudcaVoryQmc4M6pK0pKxtE1sjx4znacoFykxuOFemK6SupEBKJYLktFfWfRc8WedVnUqRyypxSpML68xDHOj1OM0AcRmBU70qouc-LL1pQwyfaaKNjuq_bAhkrobU4lrnnfkcLoD355bT1PmJPhsXsHxbuu1heR12iJ4pFuzQu_-JSebJ1V-YuU7Ek5Pj5J-XEYvNWtTiw6nqQ43_BQAA__-xNcC-">