aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMark Mitchell <mark@codesourcery.com>1999-11-04 07:23:58 +0000
committerMark Mitchell <mmitchel@gcc.gnu.org>1999-11-04 07:23:58 +0000
commit673b5311a91950bfb2d484fc057411ae00bd5e09 (patch)
tree1464717adfe230dd1a7f3efcf6143c8d9d949e03
parentd211953910b71e341ccec849e4ade98db792369e (diff)
downloadgcc-673b5311a91950bfb2d484fc057411ae00bd5e09.zip
gcc-673b5311a91950bfb2d484fc057411ae00bd5e09.tar.gz
gcc-673b5311a91950bfb2d484fc057411ae00bd5e09.tar.bz2
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
-rw-r--r--gcc/ChangeLog9
-rw-r--r--gcc/emit-rtl.c19
-rw-r--r--gcc/flags.h5
-rw-r--r--gcc/rtl.h2
-rw-r--r--gcc/toplev.c37
5 files changed, 50 insertions, 22 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 5731443..49f9000 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,12 @@
+Wed Nov 3 23:05:14 1999 Mark Mitchell <mark@codesourcery.com>
+
+ * 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 <davem@redhat.com>
* config/sparc/sparc.md: Remove insn type fpsqrt, add fpsqrts
diff --git a/gcc/emit-rtl.c b/gcc/emit-rtl.c
index fed65a6..16fe0bc 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 9b88302..1cca481 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 4b7ca96..baa4d83 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 232e515..5e7dbc0 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);