From c525ba9a3f44ebd7ae89e3efa0bde60161c08582 Mon Sep 17 00:00:00 2001
From: Jan Hubicka <jh@suse.cz>
Date: Fri, 19 Jul 2013 20:19:48 +0200
Subject: [PATCH] lto-partition.c (lto_balanced_map): Fix -fno-toplevel-reorder
 partitioning of variables.

	* lto-partition.c (lto_balanced_map): Fix -fno-toplevel-reorder
	partitioning of variables.

From-SVN: r201065
---
 gcc/lto/ChangeLog       | 5 +++++
 gcc/lto/lto-partition.c | 4 +++-
 2 files changed, 8 insertions(+), 1 deletion(-)

diff --git a/gcc/lto/ChangeLog b/gcc/lto/ChangeLog
index c2cbeedaa2a6..b37a8794696a 100644
--- a/gcc/lto/ChangeLog
+++ b/gcc/lto/ChangeLog
@@ -1,3 +1,8 @@
+2013-06-20  Jan Hubicka  <jh@suse.cz>
+
+	* lto-partition.c (lto_balanced_map): Fix -fno-toplevel-reorder
+	partitioning of variables.
+
 2013-06-20  Jan Hubicka  <jh@suse.cz>
 
 	* lto.c (read_cgraph_and_symbols): Set cgraph state.
diff --git a/gcc/lto/lto-partition.c b/gcc/lto/lto-partition.c
index ffc8da3e94e3..87826986a638 100644
--- a/gcc/lto/lto-partition.c
+++ b/gcc/lto/lto-partition.c
@@ -444,7 +444,7 @@ void
 lto_balanced_map (void)
 {
   int n_nodes = 0;
-  int n_varpool_nodes = 0, varpool_pos = 0;
+  int n_varpool_nodes = 0, varpool_pos = 0, best_varpool_pos = 0;
   struct cgraph_node **postorder =
     XCNEWVEC (struct cgraph_node *, cgraph_n_nodes);
   struct cgraph_node **order = XNEWVEC (struct cgraph_node *, cgraph_max_uid);
@@ -684,6 +684,7 @@ lto_balanced_map (void)
 	  best_i = i;
 	  best_n_nodes = lto_symtab_encoder_size (partition->encoder);
 	  best_total_size = total_size;
+	  best_varpool_pos = varpool_pos;
 	}
       if (cgraph_dump_file)
 	fprintf (cgraph_dump_file, "Step %i: added %s/%i, size %i, cost %i/%i "
@@ -701,6 +702,7 @@ lto_balanced_map (void)
 		fprintf (cgraph_dump_file, "Unwinding %i insertions to step %i\n",
 			 i - best_i, best_i);
 	      undo_partition (partition, best_n_nodes);
+	      varpool_pos = best_varpool_pos;
 	    }
 	  i = best_i;
  	  /* When we are finished, avoid creating empty partition.  */
-- 
GitLab