Patchwork rs6000.c cleanup

login
register
mail settings
Submitter Michael Meissner
Date Dec. 1, 2010, 7:32 p.m.
Message ID <20101201193237.GA14237@hungry-tiger.westford.ibm.com>
Download mbox | patch
Permalink /patch/73886/
State New
Headers show

Comments

Michael Meissner - Dec. 1, 2010, 7:32 p.m.
Pat Haugen pointed out to me on email/irc that you couldn't set the
undocumented debug switches -mno-always-hint, -mno-sched-groups,
-mno-align-branch-targets because I was tesitng > 0 instead of >= 0.

I also remembered that we had not updated rs6000_rtx_costs to know about the
new FMA operation, so I added the FMA case, and deleted all of the old rtl FMA
support in the cost function.

I bootstrapped a compiler with these changes, and verified via -mdebug=reg that
the debug switches were set properly.  I also verified a fma operation to make
sure it had the appropriate cost.

Are these ok to apply?

2010-12-01  Michael Meissner  <meissner@linux.vnet.ibm.com>

	* config/rs6000/rs6000.c (rs6000_option_override_internal): Fix
	thinko regarding setting -mno-<xxx> debug switches.
	(rs6000_rtx_costs): Add FMA.  Delete old rtl based FMA costs.
David Edelsohn - Dec. 1, 2010, 8:22 p.m.
On Wed, Dec 1, 2010 at 2:32 PM, Michael Meissner
<meissner@linux.vnet.ibm.com> wrote:
> Pat Haugen pointed out to me on email/irc that you couldn't set the
> undocumented debug switches -mno-always-hint, -mno-sched-groups,
> -mno-align-branch-targets because I was tesitng > 0 instead of >= 0.
>
> I also remembered that we had not updated rs6000_rtx_costs to know about the
> new FMA operation, so I added the FMA case, and deleted all of the old rtl FMA
> support in the cost function.
>
> I bootstrapped a compiler with these changes, and verified via -mdebug=reg that
> the debug switches were set properly.  I also verified a fma operation to make
> sure it had the appropriate cost.
>
> Are these ok to apply?
>
> 2010-12-01  Michael Meissner  <meissner@linux.vnet.ibm.com>
>
>        * config/rs6000/rs6000.c (rs6000_option_override_internal): Fix
>        thinko regarding setting -mno-<xxx> debug switches.
>        (rs6000_rtx_costs): Add FMA.  Delete old rtl based FMA costs.

Okay.

Thanks, David

Patch

Index: gcc/config/rs6000/rs6000.c
===================================================================
--- gcc/config/rs6000/rs6000.c	(revision 167338)
+++ gcc/config/rs6000/rs6000.c	(working copy)
@@ -3017,14 +3017,15 @@  rs6000_option_override_internal (bool gl
 				 || rs6000_cpu == PROCESSOR_PPCE500MC
 				 || rs6000_cpu == PROCESSOR_PPCE500MC64);
 
-  /* Allow debug switches to override the above settings.  */
-  if (TARGET_ALWAYS_HINT > 0)
+  /* Allow debug switches to override the above settings.  These are set to -1
+     in rs6000.opt to indicate the user hasn't directly set the switch.  */
+  if (TARGET_ALWAYS_HINT >= 0)
     rs6000_always_hint = TARGET_ALWAYS_HINT;
 
-  if (TARGET_SCHED_GROUPS > 0)
+  if (TARGET_SCHED_GROUPS >= 0)
     rs6000_sched_groups = TARGET_SCHED_GROUPS;
 
-  if (TARGET_ALIGN_BRANCH_TARGETS > 0)
+  if (TARGET_ALIGN_BRANCH_TARGETS >= 0)
     rs6000_align_branch_targets = TARGET_ALIGN_BRANCH_TARGETS;
 
   rs6000_sched_restricted_insns_priority
@@ -26072,54 +26073,9 @@  rs6000_rtx_costs (rtx x, int code, int o
       return true;
 
     case PLUS:
-      if (mode == DFmode)
-	{
-	  if (GET_CODE (XEXP (x, 0)) == MULT)
-	    {
-	      /* FNMA accounted in outer NEG.  */
-	      if (outer_code == NEG)
-		*total = rs6000_cost->dmul - rs6000_cost->fp;
-	      else
-		*total = rs6000_cost->dmul;
-	    }
-	  else
-	    *total = rs6000_cost->fp;
-	}
-      else if (mode == SFmode)
-	{
-	  /* FNMA accounted in outer NEG.  */
-	  if (outer_code == NEG && GET_CODE (XEXP (x, 0)) == MULT)
-	    *total = 0;
-	  else
-	    *total = rs6000_cost->fp;
-	}
-      else
-	*total = COSTS_N_INSNS (1);
-      return false;
-
     case MINUS:
-      if (mode == DFmode)
-	{
-	  if (GET_CODE (XEXP (x, 0)) == MULT
-	      || GET_CODE (XEXP (x, 1)) == MULT)
-	    {
-	      /* FNMA accounted in outer NEG.  */
-	      if (outer_code == NEG)
-		*total = rs6000_cost->dmul - rs6000_cost->fp;
-	      else
-		*total = rs6000_cost->dmul;
-	    }
-	  else
-	    *total = rs6000_cost->fp;
-	}
-      else if (mode == SFmode)
-	{
-	  /* FNMA accounted in outer NEG.  */
-	  if (outer_code == NEG && GET_CODE (XEXP (x, 0)) == MULT)
-	    *total = 0;
-	  else
-	    *total = rs6000_cost->fp;
-	}
+      if (FLOAT_MODE_P (mode))
+	*total = rs6000_cost->fp;
       else
 	*total = COSTS_N_INSNS (1);
       return false;
@@ -26134,20 +26090,23 @@  rs6000_rtx_costs (rtx x, int code, int o
 	  else
 	    *total = rs6000_cost->mulsi_const;
 	}
-      /* FMA accounted in outer PLUS/MINUS.  */
-      else if ((mode == DFmode || mode == SFmode)
-	       && (outer_code == PLUS || outer_code == MINUS))
-	*total = 0;
-      else if (mode == DFmode)
-	*total = rs6000_cost->dmul;
       else if (mode == SFmode)
 	*total = rs6000_cost->fp;
+      else if (FLOAT_MODE_P (mode))
+	*total = rs6000_cost->dmul;
       else if (mode == DImode)
 	*total = rs6000_cost->muldi;
       else
 	*total = rs6000_cost->mulsi;
       return false;
 
+    case FMA:
+      if (mode == SFmode)
+	*total = rs6000_cost->fp;
+      else
+	*total = rs6000_cost->dmul;
+      break;
+
     case DIV:
     case MOD:
       if (FLOAT_MODE_P (mode))