From 10154ff81b1951a085df3fd7ed32b69350e93e6f Mon Sep 17 00:00:00 2001 From: Richard Henderson Date: Tue, 28 Jan 2003 10:14:42 -0800 Subject: target.h (targetm.address_cost): New. * target.h (targetm.address_cost): New. * target-def.h (TARGET_ADDRESS_COST): New. (TARGET_RTX_COSTS): Uncomment. Oops. * cse.c (address_cost): Use new target hook. (default_address_cost): New. * output.h (default_address_cost): Declare. * hooks.c (hook_int_rtx_0): New. * hooks.h (hook_int_rtx_0): Declare. * loop.c (combine_givs_p): Remove if 0 code. * system.h (ADDRESS_COST): Poison. * config/alpha/alpha.c, config/alpha/alpha.h, config/d30v/d30v.c, config/d30v/d30v.h, config/ia64/ia64.c, config/ia64/ia64.h, config/m32r/m32r.c, config/m32r/m32r.h, config/mcore/mcore.c, config/mcore/mcore.h, config/mmix/mmix.c, config/mmix/mmix.h, config/rs6000/rs6000.c, config/rs6000/rs6000.h, config/sparc/sparc.c, config/sparc/sparc.h, config/v850/v850.c, config/v850/v850.h, config/xtensa/xtensa.c, config/xtensa/xtensa.h (TARGET_ADDRESS_COST): Define as hook_int_rtx_0. (ADDRESS_COST): Remove. * config/arc/arc-protos.h, config/arc/arc.c, config/arc/arc.h, config/avr/avr-protos.h, config/avr/avr.c, config/avr/avr.h, config/c4x/c4x-protos.h, config/c4x/c4x.c, config/c4x/c4x.h, config/dsp16xx/dsp16xx-protos.h, config/dsp16xx/dsp16xx.c, config/dsp16xx/dsp16xx.h, config/i386/i386-protos.h, config/i386/i386.c, config/i386/i386.h, config/i960/i960-protos.h, config/i960/i960.c, config/i960/i960.h, config/ip2k/ip2k-protos.h, config/ip2k/ip2k.c, config/ip2k/ip2k.h, config/mips/mips-protos.h, config/mips/mips.c, config/mips/mips.h, config/m68hc11/m68hc11-protos.h, config/m68hc11/m68hc11.c, config/m68hc11/m68hc11.h, config/ns32k/ns32k-protos.h, config/ns32k/ns32k.c, config/ns32k/ns32k.h, config/pa/pa-protos.h, config/pa/pa.c, config/pa/pa.h, config/s390/s390-protos.h, config/s390/s390.c, config/s390/s390.h, config/vax/vax-protos.h, config/vax/vax.c, config/vax/vax.h (foo_address_cost): Make static. (TARGET_ADDRESS_COST): New. (ADDRESS_COST): Remove. * config/arm/arm.h, config/arm/arm.c, config/m88k/m88k.h, config/m88k/m88k.c, config/romp/romp.h, config/romp/romp.c, config/sh/sh.c, config/sh/sh.h, config/stormy16/stormy16.c, config/stormy16/stormy16.h (ADDRESS_COST): Move code ... (foo_address_cost): ... here. (TARGET_ADDRESS_COST): New. * config/m32r/m32r.c (m32r_address_cost): Remove. * config/m32r/m32r-protos.h: Update. * config/mmix/mmix.c (mmix_address_cost): Remove. * config/mmix/mmix-protos.h: Update. * config/mn10300/mn10300.c (mn10300_address_cost_1): Rename from mn10300_address_cost; move unsig allocation ... (mn10300_address_cost): ... here. (TARGET_ADDRESS_COST): New. * config/mn10300/mn10300-protos.h: Update. * config/mn10300/mn10300.h (ADDRESS_COST): Remove. From-SVN: r61989 --- gcc/doc/tm.texi | 77 ++++++++++++++++++++++++++------------------------------- 1 file changed, 35 insertions(+), 42 deletions(-) (limited to 'gcc') diff --git a/gcc/doc/tm.texi b/gcc/doc/tm.texi index 84dc1de..382df86 100644 --- a/gcc/doc/tm.texi +++ b/gcc/doc/tm.texi @@ -5264,48 +5264,6 @@ These macros let you describe the relative speed of various operations on the target machine. @table @code -@findex ADDRESS_COST -@item ADDRESS_COST (@var{address}) -An expression giving the cost of an addressing mode that contains -@var{address}. If not defined, the cost is computed from -the @var{address} expression and the @code{CONST_COSTS} values. - -For most CISC machines, the default cost is a good approximation of the -true cost of the addressing mode. However, on RISC machines, all -instructions normally have the same length and execution time. Hence -all addresses will have equal costs. - -In cases where more than one form of an address is known, the form with -the lowest cost will be used. If multiple forms have the same, lowest, -cost, the one that is the most complex will be used. - -For example, suppose an address that is equal to the sum of a register -and a constant is used twice in the same basic block. When this macro -is not defined, the address will be computed in a register and memory -references will be indirect through that register. On machines where -the cost of the addressing mode containing the sum is no higher than -that of a simple indirect reference, this will produce an additional -instruction and possibly require an additional register. Proper -specification of this macro eliminates this overhead for such machines. - -Similar use of this macro is made in strength reduction of loops. - -@var{address} need not be valid as an address. In such a case, the cost -is not relevant and can be any value; invalid addresses need not be -assigned a different cost. - -On machines where an address involving more than one register is as -cheap as an address computation involving only one register, defining -@code{ADDRESS_COST} to reflect this can cause two registers to be live -over a region of code where only one would have been if -@code{ADDRESS_COST} were not defined in that manner. This effect should -be considered in the definition of this macro. Equivalent costs should -probably only be given to addresses with different numbers of registers -on machines with lots of registers. - -This macro will normally either not be defined or be defined as a -constant. - @findex REGISTER_MOVE_COST @item REGISTER_MOVE_COST (@var{mode}, @var{from}, @var{to}) A C expression for the cost of moving data of mode @var{mode} from a @@ -5529,6 +5487,41 @@ The hook returns true when all subexpressions of @var{x} have been processed, and false when @code{rtx_cost} should recurse. @end deftypefn +@deftypefn {Target Hook} int TARGET_ADDRESS_COST (rtx @var{address}) +This hook computes the cost of an addressing mode that contains +@var{address}. If not defined, the cost is computed from +the @var{address} expression and the @code{TARGET_RTX_COST} hook. + +For most CISC machines, the default cost is a good approximation of the +true cost of the addressing mode. However, on RISC machines, all +instructions normally have the same length and execution time. Hence +all addresses will have equal costs. + +In cases where more than one form of an address is known, the form with +the lowest cost will be used. If multiple forms have the same, lowest, +cost, the one that is the most complex will be used. + +For example, suppose an address that is equal to the sum of a register +and a constant is used twice in the same basic block. When this macro +is not defined, the address will be computed in a register and memory +references will be indirect through that register. On machines where +the cost of the addressing mode containing the sum is no higher than +that of a simple indirect reference, this will produce an additional +instruction and possibly require an additional register. Proper +specification of this macro eliminates this overhead for such machines. + +This hook is never called with an invalid address. + +On machines where an address involving more than one register is as +cheap as an address computation involving only one register, defining +@code{TARGET_ADDRESS_COST} to reflect this can cause two registers to +be live over a region of code where only one would have been if +@code{TARGET_ADDRESS_COST} were not defined in that manner. This effect +should be considered in the definition of this macro. Equivalent costs +should probably only be given to addresses with different numbers of +registers on machines with lots of registers. +@end deftypefn + @node Scheduling @section Adjusting the Instruction Scheduler -- cgit v1.1