diff options
-rw-r--r-- | gcc/ChangeLog | 17 | ||||
-rw-r--r-- | gcc/config/alpha/alpha.h | 3 | ||||
-rw-r--r-- | gcc/config/arm/arm.h | 3 | ||||
-rw-r--r-- | gcc/config/cris/cris.h | 3 | ||||
-rw-r--r-- | gcc/config/epiphany/epiphany.h | 3 | ||||
-rw-r--r-- | gcc/config/h8300/h8300.h | 3 | ||||
-rw-r--r-- | gcc/config/i386/i386.h | 3 | ||||
-rw-r--r-- | gcc/config/m32r/m32r.h | 3 | ||||
-rw-r--r-- | gcc/config/mcore/mcore.h | 3 | ||||
-rw-r--r-- | gcc/config/mn10300/mn10300.h | 3 | ||||
-rw-r--r-- | gcc/config/pa/pa.h | 3 | ||||
-rw-r--r-- | gcc/config/pdp11/pdp11.h | 3 | ||||
-rw-r--r-- | gcc/config/rs6000/rs6000.h | 3 | ||||
-rw-r--r-- | gcc/config/sh/sh.h | 3 | ||||
-rw-r--r-- | gcc/config/sparc/sparc.h | 3 | ||||
-rw-r--r-- | gcc/config/v850/v850.h | 3 | ||||
-rw-r--r-- | gcc/config/vax/vax.h | 3 | ||||
-rw-r--r-- | gcc/doc/tm.texi | 16 | ||||
-rw-r--r-- | gcc/doc/tm.texi.in | 16 | ||||
-rw-r--r-- | gcc/function.h | 3 | ||||
-rw-r--r-- | gcc/ira-color.c | 3 | ||||
-rw-r--r-- | gcc/regmove.c | 8 | ||||
-rw-r--r-- | gcc/regs.h | 26 | ||||
-rw-r--r-- | gcc/regstat.c | 2 |
24 files changed, 82 insertions, 57 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 652c05f..efeafd3 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,20 @@ +2012-12-05 Steven Bosscher <steven@gcc.gnu.org> + + * doc/tm.texi.in (TARGET_CLASS_LIKELY_SPILLED_P): Update documentation. + * doc/tm.texi: Regenerate. + * regs.h (REG_LIVE_LENGTH): Update comments to not refer to no longer + existing files global.c and local-alloc.c. + * regmove.c (copy_src_to_dest): Likewise. + * function.h (struct rtl_data): Likewise. + * ira-color.c (allocno_priority_compare_func): Likewise. + * regstat.c (regstat_compute_ri): Likewise. + * config/epiphany/epiphany.h, config/vax/vax.h, config/cris/cris.h, + config/h8300/h8300.h, config/alpha/alpha.h, config/sparc/sparc.h, + config/rs6000/rs6000.h, config/pdp11/pdp11.h, config/pa/pa.h, + config/v850/v850.h, config/mn10300/mn10300.h, config/m32r/m32r.h, + config/i386/i386.h, config/mcore/mcore.h, config/sh/sh.h, + config/arm/arm.h (REGNO_OK_FOR_BASE_P): Likewise. + 2012-12-05 Aldy Hernandez <aldyh@redhat.com> PR target/54160 diff --git a/gcc/config/alpha/alpha.h b/gcc/config/alpha/alpha.h index cdb7c49..bc14d84 100644 --- a/gcc/config/alpha/alpha.h +++ b/gcc/config/alpha/alpha.h @@ -778,7 +778,8 @@ extern int alpha_memory_latency; They give nonzero only if REGNO is a hard reg of the suitable class or a pseudo reg currently allocated to a suitable hard reg. Since they use reg_renumber, they are safe only once reg_renumber - has been allocated, which happens in local-alloc.c. */ + has been allocated, which happens in reginfo.c during register + allocation. */ #define REGNO_OK_FOR_INDEX_P(REGNO) 0 #define REGNO_OK_FOR_BASE_P(REGNO) \ diff --git a/gcc/config/arm/arm.h b/gcc/config/arm/arm.h index f520cc7..d0f351d 100644 --- a/gcc/config/arm/arm.h +++ b/gcc/config/arm/arm.h @@ -1730,7 +1730,8 @@ enum arm_auto_incmodes They give nonzero only if REGNO is a hard reg of the suitable class or a pseudo reg currently allocated to a suitable hard reg. Since they use reg_renumber, they are safe only once reg_renumber - has been allocated, which happens in local-alloc.c. */ + has been allocated, which happens in reginfo.c during register + allocation. */ #define TEST_REGNO(R, TEST, VALUE) \ ((R TEST VALUE) || ((unsigned) reg_renumber[R] TEST VALUE)) diff --git a/gcc/config/cris/cris.h b/gcc/config/cris/cris.h index 646ba90..80fb8f3 100644 --- a/gcc/config/cris/cris.h +++ b/gcc/config/cris/cris.h @@ -577,7 +577,8 @@ enum reg_class #define INDEX_REG_CLASS GENERAL_REGS /* Since it uses reg_renumber, it is safe only once reg_renumber - has been allocated, which happens in local-alloc.c. */ + has been allocated, which happens in reginfo.c during register + allocation. */ #define REGNO_OK_FOR_BASE_P(REGNO) \ ((REGNO) <= CRIS_LAST_GENERAL_REGISTER \ || (REGNO) == ARG_POINTER_REGNUM \ diff --git a/gcc/config/epiphany/epiphany.h b/gcc/config/epiphany/epiphany.h index c18aaa4..534f513 100644 --- a/gcc/config/epiphany/epiphany.h +++ b/gcc/config/epiphany/epiphany.h @@ -407,7 +407,8 @@ extern enum reg_class epiphany_regno_reg_class[FIRST_PSEUDO_REGISTER]; They give nonzero only if REGNO is a hard reg of the suitable class or a pseudo reg currently allocated to a suitable hard reg. Since they use reg_renumber, they are safe only once reg_renumber - has been allocated, which happens in local-alloc.c. */ + has been allocated, which happens in reginfo.c during register + allocation. */ #define REGNO_OK_FOR_BASE_P(REGNO) \ ((REGNO) < FIRST_PSEUDO_REGISTER || (unsigned) reg_renumber[REGNO] < FIRST_PSEUDO_REGISTER) #define REGNO_OK_FOR_INDEX_P(REGNO) \ diff --git a/gcc/config/h8300/h8300.h b/gcc/config/h8300/h8300.h index 61e0dd2..b98f616 100644 --- a/gcc/config/h8300/h8300.h +++ b/gcc/config/h8300/h8300.h @@ -498,7 +498,8 @@ struct cum_arg They give nonzero only if REGNO is a hard reg of the suitable class or a pseudo reg currently allocated to a suitable hard reg. Since they use reg_renumber, they are safe only once reg_renumber - has been allocated, which happens in local-alloc.c. */ + has been allocated, which happens in reginfo.c during register + allocation. */ #define REGNO_OK_FOR_INDEX_P(regno) 0 diff --git a/gcc/config/i386/i386.h b/gcc/config/i386/i386.h index 443d92e..3ac3451 100644 --- a/gcc/config/i386/i386.h +++ b/gcc/config/i386/i386.h @@ -1614,7 +1614,8 @@ typedef struct ix86_args { They give nonzero only if REGNO is a hard reg of the suitable class or a pseudo reg currently allocated to a suitable hard reg. Since they use reg_renumber, they are safe only once reg_renumber - has been allocated, which happens in local-alloc.c. */ + has been allocated, which happens in reginfo.c during register + allocation. */ #define REGNO_OK_FOR_INDEX_P(REGNO) \ ((REGNO) < STACK_POINTER_REGNUM \ diff --git a/gcc/config/m32r/m32r.h b/gcc/config/m32r/m32r.h index 0072b2f..e871328 100644 --- a/gcc/config/m32r/m32r.h +++ b/gcc/config/m32r/m32r.h @@ -501,7 +501,8 @@ extern enum reg_class m32r_regno_reg_class[FIRST_PSEUDO_REGISTER]; They give nonzero only if REGNO is a hard reg of the suitable class or a pseudo reg currently allocated to a suitable hard reg. Since they use reg_renumber, they are safe only once reg_renumber - has been allocated, which happens in local-alloc.c. */ + has been allocated, which happens in reginfo.c during register + allocation. */ #define REGNO_OK_FOR_BASE_P(REGNO) \ ((REGNO) < FIRST_PSEUDO_REGISTER \ ? GPR_P (REGNO) || (REGNO) == ARG_POINTER_REGNUM \ diff --git a/gcc/config/mcore/mcore.h b/gcc/config/mcore/mcore.h index 398dced..a64e446 100644 --- a/gcc/config/mcore/mcore.h +++ b/gcc/config/mcore/mcore.h @@ -516,7 +516,8 @@ extern const enum reg_class regno_reg_class[FIRST_PSEUDO_REGISTER]; They give nonzero only if REGNO is a hard reg of the suitable class or a pseudo reg currently allocated to a suitable hard reg. Since they use reg_renumber, they are safe only once reg_renumber - has been allocated, which happens in local-alloc.c. */ + has been allocated, which happens in reginfo.c during register + allocation. */ #define REGNO_OK_FOR_BASE_P(REGNO) \ ((REGNO) < AP_REG || (unsigned) reg_renumber[(REGNO)] < AP_REG) diff --git a/gcc/config/mn10300/mn10300.h b/gcc/config/mn10300/mn10300.h index eb4f2f9..4dea839 100644 --- a/gcc/config/mn10300/mn10300.h +++ b/gcc/config/mn10300/mn10300.h @@ -347,7 +347,8 @@ enum reg_class They give nonzero only if REGNO is a hard reg of the suitable class or a pseudo reg currently allocated to a suitable hard reg. Since they use reg_renumber, they are safe only once reg_renumber - has been allocated, which happens in local-alloc.c. */ + has been allocated, which happens in reginfo.c during register + allocation. */ #ifndef REG_OK_STRICT # define REG_STRICT 0 diff --git a/gcc/config/pa/pa.h b/gcc/config/pa/pa.h index 89665c1..29dbea0 100644 --- a/gcc/config/pa/pa.h +++ b/gcc/config/pa/pa.h @@ -750,7 +750,8 @@ extern int may_call_alloca; They give nonzero only if X is a hard reg of the suitable class or a pseudo reg currently allocated to a suitable hard reg. Since they use reg_renumber, they are safe only once reg_renumber - has been allocated, which happens in local-alloc.c. */ + has been allocated, which happens in reginfo.c during register + allocation. */ #define REGNO_OK_FOR_INDEX_P(X) \ ((X) && ((X) < 32 \ diff --git a/gcc/config/pdp11/pdp11.h b/gcc/config/pdp11/pdp11.h index 6efbf49..76925b1 100644 --- a/gcc/config/pdp11/pdp11.h +++ b/gcc/config/pdp11/pdp11.h @@ -400,7 +400,8 @@ extern int may_call_alloca; They give nonzero only if REGNO is a hard reg of the suitable class or a pseudo reg currently allocated to a suitable hard reg. Since they use reg_renumber, they are safe only once reg_renumber - has been allocated, which happens in local-alloc.c. */ + has been allocated, which happens in reginfo.c during register + allocation. */ #define REGNO_OK_FOR_BASE_P(REGNO) \ ((REGNO) <= PC_REGNUM || (unsigned) reg_renumber[REGNO] <= PC_REGNUM || \ diff --git a/gcc/config/rs6000/rs6000.h b/gcc/config/rs6000/rs6000.h index f7b0be2..2e23f6e 100644 --- a/gcc/config/rs6000/rs6000.h +++ b/gcc/config/rs6000/rs6000.h @@ -1729,7 +1729,8 @@ typedef struct rs6000_args They give nonzero only if REGNO is a hard reg of the suitable class or a pseudo reg currently allocated to a suitable hard reg. Since they use reg_renumber, they are safe only once reg_renumber - has been allocated, which happens in local-alloc.c. */ + has been allocated, which happens in reginfo.c during register + allocation. */ #define REGNO_OK_FOR_INDEX_P(REGNO) \ ((REGNO) < FIRST_PSEUDO_REGISTER \ diff --git a/gcc/config/sh/sh.h b/gcc/config/sh/sh.h index fdd06a0..212b97d 100644 --- a/gcc/config/sh/sh.h +++ b/gcc/config/sh/sh.h @@ -1618,7 +1618,8 @@ struct sh_args { They give nonzero only if REGNO is a hard reg of the suitable class or a pseudo reg currently allocated to a suitable hard reg. Since they use reg_renumber, they are safe only once reg_renumber - has been allocated, which happens in local-alloc.c. */ + has been allocated, which happens in reginfo.c during register + allocation. */ #define REGNO_OK_FOR_BASE_P(REGNO) \ (GENERAL_OR_AP_REGISTER_P (REGNO) \ diff --git a/gcc/config/sparc/sparc.h b/gcc/config/sparc/sparc.h index 57c5eac..99c6a03 100644 --- a/gcc/config/sparc/sparc.h +++ b/gcc/config/sparc/sparc.h @@ -1379,7 +1379,8 @@ do { \ They give nonzero only if REGNO is a hard reg of the suitable class or a pseudo reg currently allocated to a suitable hard reg. Since they use reg_renumber, they are safe only once reg_renumber - has been allocated, which happens in local-alloc.c. */ + has been allocated, which happens in reginfo.c during register + allocation. */ #define REGNO_OK_FOR_INDEX_P(REGNO) \ (SPARC_INT_REG_P (REGNO) || SPARC_INT_REG_P (reg_renumber[REGNO]) \ diff --git a/gcc/config/v850/v850.h b/gcc/config/v850/v850.h index e6458bc..2e3e55a 100644 --- a/gcc/config/v850/v850.h +++ b/gcc/config/v850/v850.h @@ -354,7 +354,8 @@ enum reg_class They give nonzero only if REGNO is a hard reg of the suitable class or a pseudo reg currently allocated to a suitable hard reg. Since they use reg_renumber, they are safe only once reg_renumber - has been allocated, which happens in local-alloc.c. */ + has been allocated, which happens in reginfo.c during register + allocation. */ #define REGNO_OK_FOR_BASE_P(regno) \ (((regno) < FIRST_PSEUDO_REGISTER \ diff --git a/gcc/config/vax/vax.h b/gcc/config/vax/vax.h index 35b8f8e..513ac61 100644 --- a/gcc/config/vax/vax.h +++ b/gcc/config/vax/vax.h @@ -385,7 +385,8 @@ enum reg_class { NO_REGS, ALL_REGS, LIM_REG_CLASSES }; They give nonzero only if REGNO is a hard reg of the suitable class or a pseudo reg currently allocated to a suitable hard reg. Since they use reg_renumber, they are safe only once reg_renumber - has been allocated, which happens in local-alloc.c. */ + has been allocated, which happens in reginfo.c during register + allocation. */ #define REGNO_OK_FOR_INDEX_P(regno) \ ((regno) < FIRST_PSEUDO_REGISTER || reg_renumber[regno] >= 0) diff --git a/gcc/doc/tm.texi b/gcc/doc/tm.texi index f981964..3ab9987 100644 --- a/gcc/doc/tm.texi +++ b/gcc/doc/tm.texi @@ -2834,15 +2834,13 @@ registers of @var{rclass} are needed for spill registers. The default version of this target hook returns @code{true} if @var{rclass} has exactly one register and @code{false} otherwise. On most machines, this -default should be used. Only use this target hook to some other expression -if pseudos allocated by @file{local-alloc.c} end up in memory because their -hard registers were needed for spill registers. If this target hook returns -@code{false} for those classes, those pseudos will only be allocated by -@file{global.c}, which knows how to reallocate the pseudo to another -register. If there would not be another register available for reallocation, -you should not change the implementation of this target hook since -the only effect of such implementation would be to slow down register -allocation. +default should be used. For generally register-starved machines, such as +i386, or machines with right register constraints, such as SH, this hook +can be used to avoid excessive spilling. + +This hook is also used by some of the global intra-procedural code +transformations to throtle code motion, to avoid increasing register +pressure. @end deftypefn @deftypefn {Target Hook} {unsigned char} TARGET_CLASS_MAX_NREGS (reg_class_t @var{rclass}, enum machine_mode @var{mode}) diff --git a/gcc/doc/tm.texi.in b/gcc/doc/tm.texi.in index 7a93f21..6d48fe4 100644 --- a/gcc/doc/tm.texi.in +++ b/gcc/doc/tm.texi.in @@ -2810,15 +2810,13 @@ registers of @var{rclass} are needed for spill registers. The default version of this target hook returns @code{true} if @var{rclass} has exactly one register and @code{false} otherwise. On most machines, this -default should be used. Only use this target hook to some other expression -if pseudos allocated by @file{local-alloc.c} end up in memory because their -hard registers were needed for spill registers. If this target hook returns -@code{false} for those classes, those pseudos will only be allocated by -@file{global.c}, which knows how to reallocate the pseudo to another -register. If there would not be another register available for reallocation, -you should not change the implementation of this target hook since -the only effect of such implementation would be to slow down register -allocation. +default should be used. For generally register-starved machines, such as +i386, or machines with right register constraints, such as SH, this hook +can be used to avoid excessive spilling. + +This hook is also used by some of the global intra-procedural code +transformations to throtle code motion, to avoid increasing register +pressure. @end deftypefn @hook TARGET_CLASS_MAX_NREGS diff --git a/gcc/function.h b/gcc/function.h index dd7f099..65a7c48 100644 --- a/gcc/function.h +++ b/gcc/function.h @@ -389,7 +389,8 @@ struct GTY(()) rtl_data { bool arg_pointer_save_area_init; /* Nonzero if current function must be given a frame pointer. - Set in global.c if anything is allocated on the stack there. */ + Set in reload1.c or lra-eliminations.c if anything is allocated + on the stack there. */ bool frame_pointer_needed; /* When set, expand should optimize for speed. */ diff --git a/gcc/ira-color.c b/gcc/ira-color.c index 33f9d24..3b9319c 100644 --- a/gcc/ira-color.c +++ b/gcc/ira-color.c @@ -2516,8 +2516,7 @@ improve_allocation (void) } } -/* Sort allocnos according to their priorities which are calculated - analogous to ones in file `global.c'. */ +/* Sort allocnos according to their priorities. */ static int allocno_priority_compare_func (const void *v1p, const void *v2p) { diff --git a/gcc/regmove.c b/gcc/regmove.c index 29f6e65..8dc2d54 100644 --- a/gcc/regmove.c +++ b/gcc/regmove.c @@ -616,10 +616,10 @@ copy_src_to_dest (rtx insn, rtx src, rtx dest) int src_regno; int dest_regno; - /* A REG_LIVE_LENGTH of -1 indicates the register is equivalent to a constant - or memory location and is used infrequently; a REG_LIVE_LENGTH of -2 is - parameter when there is no frame pointer that is not allocated a register. - For now, we just reject them, rather than incrementing the live length. */ + /* A REG_LIVE_LENGTH of -1 indicates the register must not go into + a hard register, e.g. because it crosses as setjmp. See the + comment in regstat.c:regstat_bb_compute_ri. Don't try to apply + any transformations to such regs. */ if (REG_P (src) && REG_LIVE_LENGTH (REGNO (src)) > 0 @@ -176,21 +176,17 @@ extern size_t reg_info_p_size; #define REG_N_THROWING_CALLS_CROSSED(N) (reg_info_p[N].throw_calls_crossed) -/* Total number of instructions at which (REG n) is live. The larger - this is, the less priority (REG n) gets for allocation in a hard - register (in global-alloc). This is set in df-problems.c whenever - register info is requested and remains valid for the rest of the - compilation of the function; it is used to control register - allocation. - - local-alloc.c may alter this number to change the priority. - - Negative values are special. - -1 is used to mark a pseudo reg which has a constant or memory equivalent - and is used infrequently enough that it should not get a hard register. - -2 is used to mark a pseudo reg for a parameter, when a frame pointer - is not required. global.c makes an allocno for this but does - not try to assign a hard register to it. */ +/* Total number of instructions at which (REG n) is live. + + This is set in regstat.c whenever register info is requested and + remains valid for the rest of the compilation of the function; it is + used to control register allocation. The larger this is, the less + priority (REG n) gets for allocation in a hard register (in IRA in + priority-coloring mode). + + Negative values are special: -1 is used to mark a pseudo reg that + should not be allocated to a hard register, because it crosses a + setjmp call. */ #define REG_LIVE_LENGTH(N) (reg_info_p[N].live_length) diff --git a/gcc/regstat.c b/gcc/regstat.c index ddfb404..34eb7ad 100644 --- a/gcc/regstat.c +++ b/gcc/regstat.c @@ -389,7 +389,7 @@ regstat_compute_ri (void) BITMAP_FREE (local_processed); free (local_live_last_luid); - /* See the setjmp comment in regstat_ri_bb_compute. */ + /* See the setjmp comment in regstat_bb_compute_ri. */ EXECUTE_IF_SET_IN_BITMAP (setjmp_crosses, FIRST_PSEUDO_REGISTER, regno, bi) { REG_BASIC_BLOCK (regno) = REG_BLOCK_UNKNOWN; |