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 ("");
>
>

Reply via email to