From: Michael Meissner Date: Tue, 10 Jan 2012 01:01:01 +0000 (+0000) Subject: Fix bugs in -mvsx-scalar-memory and -mvsx-scalar-double X-Git-Tag: releases/gcc-4.7.0~1083 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=df5a9a7ccc58153f578002f6674701842348f912;p=thirdparty%2Fgcc.git Fix bugs in -mvsx-scalar-memory and -mvsx-scalar-double From-SVN: r183048 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 8e1959ad81d9..c24ea000c1f6 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,12 @@ + + * config/rs6000/rs6000.c (rs6000_init_hard_regno_mode_ok): Add DF + reload patterns if -mvsx-scalar-memory. + + * config/rs6000/vsx.md (vsx_xscvspdp): Allow xscvspdp to be + generated, even -mno-vsx-scalar-double was used. + (vsx_xscvdpsp_scalar): Likewise. + (vsx_xscvspdp_scalar2): Likewise. + 2012-01-09 Tom de Vries Andrew Pinski diff --git a/gcc/config/rs6000/rs6000.c b/gcc/config/rs6000/rs6000.c index 932bd83902d2..532915334289 100644 --- a/gcc/config/rs6000/rs6000.c +++ b/gcc/config/rs6000/rs6000.c @@ -1,6 +1,7 @@ /* Subroutines used for code generation on IBM RS/6000. Copyright (C) 1991, 1993, 1994, 1995, 1996, 1997, 1998, 1999, - 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 + 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, + 2012 Free Software Foundation, Inc. Contributed by Richard Kenner (kenner@vlsi1.ultra.nyu.edu) @@ -2332,6 +2333,11 @@ rs6000_init_hard_regno_mode_ok (bool global_init_p) rs6000_vector_reload[V4SFmode][1] = CODE_FOR_reload_v4sf_di_load; rs6000_vector_reload[V2DFmode][0] = CODE_FOR_reload_v2df_di_store; rs6000_vector_reload[V2DFmode][1] = CODE_FOR_reload_v2df_di_load; + if (TARGET_VSX && TARGET_VSX_SCALAR_MEMORY) + { + rs6000_vector_reload[DFmode][0] = CODE_FOR_reload_df_di_store; + rs6000_vector_reload[DFmode][1] = CODE_FOR_reload_df_di_load; + } } else { @@ -2347,6 +2353,11 @@ rs6000_init_hard_regno_mode_ok (bool global_init_p) rs6000_vector_reload[V4SFmode][1] = CODE_FOR_reload_v4sf_si_load; rs6000_vector_reload[V2DFmode][0] = CODE_FOR_reload_v2df_si_store; rs6000_vector_reload[V2DFmode][1] = CODE_FOR_reload_v2df_si_load; + if (TARGET_VSX && TARGET_VSX_SCALAR_MEMORY) + { + rs6000_vector_reload[DFmode][0] = CODE_FOR_reload_df_si_store; + rs6000_vector_reload[DFmode][1] = CODE_FOR_reload_df_si_load; + } } } diff --git a/gcc/config/rs6000/vsx.md b/gcc/config/rs6000/vsx.md index 634bd23f4370..c23a835367f3 100644 --- a/gcc/config/rs6000/vsx.md +++ b/gcc/config/rs6000/vsx.md @@ -1,5 +1,5 @@ ;; VSX patterns. -;; Copyright (C) 2009, 2010, 2011 +;; Copyright (C) 2009, 2010, 2011, 2012 ;; Free Software Foundation, Inc. ;; Contributed by Michael Meissner @@ -919,7 +919,7 @@ [(set (match_operand:DF 0 "vsx_register_operand" "=ws,?wa") (unspec:DF [(match_operand:V4SF 1 "vsx_register_operand" "wa,wa")] UNSPEC_VSX_CVSPDP))] - "VECTOR_UNIT_VSX_P (DFmode)" + "VECTOR_UNIT_VSX_P (V4SFmode)" "xscvspdp %x0,%x1" [(set_attr "type" "fp")]) @@ -929,7 +929,7 @@ [(set (match_operand:V4SF 0 "vsx_register_operand" "=wa") (unspec:V4SF [(match_operand:SF 1 "vsx_register_operand" "f")] UNSPEC_VSX_CVSPDP))] - "VECTOR_UNIT_VSX_P (DFmode)" + "VECTOR_UNIT_VSX_P (V4SFmode)" "xscvdpsp %x0,%x1" [(set_attr "type" "fp")]) @@ -938,7 +938,7 @@ [(set (match_operand:SF 0 "vsx_register_operand" "=f") (unspec:SF [(match_operand:V4SF 1 "vsx_register_operand" "wa")] UNSPEC_VSX_CVSPDP))] - "VECTOR_UNIT_VSX_P (DFmode)" + "VECTOR_UNIT_VSX_P (V4SFmode)" "xscvspdp %x0,%x1" [(set_attr "type" "fp")])