We're still hitting the overzealous assert identified in PR49246 that is
looking for empty LTO partitions, even after the change to a checking assert.
How about we backport Honza's mainline patch that stops the creation of empty
partitions in the first place?  Speaking with honza on IRC, he thought it was
probably a good idea to backport it.

I bootstrapped and regtested the backport patch below on powerpc64-linux with
no regressions.

Ok for the 4.6 branch?

Peter


        Backport from mainline
        2011-06-11  Jan Hubicka  <j...@suse.cz>

        PR lto/48246
        * lto.c (lto_1_to_1_map): Don't create empty partitions.
        (lto_balanced_map): Likewise.

Index: gcc/lto/lto.c
===================================================================
--- gcc/lto/lto.c       (revision 186600)
+++ gcc/lto/lto.c       (working copy)
@@ -893,7 +893,8 @@ lto_1_to_1_map (void)
 
   for (node = cgraph_nodes; node; node = node->next)
     {
-      if (!partition_cgraph_node_p (node))
+      if (!partition_cgraph_node_p (node)
+         || node->aux)
        continue;
 
       file_data = node->local.lto_file_data;
@@ -923,13 +924,13 @@ lto_1_to_1_map (void)
          npartitions++;
        }
 
-      if (!node->aux)
-        add_cgraph_node_to_partition (partition, node);
+      add_cgraph_node_to_partition (partition, node);
     }
 
   for (vnode = varpool_nodes; vnode; vnode = vnode->next)
     {
-      if (!partition_varpool_node_p (vnode))
+      if (!partition_varpool_node_p (vnode)
+         || vnode->aux)
        continue;
       file_data = vnode->lto_file_data;
       slot = pointer_map_contains (pmap, file_data);
@@ -943,8 +944,7 @@ lto_1_to_1_map (void)
          npartitions++;
        }
 
-      if (!vnode->aux)
-        add_varpool_node_to_partition (partition, vnode);
+      add_varpool_node_to_partition (partition, vnode);
     }
   for (node = cgraph_nodes; node; node = node->next)
     node->aux = NULL;
@@ -1050,8 +1050,9 @@ lto_balanced_map (void)
 
   for (i = 0; i < n_nodes; i++)
     {
-      if (!order[i]->aux)
-        add_cgraph_node_to_partition (partition, order[i]);
+      if (order[i]->aux)
+       continue;
+      add_cgraph_node_to_partition (partition, order[i]);
       total_size -= order[i]->global.size;
 
       /* Once we added a new node to the partition, we also want to add
@@ -1231,6 +1232,8 @@ lto_balanced_map (void)
            }
          i = best_i;
          /* When we are finished, avoid creating empty partition.  */
+         while (i < n_nodes - 1 && order[i + 1]->aux)
+           i++;
          if (i == n_nodes - 1)
            break;
          partition = new_partition ("");


Reply via email to