diff options
author | Ulrich Weigand <uweigand@de.ibm.com> | 2002-09-18 18:57:18 +0000 |
---|---|---|
committer | Ulrich Weigand <uweigand@gcc.gnu.org> | 2002-09-18 18:57:18 +0000 |
commit | dea09b1b95f7de959fa646b6fb353ed2b183abbf (patch) | |
tree | 249cbe370ab2c67d5c41f167074a682a6f132ba9 | |
parent | e4850f36e545325e3309870d13dfe4582e7cb9d4 (diff) | |
download | gcc-dea09b1b95f7de959fa646b6fb353ed2b183abbf.tar.gz |
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
-rw-r--r-- | gcc/ChangeLog | 7 | ||||
-rw-r--r-- | gcc/config/s390/s390-protos.h | 1 | ||||
-rw-r--r-- | gcc/config/s390/s390.c | 13 | ||||
-rw-r--r-- | gcc/config/s390/s390.h | 18 |
4 files changed, 28 insertions, 11 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 365c689a447..37ae8149c1e 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 c66207ad072..f5a190fd9e9 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 877014d5e6c..ecc1679cd4d 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 40b94f0b1a2..58ad2e71829 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. */ |