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.