symtab_node::get_dump_name uses node order to identify nodes.
Order is no longer unique because of Incremental LTO patches.
This patch moves uid from cgraph_node node to symtab_node,
so get_dump_name can use uid instead and get back unique dump names.

In inlining passes, uid is replaced with more appropriate (more compact
for indexing) summary id.

Bootstrapped/regtested on x86_64-linux.
Ok for trunk?

gcc/ChangeLog:

        * cgraph.cc (symbol_table::create_empty):
        Move uid to symtab_node.
        (test_symbol_table_test): Change expected dump id.
        * cgraph.h (struct cgraph_node):
        Move uid to symtab_node.
        (symbol_table::register_symbol): Likewise.
        * dumpfile.cc (test_capture_of_dump_calls):
        Change expected dump id.
        * ipa-inline.cc (update_caller_keys):
        Use summary id instead of uid.
        (update_callee_keys): Likewise.
        * symtab.cc (symtab_node::get_dump_name):
        Use uid instead of order.

gcc/testsuite/ChangeLog:

        * gcc.dg/live-patching-1.c: Change expected dump id.
        * gcc.dg/live-patching-4.c: Likewise.
---
 gcc/cgraph.cc                          |  4 ++--
 gcc/cgraph.h                           | 25 ++++++++++++++-----------
 gcc/dumpfile.cc                        |  8 ++++----
 gcc/ipa-inline.cc                      |  6 +++---
 gcc/symtab.cc                          |  2 +-
 gcc/testsuite/gcc.dg/live-patching-1.c |  2 +-
 gcc/testsuite/gcc.dg/live-patching-4.c |  2 +-
 7 files changed, 26 insertions(+), 23 deletions(-)

diff --git a/gcc/cgraph.cc b/gcc/cgraph.cc
index 83a9b59ef30..d0b19ad850e 100644
--- a/gcc/cgraph.cc
+++ b/gcc/cgraph.cc
@@ -290,7 +290,7 @@ cgraph_node *
 symbol_table::create_empty (void)
 {
   cgraph_count++;
-  return new (ggc_alloc<cgraph_node> ()) cgraph_node (cgraph_max_uid++);
+  return new (ggc_alloc<cgraph_node> ()) cgraph_node ();
 }
 
 /* Register HOOK to be called with DATA on each removed edge.  */
@@ -4338,7 +4338,7 @@ test_symbol_table_test ()
       /* Verify that the node has order 0 on both iterations,
         and thus that nodes have predictable dump names in selftests.  */
       ASSERT_EQ (node->order, 0);
-      ASSERT_STREQ (node->dump_name (), "test_decl/0");
+      ASSERT_STREQ (node->dump_name (), "test_decl/1");
     }
 }
 
diff --git a/gcc/cgraph.h b/gcc/cgraph.h
index 7856d53c9e9..065fcc742e8 100644
--- a/gcc/cgraph.h
+++ b/gcc/cgraph.h
@@ -124,7 +124,7 @@ public:
       order (-1), next_sharing_asm_name (NULL),
       previous_sharing_asm_name (NULL), same_comdat_group (NULL), ref_list (),
       alias_target (NULL), lto_file_data (NULL), aux (NULL),
-      x_comdat_group (NULL_TREE), x_section (NULL)
+      x_comdat_group (NULL_TREE), x_section (NULL), m_uid (-1)
   {}
 
   /* Return name.  */
@@ -492,6 +492,12 @@ public:
   /* Perform internal consistency checks, if they are enabled.  */
   static inline void checking_verify_symtab_nodes (void);
 
+  /* Get unique identifier of the node.  */
+  inline int get_uid ()
+  {
+    return m_uid;
+  }
+
   /* Type of the symbol.  */
   ENUM_BITFIELD (symtab_type) type : 8;
 
@@ -668,6 +674,9 @@ protected:
                                      void *data,
                                      bool include_overwrite);
 private:
+  /* Unique id of the node.  */
+  int m_uid;
+
   /* Workers for set_section.  */
   static bool set_section_from_string (symtab_node *n, void *s);
   static bool set_section_from_node (symtab_node *n, void *o);
@@ -882,7 +891,7 @@ struct GTY((tag ("SYMTAB_FUNCTION"))) cgraph_node : public 
symtab_node
   friend class symbol_table;
 
   /* Constructor.  */
-  explicit cgraph_node (int uid)
+  explicit cgraph_node ()
     : symtab_node (SYMTAB_FUNCTION), callees (NULL), callers (NULL),
       indirect_calls (NULL),
       next_sibling_clone (NULL), prev_sibling_clone (NULL), clones (NULL),
@@ -903,7 +912,7 @@ struct GTY((tag ("SYMTAB_FUNCTION"))) cgraph_node : public 
symtab_node
       redefined_extern_inline (false), tm_may_enter_irr (false),
       ipcp_clone (false), gc_candidate (false),
       called_by_ifunc_resolver (false), has_omp_variant_constructs (false),
-      m_uid (uid), m_summary_id (-1)
+      m_summary_id (-1)
   {}
 
   /* Remove the node from cgraph and all inline clones inlined into it.
@@ -1304,12 +1313,6 @@ struct GTY((tag ("SYMTAB_FUNCTION"))) cgraph_node : 
public symtab_node
     dump_cgraph (stderr);
   }
 
-  /* Get unique identifier of the node.  */
-  inline int get_uid ()
-  {
-    return m_uid;
-  }
-
   /* Get summary id of the node.  */
   inline int get_summary_id ()
   {
@@ -1503,8 +1506,6 @@ struct GTY((tag ("SYMTAB_FUNCTION"))) cgraph_node : 
public symtab_node
   unsigned has_omp_variant_constructs : 1;
 
 private:
-  /* Unique id of the node.  */
-  int m_uid;
 
   /* Summary id that is recycled.  */
   int m_summary_id;
@@ -2815,6 +2816,8 @@ symbol_table::register_symbol (symtab_node *node)
     nodes->previous = node;
   nodes = node;
 
+  nodes->m_uid = cgraph_max_uid++;
+
   if (node->order == -1)
     node->order = order++;
 }
diff --git a/gcc/dumpfile.cc b/gcc/dumpfile.cc
index 3765e9e3e81..65bd5c549b9 100644
--- a/gcc/dumpfile.cc
+++ b/gcc/dumpfile.cc
@@ -2407,7 +2407,7 @@ test_capture_of_dump_calls (const line_table_case &case_)
        dump_printf (MSG_NOTE, "node: %C", node);
        const int expected_impl_line = __LINE__ - 1;
 
-       ASSERT_DUMPED_TEXT_EQ (tmp, "node: test_decl/0");
+       ASSERT_DUMPED_TEXT_EQ (tmp, "node: test_decl/1");
        if (with_optinfo)
          {
            optinfo *info = tmp.get_pending_optinfo ();
@@ -2415,7 +2415,7 @@ test_capture_of_dump_calls (const line_table_case &case_)
            ASSERT_EQ (info->get_kind (), OPTINFO_KIND_NOTE);
            ASSERT_EQ (info->num_items (), 2);
            ASSERT_IS_TEXT (info->get_item (0), "node: ");
-           ASSERT_IS_SYMTAB_NODE (info->get_item (1), decl_loc, "test_decl/0");
+           ASSERT_IS_SYMTAB_NODE (info->get_item (1), decl_loc, "test_decl/1");
            ASSERT_IMPL_LOCATION_EQ (info->get_impl_location (),
                                     "dumpfile.cc", expected_impl_line,
                                     "test_capture_of_dump_calls");
@@ -2594,14 +2594,14 @@ test_capture_of_dump_calls (const line_table_case 
&case_)
        dump_symtab_node (MSG_NOTE, node);
        const int expected_impl_line = __LINE__ - 1;
 
-       ASSERT_DUMPED_TEXT_EQ (tmp, "test_decl/0");
+       ASSERT_DUMPED_TEXT_EQ (tmp, "test_decl/1");
        if (with_optinfo)
          {
            optinfo *info = tmp.get_pending_optinfo ();
            ASSERT_TRUE (info != NULL);
            ASSERT_EQ (info->get_kind (), OPTINFO_KIND_NOTE);
            ASSERT_EQ (info->num_items (), 1);
-           ASSERT_IS_SYMTAB_NODE (info->get_item (0), decl_loc, "test_decl/0");
+           ASSERT_IS_SYMTAB_NODE (info->get_item (0), decl_loc, "test_decl/1");
            ASSERT_IMPL_LOCATION_EQ (info->get_impl_location (),
                                     "dumpfile.cc", expected_impl_line,
                                     "test_capture_of_dump_calls");
diff --git a/gcc/ipa-inline.cc b/gcc/ipa-inline.cc
index 9e94a664209..163129540ac 100644
--- a/gcc/ipa-inline.cc
+++ b/gcc/ipa-inline.cc
@@ -1598,7 +1598,7 @@ update_caller_keys (edge_heap_t *heap, struct cgraph_node 
*node,
   if ((!node->alias && !ipa_fn_summaries->get (node)->inlinable)
       || node->inlined_to)
     return;
-  if (!bitmap_set_bit (updated_nodes, node->get_uid ()))
+  if (!bitmap_set_bit (updated_nodes, node->get_summary_id ()))
     return;
 
   FOR_EACH_ALIAS (node, ref)
@@ -1664,7 +1664,7 @@ update_callee_keys (edge_heap_t *heap, struct cgraph_node 
*node,
            if (e->aux
                && !bitmap_bit_p (updated_nodes,
                                  e->callee->ultimate_alias_target
-                                   (&avail, e->caller)->get_uid ()))
+                                   (&avail, e->caller)->get_summary_id ()))
              update_edge_key (heap, e);
          }
        /* We do not reset callee growth cache here.  Since we added a new call,
@@ -1676,7 +1676,7 @@ update_callee_keys (edge_heap_t *heap, struct cgraph_node 
*node,
                 && avail >= AVAIL_AVAILABLE
                 && ipa_fn_summaries->get (callee) != NULL
                 && ipa_fn_summaries->get (callee)->inlinable
-                && !bitmap_bit_p (updated_nodes, callee->get_uid ()))
+                && !bitmap_bit_p (updated_nodes, callee->get_summary_id ()))
          {
            if (can_inline_edge_p (e, false)
                && want_inline_small_function_p (e, false)
diff --git a/gcc/symtab.cc b/gcc/symtab.cc
index 9c091a7df52..fe9c031247f 100644
--- a/gcc/symtab.cc
+++ b/gcc/symtab.cc
@@ -578,7 +578,7 @@ symtab_node::get_dump_name (bool asm_name_p) const
   unsigned l = strlen (fname);
 
   char *s = (char *)ggc_internal_cleared_alloc (l + EXTRA);
-  snprintf (s, l + EXTRA, "%s/%d", fname, order);
+  snprintf (s, l + EXTRA, "%s/%d", fname, m_uid);
 
   return s;
 }
diff --git a/gcc/testsuite/gcc.dg/live-patching-1.c 
b/gcc/testsuite/gcc.dg/live-patching-1.c
index 6a1ea38c491..e24c1a7a301 100644
--- a/gcc/testsuite/gcc.dg/live-patching-1.c
+++ b/gcc/testsuite/gcc.dg/live-patching-1.c
@@ -19,4 +19,4 @@ int main()
   return 0;
 }
 
-/* { dg-final { scan-ipa-dump "foo/0 function has external linkage when the 
user requests only inlining static for live patching"  "inline" } } */
+/* { dg-final { scan-ipa-dump "foo/1 function has external linkage when the 
user requests only inlining static for live patching"  "inline" } } */
diff --git a/gcc/testsuite/gcc.dg/live-patching-4.c 
b/gcc/testsuite/gcc.dg/live-patching-4.c
index ffea8f4cc1c..bd009937cb6 100644
--- a/gcc/testsuite/gcc.dg/live-patching-4.c
+++ b/gcc/testsuite/gcc.dg/live-patching-4.c
@@ -20,4 +20,4 @@ int main()
   return 0;
 }
 
-/* { dg-final { scan-tree-dump "Inlining foo/0 into main/2"  "einline" } } */
+/* { dg-final { scan-tree-dump "Inlining foo/1 into main/3"  "einline" } } */
-- 
2.47.1

Reply via email to