Patchwork [LTO,4.6] Backport Honza's PR48246 patch

login
register
mail settings
Submitter Peter Bergner
Date April 20, 2012, 8:15 p.m.
Message ID <1334952949.3078.38.camel@otta>
Download mbox | patch
Permalink /patch/154136/
State New
Headers show

Comments

Peter Bergner - April 20, 2012, 8:15 p.m.
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  <jh@suse.cz>

	PR lto/48246
	* lto.c (lto_1_to_1_map): Don't create empty partitions.
	(lto_balanced_map): Likewise.
Richard Guenther - April 23, 2012, 9:33 a.m.
On Fri, Apr 20, 2012 at 10:15 PM, Peter Bergner <bergner@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  <jh@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 ("");
>
>
Peter Bergner - April 23, 2012, 1:05 p.m.
On Mon, 2012-04-23 at 11:33 +0200, Richard Guenther wrote:
> On Fri, Apr 20, 2012 at 10:15 PM, Peter Bergner <bergner@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, committed as revision 186703.

Peter

Patch

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