On Mon, 22 Feb 2016, Jakub Jelinek wrote:

> On Mon, Feb 22, 2016 at 01:44:09PM +0100, Richard Biener wrote:
> > --- 1079,1086 ----
> >       || !dominated_by_p (CDI_DOMINATORS,
> >                           loop->latch, gimple_bb (stmt)))
> >     return;
> > +       if (cgraph_node::get (cfun->decl)->aliases (BUILT_IN_MEMSET))
> > +   return;
> 
> Perhaps also punt here for:
> BUILT_IN_MEMSET_CHK
> BUILT_IN_TM_MEMSET
> BUILT_IN_BZERO
> ?
> 
> >         partition->kind = PKIND_MEMSET;
> >         partition->main_dr = single_store;
> >         partition->niter = nb_iter;
> > *************** classify_partition (loop_p loop, struct
> > *** 1135,1140 ****
> > --- 1138,1146 ----
> >     }
> >         free_dependence_relation (ddr);
> >         loops.release ();
> > +       if (cgraph_node::get (cfun->decl)->aliases (BUILT_IN_MEMCPY)
> > +     || cgraph_node::get (cfun->decl)->aliases (BUILT_IN_MEMMOVE))
> > +   return;
> 
> And here for
> BUILT_IN_MEMCPY_CHK
> BUILT_IN_TM_MEMCPY
> BUILT_IN_TM_MEMCPY_RNWT
> BUILT_IN_TM_MEMCPY_RTWN
> BUILT_IN_MEMPCPY
> BUILT_IN_MEMPCPY_CHK
> BUILT_IN_MEMMOVE_CHK
> BUILT_IN_TM_MEMMOVE
> BUILT_IN_BCOPY
> ?

I'm going to wait for Honzas feedback.  Testing all of the above
looks expensive - if those are implemented in terms of memcpy/memset
then hopefully in libc itself which hopefully always does local
calls.

It's not going to be an exhaustive check anyway, just a QOI one
covering those cases we've seen in the wild.  Esp. as indirection
will break the detection (so does using asm(".alias XXX") which glibc
does).

Richard.

Reply via email to