On Wed, 28 Mar 2012, Martin Jambor wrote:

> Hi,
> 
> when testing a different patch of mine I hit the assert in
> insert_clobbers_for_var which is there to make sure that there is a
> call to builtin_stack_save in a BB with or dominating a call to
> builtin_alloca_with_align.  In my case that was not true because the
> DOM pass duplicated the call to builtin_stack_save and put it onto two
> different paths to the same BB.
> 
> On IRC I've been told that is OK and the that CCP cannot make such
> assumtions.  Since it is only a missed-optimization if the call to the
> builtin is not found and processed (basically PR 51491 again but only
> in cases like these), I thought it best to just remove the assert by
> the following simple patch, bootstrapped and tested on x86_64-linux.
> 
> OK for trunk?

Ok, but please add a comment before the loop why it is ok and why
it can happen that we do not find a stack-save.

Thanks,
Richard.

> Thanks,
> 
> Martin
> 
> 
> 2012-03-28  Martin Jambor  <mjam...@suse.cz>
> 
>       * tree-ssa-ccp.c (insert_clobbers_for_var): Do not assert that there
>       is a builtin_stack_save in a dominating BB.
> 
> Index: src/gcc/tree-ssa-ccp.c
> ===================================================================
> --- src.orig/gcc/tree-ssa-ccp.c
> +++ src/gcc/tree-ssa-ccp.c
> @@ -1769,18 +1769,16 @@ gsi_prev_dom_bb_nondebug (gimple_stmt_it
>  static void
>  insert_clobbers_for_var (gimple_stmt_iterator i, tree var)
>  {
> -  bool save_found;
>    gimple stmt;
>    tree saved_val;
>    htab_t visited = NULL;
>  
> -  for (save_found = false; !gsi_end_p (i); gsi_prev_dom_bb_nondebug (&i))
> +  for (; !gsi_end_p (i); gsi_prev_dom_bb_nondebug (&i))
>      {
>        stmt = gsi_stmt (i);
>  
>        if (!gimple_call_builtin_p (stmt, BUILT_IN_STACK_SAVE))
>       continue;
> -      save_found = true;
>  
>        saved_val = gimple_call_lhs (stmt);
>        if (saved_val == NULL_TREE)
> @@ -1792,7 +1790,6 @@ insert_clobbers_for_var (gimple_stmt_ite
>  
>    if (visited != NULL)
>      htab_delete (visited);
> -  gcc_assert (save_found);
>  }
>  
>  /* Detects a __builtin_alloca_with_align with constant size argument.  
> Declares
> 
> 

-- 
Richard Guenther <rguent...@suse.de>
SUSE / SUSE Labs
SUSE LINUX Products GmbH - Nuernberg - AG Nuernberg - HRB 16746
GF: Jeff Hawn, Jennifer Guild, Felix Imendörffer

Reply via email to