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

Thanks.

-- 
H.J.

Reply via email to