> 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.

Reply via email to