This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: [tree-ssa] live analysis on local static functions


> > > In message <20031014180700.GO6212@kam.mff.cuni.cz>, Jan Hubicka writes:
> > >  >> Once my current cleanups are done testing I'll poke at this and post a patc
> > >  >h.
> > >  >
> > >  >OK, thanks!
> > >  >BTW with the patch to avoid removal and -funit-at-a-time on by default,
> > >  >I can get into stage3 but then I get abort in finish_spills :(
> > > Based on Richard's message, I'm holding off for the moment.  There's a
> > > deeper issue and if I hack this into the useless variable remover we're
> > > just going to be papering over that issue.
> > > 
> > > Can you check your test into the testsuite on the branch?  That'll help
> > > make sure it doesn't get lost :-)
> > 
> > OK, I will try to figure out who and why is producing the cloned
> > variable and in case I will fail I will commit the testcase alone.
> > The other misscompilation of GCC seems to be related to aggressive
> > inlining too.  Hope it is related issue as last thing I want to dig into
> > is missoptimization of reload.
> 
> Hi,
> The problem is that when duplicating body, we ignore VAR_DECL for static
> functions, while when duplicating body of BIND_EXPR we duplicate all var
> decls.  OK for mainline and tree-ssa assuming testing passes on both?
> (it solves my testcase, I am now bootstrapping both trees in
> unit-at-a-time mode wishing to have good luck this time)
> 
> Honza
> 
> Wed Oct 15 23:30:28 CEST 2003  Jan Hubicka  <jh@suse.cz>
> 	* tree-inline.c (remap_decls): Do not remap static decls.
> *** ../gcc.old/tree-inline.c	Sat Oct 11 20:39:42 2003
> --- tree-inline.c	Wed Oct 15 23:29:24 2003
> *************** remap_decls (tree decls, inline_data *id
> *** 324,329 ****
> --- 324,330 ----
>   {
>     tree old_var;
>     tree new_decls = NULL_TREE;
> +   tree fn = VARRAY_TOP_TREE (id->fns);
>   
>     /* Remap its variables.  */
>     for (old_var = decls; old_var; old_var = TREE_CHAIN (old_var))
> *************** remap_decls (tree decls, inline_data *id
> *** 331,337 ****
>         tree new_var;
>   
>         /* Remap the variable.  */
> !       new_var = remap_decl (old_var, id);
>   
>         /* If we didn't remap this variable, so we can't mess with its
>   	 TREE_CHAIN.  If we remapped this variable to the return slot, it's
> --- 332,341 ----
>         tree new_var;
>   
>         /* Remap the variable.  */
> !       if ((*lang_hooks.tree_inlining.auto_var_in_fn_p) (old_var, fn))
> !         new_var = remap_decl (old_var, id);
> !       else
> !         new_var = old_var;

OK, this obviously can't work in more complex testcases as we move the
variable from one linked list to another.
There is no way to put same decl into the two lists, so I am not quite
sure what to do here.   It is not good idea to always duplicate it
either as we will get multiple versions from multiple inline copies of
the same functions.
Ideas?

Honza


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]