On Fri, 4 Dec 2015, Jakub Jelinek wrote:

> On Fri, Dec 04, 2015 at 10:30:38AM +0100, Richard Biener wrote:
> > > The following patch has been bootstrapped/regtested on x86_64-linux and
> > > i686-linux.
> > 
> > The patch is ok - it looks like you could have removed the
> > __builtin_alloca strcmp with it though.
> 
> Ok, will remove the strcmp then.
> 
> > Does the patch mean we inlined __builtin_alloca_with_align ()
> > functions?  We might run into the issue Eric fixed lately with
> 
> Yes, see testcase below.  4.7+ inlines it.  As for tail call optimization,
> seems we are just lucky there (f4), as fab pass which is quite late
> turns the __builtin_stack_restore into GIMPLE_NOP and tailc pass does not
> ignore nops.  Shall I commit following patch to trunk to fix that up
> (after committing this VLA fix of course)?

Yes please.

Thanks,
Richard.

> int f1 (char *);
> 
> static inline void
> f2 (int x)
> {
>   char a[x];
>   f1 (a);
> }
> 
> void
> f3 (int x)
> {
>   f2 (x);
>   f2 (x);
>   f2 (x);
>   f2 (x);
> }
> 
> int
> f4 (int x)
> {
>   char a[x];
>   return f1 (a);
> }
> 
> 2015-12-04  Jakub Jelinek  <ja...@redhat.com>
> 
>       * tree-tailcall.c (find_tail_calls): Ignore GIMPLE_NOPs.
> 
> --- gcc/tree-tailcall.c.jj    2015-11-04 11:12:17.000000000 +0100
> +++ gcc/tree-tailcall.c       2015-12-04 11:43:01.296110941 +0100
> @@ -412,9 +412,10 @@ find_tail_calls (basic_block bb, struct
>      {
>        stmt = gsi_stmt (gsi);
>  
> -      /* Ignore labels, returns, clobbers and debug stmts.  */
> +      /* Ignore labels, returns, nops, clobbers and debug stmts.  */
>        if (gimple_code (stmt) == GIMPLE_LABEL
>         || gimple_code (stmt) == GIMPLE_RETURN
> +       || gimple_code (stmt) == GIMPLE_NOP
>         || gimple_clobber_p (stmt)
>         || is_gimple_debug (stmt))
>       continue;
> @@ -532,7 +533,8 @@ find_tail_calls (basic_block bb, struct
>  
>        stmt = gsi_stmt (agsi);
>  
> -      if (gimple_code (stmt) == GIMPLE_LABEL)
> +      if (gimple_code (stmt) == GIMPLE_LABEL
> +       || gimple_code (stmt) == GIMPLE_NOP)
>       continue;
>  
>        if (gimple_code (stmt) == GIMPLE_RETURN)
> 
> 
>       Jakub
> 
> 

-- 
Richard Biener <rguent...@suse.de>
SUSE LINUX GmbH, GF: Felix Imendoerffer, Jane Smithard, Graham Norton, HRB 
21284 (AG Nuernberg)

Reply via email to