aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorUlrich Weigand <uweigand@de.ibm.com>2002-09-18 18:57:18 +0000
committerUlrich Weigand <uweigand@gcc.gnu.org>2002-09-18 18:57:18 +0000
commitdea09b1b95f7de959fa646b6fb353ed2b183abbf (patch)
tree249cbe370ab2c67d5c41f167074a682a6f132ba9 /gcc
parente4850f36e545325e3309870d13dfe4582e7cb9d4 (diff)
downloadgcc-dea09b1b95f7de959fa646b6fb353ed2b183abbf.zip
gcc-dea09b1b95f7de959fa646b6fb353ed2b183abbf.tar.gz
gcc-dea09b1b95f7de959fa646b6fb353ed2b183abbf.tar.bz2
s390.c (s390_address_cost): New function.
* 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. From-SVN: r57282
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog7
-rw-r--r--gcc/config/s390/s390-protos.h1
-rw-r--r--gcc/config/s390/s390.c13
-rw-r--r--gcc/config/s390/s390.h18
4 files changed, 28 insertions, 11 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 365c689..37ae814 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -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>
diff --git a/gcc/config/s390/s390-protos.h b/gcc/config/s390/s390-protos.h
index c66207a..f5a190f 100644
--- a/gcc/config/s390/s390-protos.h
+++ b/gcc/config/s390/s390-protos.h
@@ -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));
diff --git a/gcc/config/s390/s390.c b/gcc/config/s390/s390.c
index 877014d..ecc1679 100644
--- a/gcc/config/s390/s390.c
+++ b/gcc/config/s390/s390.c
@@ -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. */
diff --git a/gcc/config/s390/s390.h b/gcc/config/s390/s390.h
index 40b94f0..58ad2e7 100644
--- a/gcc/config/s390/s390.h
+++ b/gcc/config/s390/s390.h
@@ -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. */