From: Michael Meissner Date: Tue, 26 Sep 2017 18:12:33 +0000 (+0000) Subject: rs6000.md (movsi_from_df): Optimize converting a DFmode to a SFmode... X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=6c1f23fff1c23c17d9a6599e0855743474ff9f57;p=gcc.git rs6000.md (movsi_from_df): Optimize converting a DFmode to a SFmode... 2017-09-26 Michael Meissner * config/rs6000/rs6000.md (movsi_from_df): Optimize converting a DFmode to a SFmode, and then needing to move the SFmode to a GPR to use the XSCVDPSP instruction instead of FRSP and XSCVDPSPN. From-SVN: r253210 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 9b5b9fc9729..7c8ff6c20fd 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -11,7 +11,9 @@ (movdi_from_sf_zero_ext): Likewise. (reload_gpr_from_vsxsf): Likewise. (p8_mfvsrd_4_disf): Delete, no longer used. - + (movsi_from_df): Optimize converting a DFmode to a SFmode, and + then needing to move the SFmode to a GPR to use the XSCVDPSP + instruction instead of FRSP and XSCVDPSPN. 2017-09-26 Martin Jambor diff --git a/gcc/config/rs6000/rs6000.md b/gcc/config/rs6000/rs6000.md index c91719f821f..9b10e7fd44a 100644 --- a/gcc/config/rs6000/rs6000.md +++ b/gcc/config/rs6000/rs6000.md @@ -6919,6 +6919,26 @@ "4, 4, 4, 4, 8, 8, 4")]) +;; Like movsi_from_sf, but combine a convert from DFmode to SFmode before +;; moving it to SImode. We can do a SFmode store without having to do the +;; conversion explicitly. If we are doing a register->register conversion, use +;; XSCVDPSP instead of XSCVDPSPN, since the former handles cases where the +;; input will not fit in a SFmode, and the later assumes the value has already +;; been rounded. +(define_insn "*movsi_from_df" + [(set (match_operand:SI 0 "nonimmediate_operand" "=wa,m,wY,Z") + (unspec:SI [(float_truncate:SF + (match_operand:DF 1 "gpc_reg_operand" "wa, f,wb,wa"))] + UNSPEC_SI_FROM_SF))] + + "TARGET_NO_SF_SUBREG" + "@ + xscvdpsp %x0,%x1 + stfs%U0%X0 %1,%0 + stxssp %1,%0 + stxsspx %x1,%y0" + [(set_attr "type" "fp,fpstore,fpstore,fpstore")]) + ;; Split a load of a large constant into the appropriate two-insn ;; sequence.