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