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.

        Jakub

Reply via email to