From 87dc46f6c39ca24af48f4e49f1d4bf4d04ae3b1e Mon Sep 17 00:00:00 2001 From: meissner Date: Tue, 26 Sep 2017 18:12:33 +0000 Subject: [PATCH] 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. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@253210 138bc75d-0d04-0410-961f-82ee72b054a4 --- gcc/ChangeLog | 4 +++- gcc/config/rs6000/rs6000.md | 20 ++++++++++++++++++++ 2 files changed, 23 insertions(+), 1 deletion(-) 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. -- 2.11.4.GIT