On Fri, Apr 20, 2012 at 10:15 PM, Peter Bergner <berg...@vnet.ibm.com> wrote: > 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?
Ok. Thanks, Richard. > 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 (""); > >