Sun Dec 13 00:24:14 1998 J"orn Rennecke <amylaar@cygnus.co.uk>
+ * 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.
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;
{
/* 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. */
/* 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
if (!obey_regdecls)
TIMEVAR (local_alloc_time,
{
- recompute_reg_usage (insns);
+ recompute_reg_usage (insns, ! optimize_size);
regclass (insns, max_reg_num ());
local_alloc ();
});