https://gcc.gnu.org/bugzilla/show_bug.cgi?id=118594
--- Comment #6 from Andrew Pinski <pinskia at gcc dot gnu.org> ---
The code in expr.cc does:
```
if (to_mode == SFmode
&& !HONOR_NANS (from_mode)
&& !HONOR_NANS (to_mode)
&& optimize_insn_for_speed_p ())
{
/* If we don't expect sNaNs, for BFmode -> SFmode we can just
shift the bits up. */
machine_mode fromi_mode, toi_mode;
if (int_mode_for_size (GET_MODE_BITSIZE (from_mode),
0).exists (&fromi_mode)
&& int_mode_for_size (GET_MODE_BITSIZE (to_mode),
0).exists (&toi_mode))
{
start_sequence ();
rtx fromi = force_lowpart_subreg (fromi_mode, from,
from_mode);
```
So I think force_lowpart_subreg needs changes maybe.