> On Wed, May 23, 2018 at 2:01 AM, Jan Hubicka <hubi...@ucw.cz> wrote: > >> On Tue, May 22, 2018 at 9:21 AM, Jan Hubicka <hubi...@ucw.cz> wrote: > >> >> >>>>> > class ipa_opt_pass_d; > >> >> >>>>> > typedef ipa_opt_pass_d *ipa_opt_pass; > >> >> >>>>> > @@ -2894,7 +2896,8 @@ > >> >> >>>>> > cgraph_node::only_called_directly_or_aliased_p (void) > >> >> >>>>> > && !DECL_STATIC_CONSTRUCTOR (decl) > >> >> >>>>> > && !DECL_STATIC_DESTRUCTOR (decl) > >> >> >>>>> > && !used_from_object_file_p () > >> >> >>>>> > - && !externally_visible); > >> >> >>>>> > + && !externally_visible > >> >> >>>>> > + && !lookup_attribute ("ifunc", DECL_ATTRIBUTES > >> >> >>>>> > (decl))); > >> >> >>>>> > >> >> >>>>> How's it handled for our own generated resolver functions? That > >> >> >>>>> is, > >> >> >>>>> isn't there sth cheaper than doing a lookup_attribute here? I see > >> >> >>>>> that make_dispatcher_decl nor > >> >> >>>>> ix86_get_function_versions_dispatcher > >> >> >>>>> adds the 'ifunc' attribute (though they are TREE_PUBLIC there). > >> >> >>>> > >> >> >>>> Is there any drawback of setting force_output flag? > >> >> >>>> Honza > >> >> >>> > >> >> >>> Setting force_output may prevent some optimizations. Can we add a > >> >> >>> bit > >> >> >>> for IFUNC resolver? > >> >> >>> > >> >> >> > >> >> >> Here is the patch to add ifunc_resolver to cgraph_node. Tested on > >> >> >> x86-64 > >> >> >> and i686. Any comments? > >> >> >> > >> >> > > >> >> > PING: > >> >> > > >> >> > https://gcc.gnu.org/ml/gcc-patches/2018-04/msg00647.html > >> >> > > >> >> > >> >> PING. > >> > OK, but please extend the verifier that ifunc_resolver flag is > >> > equivalent to > >> > lookup_attribute ("ifunc", DECL_ATTRIBUTES (decl)) > >> > so we are sure things stays in sync. > >> > > >> > >> Like this > >> > >> diff --git a/gcc/symtab.c b/gcc/symtab.c > >> index 80f6f910c3b..954920b6dff 100644 > >> --- a/gcc/symtab.c > >> +++ b/gcc/symtab.c > >> @@ -998,6 +998,13 @@ symtab_node::verify_base (void) > >> error ("function symbol is not function"); > >> error_found = true; > >> } > >> + else if ((lookup_attribute ("ifunc", DECL_ATTRIBUTES (decl)) > >> + != NULL) > >> + != dyn_cast <cgraph_node *> (this)->ifunc_resolver) > >> + { > >> + error ("inconsistent `ifunc' attribute"); > >> + error_found = true; > >> + } > >> } > >> else if (is_a <varpool_node *> (this)) > >> { > >> > >> > >> Thanks. > > Yes, thanks! > > Honza > > I'd like to also fix it on GCC 8 branch for CET. Should I backport my > patch to GCC 8 after a few days or use the simple patch for GCC 8: > > https://gcc.gnu.org/ml/gcc-patches/2018-04/msg00588.html
I would backport this one so we don't unnecesarily diverge. Thanks! Honza > > Thanks. > > -- > H.J.