OSDN Git Service

* config/s390/s390.c (s390_address_cost): New function.
authoruweigand <uweigand@138bc75d-0d04-0410-961f-82ee72b054a4>
Wed, 18 Sep 2002 18:57:18 +0000 (18:57 +0000)
committeruweigand <uweigand@138bc75d-0d04-0410-961f-82ee72b054a4>
Wed, 18 Sep 2002 18:57:18 +0000 (18:57 +0000)
config/s390/s390-protos.h (s390_address_cost): Add prototype.
config/s390/s390.h (ADDRESS_COST): Call s390_address_cost.
(RTX_COST): Use COSTS_N_INSNS.

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

gcc/ChangeLog
gcc/config/s390/s390-protos.h
gcc/config/s390/s390.c
gcc/config/s390/s390.h

index 365c689..37ae814 100644 (file)
@@ -1,3 +1,10 @@
+2002-09-18  Ulrich Weigand  <uweigand@de.ibm.com>
+
+       * config/s390/s390.c (s390_address_cost): New function.
+       config/s390/s390-protos.h (s390_address_cost): Add prototype.
+       config/s390/s390.h (ADDRESS_COST): Call s390_address_cost.
+       (RTX_COST): Use COSTS_N_INSNS.
+
 2002-09-18  Douglas Rupp  <rupp@gnat.com>
            Donn Terry  <donnte@microsoft.com>
 
index c66207a..f5a190f 100644 (file)
@@ -29,6 +29,7 @@ extern void s390_emit_epilogue PARAMS ((void));
 extern void s390_function_profiler PARAMS ((FILE *, int));
 
 #ifdef RTX_CODE
+extern int s390_address_cost PARAMS ((rtx));
 extern int q_constraint PARAMS ((rtx));
 extern int const0_operand PARAMS ((rtx, enum machine_mode));
 extern int consttable_operand PARAMS ((rtx, enum machine_mode));
index 877014d..ecc1679 100644 (file)
@@ -1050,6 +1050,19 @@ q_constraint (op)
   return 1;
 }
 
+/* Return the cost of an address rtx ADDR.  */
+
+int
+s390_address_cost (addr)
+     rtx addr;
+{
+  struct s390_address ad;
+  if (!s390_decompose_address (addr, &ad))
+    return 1000;
+
+  return ad.indx? COSTS_N_INSNS (1) + 1 : COSTS_N_INSNS (1);
+}
+
 /* Return true if OP is a valid operand for the BRAS instruction.
    OP is the current operation.
    MODE is the current operation mode.  */
index 40b94f0..58ad2e7 100644 (file)
@@ -1145,17 +1145,17 @@ CUMULATIVE_ARGS;
   case MINUS:                                                           \
   case NEG:                                                             \
   case NOT:                                                             \
-          return 1;                                                     \
+    return COSTS_N_INSNS (1);                                           \
   case MULT:                                                            \
     if (GET_MODE (XEXP (X, 0)) == DImode)                               \
-      return 40;                                                        \
-        else                                                            \
-      return 7;                                                         \
+      return COSTS_N_INSNS (40);                                        \
+    else                                                                \
+      return COSTS_N_INSNS (7);                                         \
   case DIV:                                                             \
   case UDIV:                                                            \
   case MOD:                                                             \
   case UMOD:                                                            \
-          return 33;
+    return COSTS_N_INSNS (33);
 
 
 /* An expression giving the cost of an addressing mode that contains
@@ -1197,13 +1197,9 @@ CUMULATIVE_ARGS;
    of registers on machines with lots of registers.
 
    This macro will normally either not be defined or be defined as a
-   constant.
+   constant.  */
 
-   On s390 symbols are expensive if compiled with fpic
-   lifetimes.  */
-
-#define ADDRESS_COST(RTX) \
-  ((flag_pic && GET_CODE (RTX) == SYMBOL_REF) ? 2 : 1)
+#define ADDRESS_COST(RTX) s390_address_cost ((RTX))
 
 /* On s390, copy between fprs and gprs is expensive.  */