From: Mark Mitchell Date: Thu, 4 Nov 1999 07:23:58 +0000 (+0000) Subject: flags.h (flag_renumber_insns): Declare. X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=673b5311a91950bfb2d484fc057411ae00bd5e09;p=gcc.git flags.h (flag_renumber_insns): Declare. * flags.h (flag_renumber_insns): Declare. * emit-rtl.c (renumber_insns): Check flag_renumber_insns. Print renumbering table. * rtl.h (renumber_insns): Change prototype. * toplev.c (flag_renumber_insns): Define. (rest_of_compilation): Pass rtl_dump_file to flag_renumber_insns. From-SVN: r30388 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 573144367ae..49f90002b86 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,12 @@ +Wed Nov 3 23:05:14 1999 Mark Mitchell + + * flags.h (flag_renumber_insns): Declare. + * emit-rtl.c (renumber_insns): Check flag_renumber_insns. Print + renumbering table. + * rtl.h (renumber_insns): Change prototype. + * toplev.c (flag_renumber_insns): Define. + (rest_of_compilation): Pass rtl_dump_file to flag_renumber_insns. + Wed Nov 3 15:11:27 1999 David S. Miller * config/sparc/sparc.md: Remove insn type fpsqrt, add fpsqrts diff --git a/gcc/emit-rtl.c b/gcc/emit-rtl.c index fed65a608c1..16fe0bc2c8b 100644 --- a/gcc/emit-rtl.c +++ b/gcc/emit-rtl.c @@ -1898,21 +1898,33 @@ get_max_uid () 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++; + } } /* Return the next insn. If it is a SEQUENCE, return the first insn @@ -2593,7 +2605,6 @@ remove_unncessary_notes () { 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 diff --git a/gcc/flags.h b/gcc/flags.h index 9b88302d763..1cca4816808 100644 --- a/gcc/flags.h +++ b/gcc/flags.h @@ -495,6 +495,11 @@ extern int flag_bounded_pointers; For Fortran: defaults to off. For CHILL: defaults to off. */ extern int flag_bounds_check; + +/* 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. */ +extern int flag_renumber_insns; /* Other basic status info about current function. */ diff --git a/gcc/rtl.h b/gcc/rtl.h index 4b7ca9683b4..baa4d83bdde 100644 --- a/gcc/rtl.h +++ b/gcc/rtl.h @@ -1460,7 +1460,7 @@ extern rtx emit PROTO ((rtx)); warnings about unreachable code. */ int force_line_numbers PROTO((void)); void restore_line_number_status PROTO((int old_value)); -extern void renumber_insns PROTO ((void)); +extern void renumber_insns PROTO ((FILE *)); extern void remove_unncessary_notes PROTO ((void)); /* In insn-emit.c */ diff --git a/gcc/toplev.c b/gcc/toplev.c index 232e515b533..5e7dbc0a272 100644 --- a/gcc/toplev.c +++ b/gcc/toplev.c @@ -771,6 +771,11 @@ int flag_bounded_pointers = 0; 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 @@ -3776,6 +3781,17 @@ rest_of_compilation (decl) 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; @@ -3784,20 +3800,9 @@ rest_of_compilation (decl) 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 @@ -3832,18 +3837,17 @@ rest_of_compilation (decl) 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); @@ -3970,7 +3974,6 @@ rest_of_compilation (decl) } /* Dump rtl code after cse, if we are doing that. */ - if (cse2_dump) { close_dump_file (print_rtl, insns);