From dea09b1b95f7de959fa646b6fb353ed2b183abbf Mon Sep 17 00:00:00 2001 From: Ulrich Weigand Date: Wed, 18 Sep 2002 18:57:18 +0000 Subject: [PATCH] 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 --- gcc/ChangeLog | 7 +++++++ gcc/config/s390/s390-protos.h | 1 + gcc/config/s390/s390.c | 13 +++++++++++++ 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 + + * 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 Donn Terry 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. */ -- 2.30.2