Hi,

On Wed, Oct 30 2019, Jan Hubicka wrote:
>> 
>> Looking at PR 92278, I think I found the real problem. In
>> ipa_read_edge_info, you added code to throw away jump functions of edges
>> that do not pass possibly_call_in_translation_unit_p() test.  But that
>> predicate incorrectly - or at least I think so, see below - returns
>> false for edges leading to interposable symbols.  The reason why I think
>> it is incorrect is because a node which is considered interposable
>> before merging can apparently later on be upgraded to a local one by
>> ipa-visibility.
>> 
>> I am testing the following fix, is it OK if it passes?
>> 
>> The testcase passes a version script to the linker, I guess our LTO
>> testsuite does not support that, does it?
>> 
>> Thanks,
>> 
>> Martin
>> 
>> 
>> 2019-10-30  Martin Jambor  <mjam...@suse.cz>
>> 
>>      ipa/92278
>>      * cgraph.c (cgraph_edge::possibly_call_in_translation_unit_p): Fix
>>      availability comparison.
>
> yes, this is OK - thanks for looking into this!
> While jump functions are interesting only for available symbols
> interposable symbols may be promoted to them based on resolution info.
>
> Lets see how much extra memory this will cost. If it is too bad I can
> add resolution info logic but duplicating it from ipa-visibility is not
> cool.

OK, I have committed the patch.  I wonder whether we want to revert the
early exit in update_jump_functions_after_inlining - or replace it with
a gcc_checking_assert - now.

Anyway, thanks,

Martin


>
> Honza
>> ---
>>  gcc/cgraph.c | 2 +-
>>  1 file changed, 1 insertion(+), 1 deletion(-)
>> 
>> diff --git a/gcc/cgraph.c b/gcc/cgraph.c
>> index d47d4128b1c..8057ccdb7c0 100644
>> --- a/gcc/cgraph.c
>> +++ b/gcc/cgraph.c
>> @@ -3813,7 +3813,7 @@ cgraph_edge::possibly_call_in_translation_unit_p (void)
>>    if (node->previous_sharing_asm_name)
>>      node = symtab_node::get_for_asmname (DECL_ASSEMBLER_NAME 
>> (callee->decl));
>>    gcc_assert (TREE_PUBLIC (node->decl));
>> -  return node->get_availability () >= AVAIL_AVAILABLE;
>> +  return node->get_availability () >= AVAIL_INTERPOSABLE;
>>  }
>>  
>>  /* A stashed copy of "symtab" for use by selftest::symbol_table_test.
>> -- 
>> 2.23.0
>> 

Reply via email to