OSDN Git Service

* config/rs6000/rs6000.c (rs6000_rtx_costs): Indicate that the
authorsayle <sayle@138bc75d-0d04-0410-961f-82ee72b054a4>
Mon, 12 Jul 2004 13:42:28 +0000 (13:42 +0000)
committersayle <sayle@138bc75d-0d04-0410-961f-82ee72b054a4>
Mon, 12 Jul 2004 13:42:28 +0000 (13:42 +0000)
rs6000 doesn't have shift-and-add or shift-and-sub instructions
by returning the cost of a multiplication plus an addition.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@84556 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/ChangeLog
gcc/config/rs6000/rs6000.c

index 1cac842..e3d670d 100644 (file)
@@ -1,3 +1,9 @@
+2004-07-12  Roger Sayle  <roger@eyesopen.com>
+
+       * config/rs6000/rs6000.c (rs6000_rtx_costs): Indicate that the
+       rs6000 doesn't have shift-and-add or shift-and-sub instructions
+       by returning the cost of a multiplication plus an addition.
+
 2004-07-12  Paolo Bonzini  <bonzini@gnu.org>
 
        PR tree-optimization/14107
index 713a09b..0722ed7 100644 (file)
@@ -16535,6 +16535,12 @@ rs6000_rtx_costs (rtx x, int code, int outer_code ATTRIBUTE_UNUSED,
                 : rs6000_cost->fp;
       else if (mode == SFmode)
        *total = rs6000_cost->fp;
+      else if (GET_CODE (XEXP (x, 0)) == MULT)
+       {
+         /* The rs6000 doesn't have shift-and-add instructions.  */
+         rs6000_rtx_costs (XEXP (x, 0), MULT, PLUS, total);
+         *total += COSTS_N_INSNS (1);
+       }
       else
        *total = ((GET_CODE (XEXP (x, 1)) == CONST_INT
                  && ((unsigned HOST_WIDE_INT) (INTVAL (XEXP (x, 1))
@@ -16551,6 +16557,12 @@ rs6000_rtx_costs (rtx x, int code, int outer_code ATTRIBUTE_UNUSED,
                 : rs6000_cost->fp;
       else if (mode == SFmode)
        *total = rs6000_cost->fp;
+      else if (GET_CODE (XEXP (x, 0)) == MULT)
+       {
+         /* The rs6000 doesn't have shift-and-sub instructions.  */
+         rs6000_rtx_costs (XEXP (x, 0), MULT, MINUS, total);
+         *total += COSTS_N_INSNS (1);
+       }
       else
         *total = COSTS_N_INSNS (1);
       return true;