I've seen a case when func_id in aux module is not the same (off by
1). This is when -fexception is specified. I had not looked into why
though. I'll find out why it is off-by-1

Dehao

On Wed, May 1, 2013 at 9:57 AM, Xinliang David Li <davi...@google.com> wrote:
> On Tue, Apr 30, 2013 at 4:10 PM, Dehao Chen <de...@google.com> wrote:
>> This patch changes to use context function name to replace function
>> id, which is not available in AutoFDO builds.
>
> Why isn't func_id not available in autofdo builds? The func-id for the
> the same function should remain the same regardless whether the module
> is compiled as an aux module or the primary module.
>
> David
>
>>
>> Bootstrapped and passed regression tests.
>>
>> OK for google branches?
>>
>> Thanks,
>> Dehao
>>
>> Index: gcc/l-ipo.c
>> ===================================================================
>> --- gcc/l-ipo.c (revision 198469)
>> +++ gcc/l-ipo.c (working copy)
>> @@ -1714,9 +1714,10 @@ create_unique_name (tree decl, unsigned module_id)
>>  {
>>    tree id, assemb_id;
>>    char *assembler_name;
>> +  const char *context = NULL;
>>    const char *name;
>> -  struct  function *context = NULL;
>>    int seq = 0;
>> +  int len;
>>
>>    if (TREE_CODE (decl) == FUNCTION_DECL)
>>      {
>> @@ -1740,7 +1741,8 @@ create_unique_name (tree decl, unsigned module_id)
>>        else if (TREE_CODE (DECL_CONTEXT (decl)) == FUNCTION_DECL)
>>          {
>>            id = DECL_NAME (decl);
>> -          context = DECL_STRUCT_FUNCTION (DECL_CONTEXT (decl));
>> +          context = IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (
>> +      DECL_CONTEXT (decl)));
>>          }
>>        else
>>          /* file scope context */
>> @@ -1748,17 +1750,12 @@ create_unique_name (tree decl, unsigned module_id)
>>      }
>>
>>    name = IDENTIFIER_POINTER (id);
>> +  len = strlen (name) + context ? strlen (context) : 0;
>> +  assembler_name = (char*) alloca (len + 30);
>>    if (context)
>> -    {
>> -      char *n;
>> -      unsigned fno =  FUNC_DECL_FUNC_ID (context);
>> -      n = (char *)alloca (strlen (name) + 15);
>> -      sprintf (n, "%s.%u", name, fno);
>> -      name = n;
>> -    }
>> -
>> -  assembler_name = (char*) alloca (strlen (name) + 30);
>> -  sprintf (assembler_name, "%s.cmo.%u", name, module_id);
>> +    sprintf (assembler_name, "%s.%s.cmo.%u", context, name, module_id);
>> +  else
>> +    sprintf (assembler_name, "%s.cmo.%u", name, module_id);
>>    seq = get_name_seq_num (assembler_name);
>>    if (seq)
>>      sprintf (assembler_name, "%s.%d", assembler_name, seq);

Reply via email to