[PATCH] Make renumber_gimple_stmt_uids and renumber_gimple_stmt_uids_in_bbs consistent

Richard Guenther rguenther@suse.de
Wed Mar 30 16:19:00 GMT 2011


As people noted one computes UIDs for PHIs and one doesn't.  Now I'm
working on sth that needs it for PHIs, thus the following fix.
We have to exclude LTO as it re-builds PHIs and gets confused with
inconsistent numbering.

Bootstrapped and tested on x86_64-unknown-linux-gnu, applied.

Richard.

2011-03-30  Richard Guenther  <rguenther@suse.de>

	* tree-dfa.c (renumber_gimple_stmt_uids): Also number PHIs.
	* lto-streamer-out.c (output_function): Do not use
	renumber_gimple_stmt_uids.
	* lto-streamer-in.c (input_function): Likewise.

Index: gcc/tree-dfa.c
===================================================================
--- gcc/tree-dfa.c	(revision 171716)
+++ gcc/tree-dfa.c	(working copy)
@@ -151,6 +151,11 @@ renumber_gimple_stmt_uids (void)
   FOR_ALL_BB (bb)
     {
       gimple_stmt_iterator bsi;
+      for (bsi = gsi_start_phis (bb); !gsi_end_p (bsi); gsi_next (&bsi))
+	{
+	  gimple stmt = gsi_stmt (bsi);
+	  gimple_set_uid (stmt, inc_gimple_stmt_max_uid (cfun));
+	}
       for (bsi = gsi_start_bb (bb); !gsi_end_p (bsi); gsi_next (&bsi))
 	{
 	  gimple stmt = gsi_stmt (bsi);
Index: gcc/lto-streamer-out.c
===================================================================
--- gcc/lto-streamer-out.c	(revision 171716)
+++ gcc/lto-streamer-out.c	(working copy)
@@ -1981,8 +2031,19 @@ output_function (struct cgraph_node *nod
   /* We will renumber the statements.  The code that does this uses
      the same ordering that we use for serializing them so we can use
      the same code on the other end and not have to write out the
-     statement numbers.  */
-  renumber_gimple_stmt_uids ();
+     statement numbers.  We do not assign UIDs to PHIs here because
+     virtual PHIs get re-computed on-the-fly which would make numbers
+     inconsistent.  */
+  set_gimple_stmt_max_uid (cfun, 0);
+  FOR_ALL_BB (bb)
+    {
+      gimple_stmt_iterator gsi;
+      for (gsi = gsi_start_bb (bb); !gsi_end_p (gsi); gsi_next (&gsi))
+	{
+	  gimple stmt = gsi_stmt (gsi);
+	  gimple_set_uid (stmt, inc_gimple_stmt_max_uid (cfun));
+	}
+    }
 
   /* Output the code for the function.  */
   FOR_ALL_BB_FN (bb, fn)
Index: gcc/lto-streamer-in.c
===================================================================
--- gcc/lto-streamer-in.c	(revision 171716)
+++ gcc/lto-streamer-in.c	(working copy)
@@ -1287,7 +1287,16 @@ input_function (tree fn_decl, struct dat
 
   /* Fix up the call statements that are mentioned in the callgraph
      edges.  */
-  renumber_gimple_stmt_uids ();
+  set_gimple_stmt_max_uid (cfun, 0);
+  FOR_ALL_BB (bb)
+    {
+      gimple_stmt_iterator gsi;
+      for (gsi = gsi_start_bb (bb); !gsi_end_p (gsi); gsi_next (&gsi))
+	{
+	  gimple stmt = gsi_stmt (gsi);
+	  gimple_set_uid (stmt, inc_gimple_stmt_max_uid (cfun));
+	}
+    }
   stmts = (gimple *) xcalloc (gimple_stmt_max_uid (fn), sizeof (gimple));
   FOR_ALL_BB (bb)
     {



More information about the Gcc-patches mailing list