From 213c4983301cafca0f6a45e0d4796fc38d25896f Mon Sep 17 00:00:00 2001 From: "J\"orn Rennecke" Date: Sun, 13 Dec 1998 00:59:38 +0000 Subject: [PATCH] rtl.h (recompute_reg_usage): Add second argument. * rtl.h (recompute_reg_usage): Add second argument. * flow.c (recompute_reg_usage): Likewise. * toplev.c (rest_of_compilation): Supply second argument to recompute_reg_usage. From-SVN: r24291 --- gcc/ChangeLog | 5 +++++ gcc/flow.c | 12 +++++++++--- gcc/rtl.h | 2 +- gcc/toplev.c | 2 +- 4 files changed, 16 insertions(+), 5 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index fd30ababa6f..977d242533a 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -4,6 +4,11 @@ Sun Dec 13 00:24:14 1998 J"orn Rennecke + * rtl.h (recompute_reg_usage): Add second argument. + * flow.c (recompute_reg_usage): Likewise. + * toplev.c (rest_of_compilation): Supply second argument to + recompute_reg_usage. + * reload1.c (compute_use_by_pseudos): Allow reg_renumber[regno] < 0 after reload. diff --git a/gcc/flow.c b/gcc/flow.c index add9d1257e6..0a47c0e013a 100644 --- a/gcc/flow.c +++ b/gcc/flow.c @@ -4267,12 +4267,18 @@ count_reg_references (x) register allocators to prioritize pseudos for allocation to hard regs. More accurate reference counts generally lead to better register allocation. + F is the first insn to be scanned. + LOOP_STEP denotes how much loop_depth should be incremented per + loop nesting level in order to increase the ref count more for references + in a loop. + It might be worthwhile to update REG_LIVE_LENGTH, REG_BASIC_BLOCK and possibly other information which is used by the register allocators. */ void -recompute_reg_usage (f) +recompute_reg_usage (f, loop_step) rtx f; + int loop_step; { rtx insn; int i, max_reg; @@ -4295,9 +4301,9 @@ recompute_reg_usage (f) { /* Look for loop boundaries. */ if (NOTE_LINE_NUMBER (insn) == NOTE_INSN_LOOP_END) - loop_depth--; + loop_depth -= loop_step; else if (NOTE_LINE_NUMBER (insn) == NOTE_INSN_LOOP_BEG) - loop_depth++; + loop_depth += loop_step; /* If we have LOOP_DEPTH == 0, there has been a bookkeeping error. Abort now rather than setting register status incorrectly. */ diff --git a/gcc/rtl.h b/gcc/rtl.h index 95ddbd1617c..e29767fe481 100644 --- a/gcc/rtl.h +++ b/gcc/rtl.h @@ -1394,7 +1394,7 @@ extern void stupid_life_analysis PROTO ((rtx, int, FILE *)); /* In flow.c */ extern void allocate_for_life_analysis PROTO ((void)); -extern void recompute_reg_usage PROTO ((rtx)); +extern void recompute_reg_usage PROTO ((rtx, int)); #ifdef BUFSIZ extern void dump_flow_info PROTO ((FILE *)); #endif diff --git a/gcc/toplev.c b/gcc/toplev.c index 5a1b0a8ea68..6af4c82b800 100644 --- a/gcc/toplev.c +++ b/gcc/toplev.c @@ -3929,7 +3929,7 @@ rest_of_compilation (decl) if (!obey_regdecls) TIMEVAR (local_alloc_time, { - recompute_reg_usage (insns); + recompute_reg_usage (insns, ! optimize_size); regclass (insns, max_reg_num ()); local_alloc (); }); -- 2.30.2