summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorsteven <steven@138bc75d-0d04-0410-961f-82ee72b054a4>2012-12-05 23:16:52 +0000
committersteven <steven@138bc75d-0d04-0410-961f-82ee72b054a4>2012-12-05 23:16:52 +0000
commit957b2bdc14598dcb7bfbcc757d876b295bc2e946 (patch)
tree7daa076305a95e822e50b52025fa432bc497750f
parent55ce3e896d5f96a31b01e1c1a9691b5282d23f2c (diff)
downloadgcc-957b2bdc14598dcb7bfbcc757d876b295bc2e946.tar.gz
* 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. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@194229 138bc75d-0d04-0410-961f-82ee72b054a4
-rw-r--r--gcc/ChangeLog17
-rw-r--r--gcc/config/alpha/alpha.h3
-rw-r--r--gcc/config/arm/arm.h3
-rw-r--r--gcc/config/cris/cris.h3
-rw-r--r--gcc/config/epiphany/epiphany.h3
-rw-r--r--gcc/config/h8300/h8300.h3
-rw-r--r--gcc/config/i386/i386.h3
-rw-r--r--gcc/config/m32r/m32r.h3
-rw-r--r--gcc/config/mcore/mcore.h3
-rw-r--r--gcc/config/mn10300/mn10300.h3
-rw-r--r--gcc/config/pa/pa.h3
-rw-r--r--gcc/config/pdp11/pdp11.h3
-rw-r--r--gcc/config/rs6000/rs6000.h3
-rw-r--r--gcc/config/sh/sh.h3
-rw-r--r--gcc/config/sparc/sparc.h3
-rw-r--r--gcc/config/v850/v850.h3
-rw-r--r--gcc/config/vax/vax.h3
-rw-r--r--gcc/doc/tm.texi16
-rw-r--r--gcc/doc/tm.texi.in16
-rw-r--r--gcc/function.h3
-rw-r--r--gcc/ira-color.c3
-rw-r--r--gcc/regmove.c8
-rw-r--r--gcc/regs.h26
-rw-r--r--gcc/regstat.c2
24 files changed, 82 insertions, 57 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 652c05f75f5..efeafd3c73b 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 cdb7c49b007..bc14d84055b 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 f520cc717aa..d0f351d861e 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 646ba90b4b9..80fb8f3ad86 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 c18aaa41941..534f513132b 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 61e0dd2f846..b98f6169112 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 443d92eadce..3ac345172c8 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 0072b2f0da3..e871328af7b 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 398dcedfe22..a64e4460fa1 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 eb4f2f9f42f..4dea839873b 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 89665c1cddc..29dbea01256 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 6efbf49a074..76925b1683f 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 f7b0be27776..2e23f6e523d 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 fdd06a067c0..212b97d9c10 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 57c5eaccdbf..99c6a039328 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 e6458bcbaec..2e3e55a18fa 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 35b8f8ea93a..513ac6102db 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 f98196434f8..3ab99871c3b 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 7a93f21073c..6d48fe48b75 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 dd7f099e8a5..65a7c48aa08 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 33f9d24b00b..3b9319ca7c5 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 29f6e6546b6..8dc2d54a674 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
diff --git a/gcc/regs.h b/gcc/regs.h
index 4c9d7a6ce42..adc9384b62e 100644
--- a/gcc/regs.h
+++ b/gcc/regs.h
@@ -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 ddfb404fbf2..34eb7ad67bf 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;