diff mbox

Fix some powerpc debug options

Message ID 20120109213022.GA12016@ibm-tiger.the-meissners.org
State New
Headers show

Commit Message

Michael Meissner Jan. 9, 2012, 9:30 p.m. UTC
I was recently trying to turn on some of the debug options I put in when doing
the initial power7 work to track down some performance regressions.  The
following patches fix problems that come up in telling the compiler to use the
traditional floating point insns for scalar mode on power7
(-mno-vsx-scalar-double).  It also adds reload helpers for using the VSX memory
load instructions when the compiler is allowed to use VSX memory instructions
for scalars.  There were no regressions with these patches.  Are they ok to be
checked in?

2012-01-09  Michael Meissner  <meissner@linux.vnet.ibm.com>

	* 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.

Comments

David Edelsohn Jan. 9, 2012, 11:39 p.m. UTC | #1
On Mon, Jan 9, 2012 at 4:30 PM, Michael Meissner
<meissner@linux.vnet.ibm.com> wrote:
> I was recently trying to turn on some of the debug options I put in when doing
> the initial power7 work to track down some performance regressions.  The
> following patches fix problems that come up in telling the compiler to use the
> traditional floating point insns for scalar mode on power7
> (-mno-vsx-scalar-double).  It also adds reload helpers for using the VSX memory
> load instructions when the compiler is allowed to use VSX memory instructions
> for scalars.  There were no regressions with these patches.  Are they ok to be
> checked in?
>
> 2012-01-09  Michael Meissner  <meissner@linux.vnet.ibm.com>
>
>        * 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.

Okay.

Thanks, David
diff mbox

Patch

Index: gcc/config/rs6000/rs6000.c
===================================================================
--- gcc/config/rs6000/rs6000.c	(revision 183033)
+++ gcc/config/rs6000/rs6000.c	(working copy)
@@ -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 glo
 	  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 glo
 	  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;
+	    }
 	}
     }
 
Index: gcc/config/rs6000/vsx.md
===================================================================
--- gcc/config/rs6000/vsx.md	(revision 183033)
+++ gcc/config/rs6000/vsx.md	(working copy)
@@ -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 <meissner@linux.vnet.ibm.com>
 
@@ -919,7 +919,7 @@  (define_insn "vsx_xscvspdp"
   [(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 @@  (define_insn "vsx_xscvdpsp_scalar"
   [(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 @@  (define_insn "vsx_xscvspdp_scalar2"
   [(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")])