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