This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
Re: [GOOGLE] Change function naming to use context function assembler name to replace function id
- From: Xinliang David Li <davidxl at google dot com>
- To: Dehao Chen <dehao at google dot com>
- Cc: GCC Patches <gcc-patches at gcc dot gnu dot org>
- Date: Wed, 1 May 2013 09:57:15 -0700
- Subject: Re: [GOOGLE] Change function naming to use context function assembler name to replace function id
- References: <CAO2gOZUYnTbqnN_0vD_Q-K0KO7xFgrNXOoDx56eninn5jAjMYg at mail dot gmail dot com>
On Tue, Apr 30, 2013 at 4:10 PM, Dehao Chen <dehao@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);