diff mbox

Do not run IPA transform phases multiple times

Message ID 20140418130809.GB12215@virgil.suse
State New
Headers show

Commit Message

Martin Jambor April 18, 2014, 1:08 p.m. UTC
On Fri, Apr 18, 2014 at 01:49:36PM +0200, Jakub Jelinek wrote:
> It reproduces on x86_64 too, I guess the reason why you aren't seeing this
> is that you might have too old assembler that doesn't support
> avx2 instructions (you actually don't need avx2 hw to reproduce, any
> x86_64 or i686 just with gas that supports avx2 should be enough).
> 

I see, with that information I have managed to reproduce the failures
and now am convinced the patch (re-posted below) is indeed the correct
thing to do.  I am going to bootstrap it over the weekend (can't do it
earlier to test these testcases).  Honza, is it OK for trunk if it
passes?

Thanks,

Martin


2014-04-18  Martin Jambor  <mjambor@suse.cz>

	* cgraphclones.c (cgraph_function_versioning): Copy
	ipa_transforms_to_apply instead of asserting it is empty.

Comments

Martin Jambor April 22, 2014, 4:56 p.m. UTC | #1
On Fri, Apr 18, 2014 at 03:08:09PM +0200, Martin Jambor wrote:
> On Fri, Apr 18, 2014 at 01:49:36PM +0200, Jakub Jelinek wrote:
> > It reproduces on x86_64 too, I guess the reason why you aren't seeing this
> > is that you might have too old assembler that doesn't support
> > avx2 instructions (you actually don't need avx2 hw to reproduce, any
> > x86_64 or i686 just with gas that supports avx2 should be enough).
> > 
> 
> I see, with that information I have managed to reproduce the failures
> and now am convinced the patch (re-posted below) is indeed the correct
> thing to do.  I am going to bootstrap it over the weekend (can't do it
> earlier to test these testcases).  Honza, is it OK for trunk if it
> passes?

The patch has passed boostrap and testing on x86_64 with AVX support,
Honza approved it on IRC and so I have committed it to trunk.

Thanks,

Martin 

> 
> 2014-04-18  Martin Jambor  <mjambor@suse.cz>
> 
> 	* cgraphclones.c (cgraph_function_versioning): Copy
> 	ipa_transforms_to_apply instead of asserting it is empty.
> 
> Index: src/gcc/cgraphclones.c
> ===================================================================
> --- src.orig/gcc/cgraphclones.c
> +++ src/gcc/cgraphclones.c
> @@ -974,7 +974,9 @@ cgraph_function_versioning (struct cgrap
>      cgraph_copy_node_for_versioning (old_version_node, new_decl,
>  				     redirect_callers, bbs_to_copy);
>  
> -  gcc_assert (!old_version_node->ipa_transforms_to_apply.exists ());
> +  if (old_version_node->ipa_transforms_to_apply.exists ())
> +    new_version_node->ipa_transforms_to_apply
> +      = old_version_node->ipa_transforms_to_apply.copy ();
>    /* Copy the OLD_VERSION_NODE function tree to the new version.  */
>    tree_function_versioning (old_decl, new_decl, tree_map, false, args_to_skip,
>  			    skip_return, bbs_to_copy, new_entry_block);
>
diff mbox

Patch

Index: src/gcc/cgraphclones.c
===================================================================
--- src.orig/gcc/cgraphclones.c
+++ src/gcc/cgraphclones.c
@@ -974,7 +974,9 @@  cgraph_function_versioning (struct cgrap
     cgraph_copy_node_for_versioning (old_version_node, new_decl,
 				     redirect_callers, bbs_to_copy);
 
-  gcc_assert (!old_version_node->ipa_transforms_to_apply.exists ());
+  if (old_version_node->ipa_transforms_to_apply.exists ())
+    new_version_node->ipa_transforms_to_apply
+      = old_version_node->ipa_transforms_to_apply.copy ();
   /* Copy the OLD_VERSION_NODE function tree to the new version.  */
   tree_function_versioning (old_decl, new_decl, tree_map, false, args_to_skip,
 			    skip_return, bbs_to_copy, new_entry_block);