return cur_insn_uid;
}
+/* Renumber instructions so that no instruction UIDs are wasted. */
+
void
-renumber_insns ()
+renumber_insns (stream)
+ FILE *stream;
{
rtx insn;
int old_max_uid = cur_insn_uid;
+ /* If we're not supposed to renumber instructions, don't. */
+ if (!flag_renumber_insns)
+ return;
+
/* If there aren't that many instructions, then it's not really
worth renumbering them. */
- if (get_max_uid () < 25000)
+ if (flag_renumber_insns == 1 && get_max_uid () < 25000)
return;
cur_insn_uid = 1;
for (insn = get_insns (); insn; insn = NEXT_INSN (insn))
- INSN_UID (insn) = cur_insn_uid++;
+ {
+ if (stream)
+ fprintf (stream, "Renumbering insn %d to %d\n",
+ INSN_UID (insn), cur_insn_uid);
+ INSN_UID (insn) = cur_insn_uid++;
+ }
}
\f
/* Return the next insn. If it is a SEQUENCE, return the first insn
{
rtx insn;
rtx next;
- varray_type block_stack;
/* Remove NOTE_INSN_DELETED notes. We must not remove the first
instruction in the function because the compiler depends on the
For CHILL: defaults to off. */
int flag_bounds_check = 0;
+/* If one, renumber instruction UIDs to reduce the number of
+ unused UIDs if there are a lot of instructions. If greater than
+ one, unconditionally renumber instruction UIDs. */
+int flag_renumber_insns = 1;
+
/* Values of the -falign-* flags: how much to align labels in code.
0 means `use default', 1 means `don't align'.
For each variable, there is an _log variant which is the power
TIMEVAR (jump_time, jump_optimize (insns, !JUMP_CROSS_JUMP, !JUMP_NOOP_MOVES,
JUMP_AFTER_REGSCAN));
+ /* Jump optimization, and the removal of NULL pointer checks, may
+ have reduced the number of instructions substantially. CSE, and
+ future passes, allocate arrays whose dimensions involve the maximum
+ instruction UID, so if we can reduce the maximum UID we'll save big on
+ memory. */
+ renumber_insns (rtl_dump_file);
+
+ /* Dump rtl code after jump, if we are doing that. */
+ if (jump_opt_dump)
+ close_dump_file (print_rtl, insns);
+
/* Now is when we stop if -fsyntax-only and -Wreturn-type. */
if (rtl_dump_and_exit || flag_syntax_only || DECL_DEFER_OUTPUT (decl))
goto exit_rest_of_compilation;
if (flag_delete_null_pointer_checks)
TIMEVAR (jump_time, delete_null_pointer_checks (get_insns ()));
- /* Dump rtl code after jump, if we are doing that. */
- if (jump_opt_dump)
- close_dump_file (print_rtl, insns);
-
if (ggc_p)
ggc_collect ();
- /* Jump optimization, and the removal of NULL pointer checks, may
- have reduced the number of instructions substantially. CSE, and
- future passes, allocate arrays whose dimensions involve the maximum
- instruction UID, so if we can reduce the maximum UID we'll save big on
- memory. */
- renumber_insns ();
-
/* Perform common subexpression elimination.
Nonzero value from `cse_main' means that jumps were simplified
and some code may now be unreachable, so do
if (flag_delete_null_pointer_checks)
TIMEVAR (jump_time, delete_null_pointer_checks (get_insns ()));
- /* Dump rtl code after cse, if we are doing that. */
+ /* The second pass of jump optimization is likely to have
+ removed a bunch more instructions. */
+ renumber_insns (rtl_dump_file);
+ /* Dump rtl code after cse, if we are doing that. */
if (cse_dump)
{
close_dump_file (print_rtl, insns);
if (graph_dump_format != no_graph)
print_rtl_graph_with_bb (dump_base_name, ".02.cse", insns);
}
-
- /* The second pass of jump optimization is likely to have
- removed a bunch more instructions. */
- renumber_insns ();
}
purge_addressof (insns);
}
/* Dump rtl code after cse, if we are doing that. */
-
if (cse2_dump)
{
close_dump_file (print_rtl, insns);