[PATCH] Fix PR59890, improve var-tracking compile-time

Jakub Jelinek jakub@redhat.com
Mon Jan 20 20:31:00 GMT 2014


On Mon, Jan 20, 2014 at 06:24:36PM -0200, Alexandre Oliva wrote:
> > !   if (var->onepart == ONEPART_VALUE)
> >       {
> >         rtx x = dv_as_value (dv);
> >         void **slot;
> > --- 2502,2509 ----
>   
> >     gcc_assert (var->n_var_parts == 1);
>   
> > !   if (var->onepart == ONEPART_VALUE
> > !       && local_get_addr_cache != NULL)
> >       {
> >         rtx x = dv_as_value (dv);
> >         void **slot;
> 
> But I think this one is wrong.  You don't want to treat a one-part value
> as if it wasn't one.  If we have to discard locs and equivalences for a
> one-part value that doesn't have any (because we don't even have a
> local_get_addr_cache yet), you can *probably* just return right away,
> because your job is already done.  So I'd try:
> 
>   if (var->onepart == ONEPART_VALUE)
>     {
>       if (local_get_addr_cache == NULL)
>         return;

But when local_get_addr_cache is non-NULL, no matter if we find a slot there
or don't, we still fall thru into the 3 loops etc.

	Jakub



More information about the Gcc-patches mailing list