On Fri, Feb 13, 2015 at 09:47:56AM +0100, Richard Biener wrote:
> > 2015-02-12  Ilya Enkovich  <ilya.enkov...@intel.com>
> >
> >         PR tree-optimization/65002
> >         * tree-cfg.c (pass_data_fixup_cfg): Don't update
> >         SSA on start.
> >         * tree-sra.c (some_callers_have_no_vuse_p): New.
> >         (ipa_early_sra): Reject functions whose callers
> >         assume funciton is read only.

Typo, function.

> > +static bool
> > +some_callers_have_no_vuse_p (struct cgraph_node *node,
> > +                            void *data ATTRIBUTE_UNUSED)
> > +{
> > +  struct cgraph_edge *cs;
> > +  for (cs = node->callers; cs; cs = cs->next_caller)
> > +    if (!cs->call_stmt || !gimple_vuse (cs->call_stmt))
> > +      return true;
> > +
> > +  return false;
> > +}
> > +
> >  /* Convert all callers of NODE.  */
> >
> >  static bool
> > @@ -5116,6 +5130,15 @@ ipa_early_sra (void)
> >        goto simple_out;
> >      }
> >
> > +  if (node->call_for_symbol_thunks_and_aliases
> > +       (some_callers_have_no_vuse_p, NULL, true))
> > +    {
> > +      if (dump_file)
> > +       fprintf (dump_file, "There are callers with no VUSE attached "
> > +                "to a call stmt.\n");
> > +      goto simple_out;
> > +    }
> > +

I wonder if this won't pessimize const functions that just get called with
aggregate arguments passed by value, do those count as memory read or
just as parameters?

        Jakub

Reply via email to