This patch changes to use context function name to replace function
id, which is not available in AutoFDO builds.

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