On Wed, May 23, 2012 at 12:13 PM, Jakub Jelinek <ja...@redhat.com> wrote: > On Wed, May 23, 2012 at 06:27:21AM -0300, Alexandre Oliva wrote: >> +static int >> +drop_overlapping_mem_locs (void **slot, void *data) >> +{ >> + struct overlapping_mems *coms = (struct overlapping_mems *)data; >> + dataflow_set *set = coms->set; >> + rtx mloc = coms->loc; >> + variable var = (variable) *slot; >> + >> + if (var->onepart == ONEPART_VALUE) >> + { >> + location_chain loc, *locp; >> + bool changed = false; >> + rtx cur_loc; >> + >> + gcc_assert (var->n_var_parts == 1); >> + >> + if (shared_var_p (var, set->vars)) >> + { >> + for (loc = var->var_part[0].loc_chain; loc; loc = loc->next) >> + if (GET_CODE (loc->loc) == MEM >> + && !nonoverlapping_memrefs_p (loc->loc, mloc, false)) > > Isn't nonoverlapping_memrefs_p predicate too conservative? > cselib.c uses canon_true_dependence to decide what should be invalidated.
Yeah, I think nonoverlapping_memrefs_p should become private to alias.c Richard. > Jakub