Remove cgraph_local_info structure.
authorMartin Liska <mliska@suse.cz>
Wed, 30 Oct 2019 07:56:22 +0000 (08:56 +0100)
committerMartin Liska <marxin@gcc.gnu.org>
Wed, 30 Oct 2019 07:56:22 +0000 (07:56 +0000)
2019-10-30  Martin Liska  <mliska@suse.cz>

* cgraph.c (cgraph_node::local_info): Transform to ...
(cgraph_node::local_info_node): ... this.
(cgraph_node::dump): Remove cgraph_local_info and
put its fields directly into cgraph_node.
(cgraph_node::get_availability): Likewise.
(cgraph_node::make_local): Likewise.
(cgraph_node::verify_node): Likewise.
* cgraph.h (struct GTY): Likewise.
* cgraphclones.c (set_new_clone_decl_and_node_flags): Likewise.
(duplicate_thunk_for_node): Likewise.
(cgraph_node::create_clone): Likewise.
(cgraph_node::create_virtual_clone): Likewise.
(cgraph_node::create_version_clone): Likewise.
* cgraphunit.c (cgraph_node::reset): Likewise.
(cgraph_node::finalize_function): Likewise.
(cgraph_node::add_new_function): Likewise.
(analyze_functions): Likewise.
* combine.c (setup_incoming_promotions): Likewise.
* config/i386/i386.c (ix86_function_regparm): Likewise.
(ix86_function_sseregparm): Likewise.
(init_cumulative_args): Likewise.
* ipa-cp.c (determine_versionability): Likewise.
(count_callers): Likewise.
(set_single_call_flag): Likewise.
(initialize_node_lattices): Likewise.
(estimate_local_effects): Likewise.
(create_specialized_node): Likewise.
(identify_dead_nodes): Likewise.
* ipa-fnsummary.c (compute_fn_summary): Likewise.
(ipa_fn_summary_generate): Likewise.
* ipa-hsa.c (check_warn_node_versionable): Likewise.
(process_hsa_functions): Likewise.
* ipa-icf.c (set_local): Likewise.
* ipa-inline-analysis.c (initialize_inline_failed): Likewise.
* ipa-inline.c (speculation_useful_p): Likewise.
* ipa-profile.c (ipa_propagate_frequency): Likewise.
(ipa_profile): Likewise.
* ipa-split.c (split_function): Likewise.
(execute_split_functions): Likewise.
* ipa-sra.c (ipa_sra_preliminary_function_checks): Likewise.
(ipa_sra_ipa_function_checks): Likewise.
* ipa-visibility.c (function_and_variable_visibility): Likewise.
* ipa.c (symbol_table::remove_unreachable_nodes): Likewise.
* lto-cgraph.c (lto_output_node): Likewise.
(input_overwrite_node): Likewise.
* multiple_target.c (expand_target_clones): Likewise.
* omp-simd-clone.c (simd_clone_create): Likewise.
* trans-mem.c (expand_call_tm): Likewise.
(ipa_tm_mayenterirr_function): Likewise.
(ipa_tm_diagnose_tm_safe): Likewise.
(ipa_tm_diagnose_transaction): Likewise.
(ipa_tm_create_version): Likewise.
(ipa_tm_transform_calls_redirect): Likewise.
(ipa_tm_execute): Likewise.
* tree-inline.c (expand_call_inline): Likewise.

From-SVN: r277601

23 files changed:
gcc/ChangeLog
gcc/cgraph.c
gcc/cgraph.h
gcc/cgraphclones.c
gcc/cgraphunit.c
gcc/combine.c
gcc/config/i386/i386.c
gcc/ipa-cp.c
gcc/ipa-fnsummary.c
gcc/ipa-hsa.c
gcc/ipa-icf.c
gcc/ipa-inline-analysis.c
gcc/ipa-inline.c
gcc/ipa-profile.c
gcc/ipa-split.c
gcc/ipa-sra.c
gcc/ipa-visibility.c
gcc/ipa.c
gcc/lto-cgraph.c
gcc/multiple_target.c
gcc/omp-simd-clone.c
gcc/trans-mem.c
gcc/tree-inline.c

index b482bd3295058a137403fffd151fc5d9819005bc..72d6ec76e9e3ca31062c3a73e644478909430582 100644 (file)
@@ -1,3 +1,61 @@
+2019-10-30  Martin Liska  <mliska@suse.cz>
+
+       * cgraph.c (cgraph_node::local_info): Transform to ...
+       (cgraph_node::local_info_node): ... this.
+       (cgraph_node::dump): Remove cgraph_local_info and
+       put its fields directly into cgraph_node.
+       (cgraph_node::get_availability): Likewise.
+       (cgraph_node::make_local): Likewise.
+       (cgraph_node::verify_node): Likewise.
+       * cgraph.h (struct GTY): Likewise.
+       * cgraphclones.c (set_new_clone_decl_and_node_flags): Likewise.
+       (duplicate_thunk_for_node): Likewise.
+       (cgraph_node::create_clone): Likewise.
+       (cgraph_node::create_virtual_clone): Likewise.
+       (cgraph_node::create_version_clone): Likewise.
+       * cgraphunit.c (cgraph_node::reset): Likewise.
+       (cgraph_node::finalize_function): Likewise.
+       (cgraph_node::add_new_function): Likewise.
+       (analyze_functions): Likewise.
+       * combine.c (setup_incoming_promotions): Likewise.
+       * config/i386/i386.c (ix86_function_regparm): Likewise.
+       (ix86_function_sseregparm): Likewise.
+       (init_cumulative_args): Likewise.
+       * ipa-cp.c (determine_versionability): Likewise.
+       (count_callers): Likewise.
+       (set_single_call_flag): Likewise.
+       (initialize_node_lattices): Likewise.
+       (estimate_local_effects): Likewise.
+       (create_specialized_node): Likewise.
+       (identify_dead_nodes): Likewise.
+       * ipa-fnsummary.c (compute_fn_summary): Likewise.
+       (ipa_fn_summary_generate): Likewise.
+       * ipa-hsa.c (check_warn_node_versionable): Likewise.
+       (process_hsa_functions): Likewise.
+       * ipa-icf.c (set_local): Likewise.
+       * ipa-inline-analysis.c (initialize_inline_failed): Likewise.
+       * ipa-inline.c (speculation_useful_p): Likewise.
+       * ipa-profile.c (ipa_propagate_frequency): Likewise.
+       (ipa_profile): Likewise.
+       * ipa-split.c (split_function): Likewise.
+       (execute_split_functions): Likewise.
+       * ipa-sra.c (ipa_sra_preliminary_function_checks): Likewise.
+       (ipa_sra_ipa_function_checks): Likewise.
+       * ipa-visibility.c (function_and_variable_visibility): Likewise.
+       * ipa.c (symbol_table::remove_unreachable_nodes): Likewise.
+       * lto-cgraph.c (lto_output_node): Likewise.
+       (input_overwrite_node): Likewise.
+       * multiple_target.c (expand_target_clones): Likewise.
+       * omp-simd-clone.c (simd_clone_create): Likewise.
+       * trans-mem.c (expand_call_tm): Likewise.
+       (ipa_tm_mayenterirr_function): Likewise.
+       (ipa_tm_diagnose_tm_safe): Likewise.
+       (ipa_tm_diagnose_transaction): Likewise.
+       (ipa_tm_create_version): Likewise.
+       (ipa_tm_transform_calls_redirect): Likewise.
+       (ipa_tm_execute): Likewise.
+       * tree-inline.c (expand_call_inline): Likewise.
+
 2019-10-29  Martin Liska  <mliska@suse.cz>
 
        * symbol-summary.h (function_summary): Pass memory location
index 2dc91a3a99bb7a3324f353e11a282c9b0e14b051..33fba5a8f1c7e0cb216293995de34b50f726e6fd 100644 (file)
@@ -1834,16 +1834,16 @@ cgraph_node::mark_address_taken (void)
   node->address_taken = 1;
 }
 
-/* Return local info for the compiled function.  */
+/* Return local info node for the compiled function.  */
 
-cgraph_local_info *
-cgraph_node::local_info (tree decl)
+cgraph_node *
+cgraph_node::local_info_node (tree decl)
 {
   gcc_assert (TREE_CODE (decl) == FUNCTION_DECL);
   cgraph_node *node = get (decl);
   if (!node)
     return NULL;
-  return &node->ultimate_alias_target ()->local;
+  return node->ultimate_alias_target ();
 }
 
 /* Return RTL info for the compiled function.  */
@@ -1991,9 +1991,9 @@ cgraph_node::dump (FILE *f)
     fprintf (f, " body");
   if (process)
     fprintf (f, " process");
-  if (local.local)
+  if (local)
     fprintf (f, " local");
-  if (local.redefined_extern_inline)
+  if (redefined_extern_inline)
     fprintf (f, " redefined_extern_inline");
   if (only_called_at_startup)
     fprintf (f, " only_called_at_startup");
@@ -2217,7 +2217,7 @@ cgraph_node::get_availability (symtab_node *ref)
   enum availability avail;
   if (!analyzed)
     avail = AVAIL_NOT_AVAILABLE;
-  else if (local.local)
+  else if (local)
     avail = AVAIL_LOCAL;
   else if (inlined_to)
     avail = AVAIL_AVAILABLE;
@@ -2340,7 +2340,7 @@ cgraph_node::make_local (cgraph_node *node, void *)
       node->set_comdat_group (NULL);
       node->externally_visible = false;
       node->forced_by_abi = false;
-      node->local.local = true;
+      node->local = true;
       node->set_section (NULL);
       node->unique_name = ((node->resolution == LDPR_PREVAILING_DEF_IRONLY
                           || node->resolution == LDPR_PREVAILING_DEF_IRONLY_EXP)
@@ -3090,7 +3090,7 @@ cgraph_node::verify_node (void)
       error ("inline clone in same comdat group list");
       error_found = true;
     }
-  if (!definition && !in_other_partition && local.local)
+  if (!definition && !in_other_partition && local)
     {
       error ("local symbols must be defined");
       error_found = true;
index 826d391db32e6112e939513dffb534208382683b..0c5a6960d103e891741bd140c5e2b01ecec0e8ed 100644 (file)
@@ -707,29 +707,6 @@ struct GTY(()) cgraph_thunk_info {
   bool thunk_p;
 };
 
-/* Information about the function collected locally.
-   Available after function is analyzed.  */
-
-struct GTY(()) cgraph_local_info {
-  /* Set when function is visible in current compilation unit only and
-     its address is never taken.  */
-  unsigned local : 1;
-
-  /* False when there is something makes versioning impossible.  */
-  unsigned versionable : 1;
-
-  /* False when function calling convention and signature cannot be changed.
-     This is the case when __builtin_apply_args is used.  */
-  unsigned can_change_signature : 1;
-
-  /* True when the function has been originally extern inline, but it is
-     redefined now.  */
-  unsigned redefined_extern_inline : 1;
-
-  /* True if the function may enter serial irrevocable mode.  */
-  unsigned tm_may_enter_irr : 1;
-};
-
 /* Represent which DECL tree (or reference to such tree)
    will be replaced by another tree while versioning.  */
 struct GTY(()) ipa_replace_map
@@ -1370,7 +1347,7 @@ struct GTY((tag ("SYMTAB_FUNCTION"))) cgraph_node : public symtab_node
   static cgraph_node * get_create (tree);
 
   /* Return local info for the compiled function.  */
-  static cgraph_local_info *local_info (tree decl);
+  static cgraph_node *local_info_node (tree decl);
 
   /* Return RTL info for the compiled function.  */
   static struct cgraph_rtl_info *rtl_info (const_tree);
@@ -1436,8 +1413,6 @@ struct GTY((tag ("SYMTAB_FUNCTION"))) cgraph_node : public symtab_node
      per-function in order to allow IPA passes to introduce new functions.  */
   vec<ipa_opt_pass> GTY((skip)) ipa_transforms_to_apply;
 
-  cgraph_local_info local;
-
   /* For inline clones this points to the function they will be
      inlined into.  */
   cgraph_node *inlined_to;
@@ -1495,6 +1470,19 @@ struct GTY((tag ("SYMTAB_FUNCTION"))) cgraph_node : public symtab_node
   unsigned split_part : 1;
   /* True if the function appears as possible target of indirect call.  */
   unsigned indirect_call_target : 1;
+  /* Set when function is visible in current compilation unit only and
+     its address is never taken.  */
+  unsigned local : 1;
+  /* False when there is something makes versioning impossible.  */
+  unsigned versionable : 1;
+  /* False when function calling convention and signature cannot be changed.
+     This is the case when __builtin_apply_args is used.  */
+  unsigned can_change_signature : 1;
+  /* True when the function has been originally extern inline, but it is
+     redefined now.  */
+  unsigned redefined_extern_inline : 1;
+  /* True if the function may enter serial irrevocable mode.  */
+  unsigned tm_may_enter_irr : 1;
 
 private:
   /* Unique id of the node.  */
index fcf9cd5c992a952bc1a5a06d835368ccb8ca8723..84d6e71a20b81453dc95e51c582c4f79c0c2dd75 100644 (file)
@@ -159,7 +159,7 @@ set_new_clone_decl_and_node_flags (cgraph_node *new_node)
   DECL_SET_IS_OPERATOR_DELETE (new_node->decl, 0);
 
   new_node->externally_visible = 0;
-  new_node->local.local = 1;
+  new_node->local = 1;
   new_node->lowered = true;
 }
 
@@ -223,7 +223,7 @@ duplicate_thunk_for_node (cgraph_node *thunk, cgraph_node *node)
   new_thunk = cgraph_node::create (new_decl);
   set_new_clone_decl_and_node_flags (new_thunk);
   new_thunk->definition = true;
-  new_thunk->local.can_change_signature = node->local.can_change_signature;
+  new_thunk->can_change_signature = node->can_change_signature;
   new_thunk->thunk = thunk->thunk;
   new_thunk->unique_name = in_lto_p;
   new_thunk->former_clone_of = thunk->decl;
@@ -353,10 +353,13 @@ cgraph_node::create_clone (tree new_decl, profile_count prof_count,
     }
   new_node->analyzed = analyzed;
   new_node->definition = definition;
-  new_node->local = local;
+  new_node->versionable = versionable;
+  new_node->can_change_signature = can_change_signature;
+  new_node->redefined_extern_inline = redefined_extern_inline;
+  new_node->tm_may_enter_irr = tm_may_enter_irr;
   new_node->externally_visible = false;
   new_node->no_reorder = no_reorder;
-  new_node->local.local = true;
+  new_node->local = true;
   new_node->inlined_to = new_inlined_to;
   new_node->rtl = rtl;
   new_node->frequency = frequency;
@@ -524,11 +527,11 @@ cgraph_node::create_virtual_clone (vec<cgraph_edge *> redirect_callers,
   ipa_replace_map *map;
   char *name;
 
-  gcc_checking_assert (local.versionable);
+  gcc_checking_assert (versionable);
   /* TODO: It would be nice if we could recognize that param_adjustments do not
      actually perform any changes, but at the moment let's require it simply
      does not exist.  */
-  gcc_assert (local.can_change_signature || !param_adjustments);
+  gcc_assert (can_change_signature || !param_adjustments);
 
   /* Make a new FUNCTION_DECL tree node */
   if (!param_adjustments)
@@ -860,7 +863,7 @@ cgraph_node::create_version_clone (tree new_decl,
    new_version->local = local;
    new_version->externally_visible = false;
    new_version->no_reorder = no_reorder;
-   new_version->local.local = new_version->definition;
+   new_version->local = new_version->definition;
    new_version->inlined_to = inlined_to;
    new_version->rtl = rtl;
    new_version->count = count;
@@ -931,7 +934,7 @@ cgraph_node::create_version_clone_with_body
     return NULL;
 
   /* TODO: Restore an assert that we do not change signature if
-     local.can_change_signature is false.  We cannot just check that
+     can_change_signature is false.  We cannot just check that
      param_adjustments is NULL because unfortunately ipa-split removes return
      values from such functions.  */
 
@@ -987,7 +990,7 @@ cgraph_node::create_version_clone_with_body
   new_version_node->make_decl_local ();
   DECL_VIRTUAL_P (new_version_node->decl) = 0;
   new_version_node->externally_visible = 0;
-  new_version_node->local.local = 1;
+  new_version_node->local = 1;
   new_version_node->lowered = true;
   if (!implicit_section)
     new_version_node->set_section (get_section ());
index ef96393a009ba5becc2f2f49f274e4cf26b49a41..5bb4ec8e8ced4ba28eff8ddd1dc75d9548415acf 100644 (file)
@@ -391,7 +391,6 @@ cgraph_node::reset (void)
   gcc_assert (!process);
 
   /* Reset our data structures so we can analyze the function again.  */
-  memset (&local, 0, sizeof (local));
   inlined_to = NULL;
   memset (&rtl, 0, sizeof (rtl));
   analyzed = false;
@@ -445,7 +444,7 @@ cgraph_node::finalize_function (tree decl, bool no_collect)
       gcc_assert (!DECL_CONTEXT (decl)
                  || TREE_CODE (DECL_CONTEXT (decl)) != FUNCTION_DECL);
       node->reset ();
-      node->local.redefined_extern_inline = true;
+      node->redefined_extern_inline = true;
     }
 
   /* Set definition first before calling notice_global_symbol so that
@@ -553,7 +552,7 @@ cgraph_node::add_new_function (tree fndecl, bool lowered)
        /* Bring the function into finalized state and enqueue for later
           analyzing and compilation.  */
        node = cgraph_node::get_create (fndecl);
-       node->local.local = false;
+       node->local = false;
        node->definition = true;
        node->force_output = true;
        if (TREE_PUBLIC (fndecl))
@@ -1121,7 +1120,7 @@ analyze_functions (bool first_time)
                  && !cnode->dispatcher_function)
                {
                  cnode->reset ();
-                 cnode->local.redefined_extern_inline = true;
+                 cnode->redefined_extern_inline = true;
                  continue;
                }
 
index 92e4e5e68985826b840c0a5d26b1fab5e514d1b6..857ea30dafd917445220de42a845ff5c65275e8b 100644 (file)
@@ -1600,7 +1600,8 @@ setup_incoming_promotions (rtx_insn *first)
          function lie within the current compilation unit.  (This does
         take into account the exporting of a function via taking its
         address, and so forth.)  */
-      strictly_local = cgraph_node::local_info (current_function_decl)->local;
+      strictly_local
+       = cgraph_node::local_info_node (current_function_decl)->local;
 
       /* The mode and signedness of the argument before any promotions happen
          (equal to the mode of the pseudo holding it at that stage).  */
index 5354cdba9dc16a75881ddde26470b8a213fd8333..b9122a4ded92f27276fb36ee597e56e3f8e1c3e7 100644 (file)
@@ -1119,8 +1119,7 @@ ix86_function_regparm (const_tree type, const_tree decl)
       if (target && opt_for_fn (target->decl, optimize)
          && !(profile_flag && !flag_fentry))
        {
-         cgraph_local_info *i = &target->local;
-         if (i && i->local && i->can_change_signature)
+         if (target->local && target->can_change_signature)
            {
              int local_regparm, globals = 0, regno;
 
@@ -1216,8 +1215,7 @@ ix86_function_sseregparm (const_tree type, const_tree decl, bool warn)
       && opt_for_fn (target->decl, optimize)
       && !(profile_flag && !flag_fentry))
     {
-      cgraph_local_info *i = &target->local;
-      if (i && i->local && i->can_change_signature)
+      if (target->local && target->can_change_signature)
        {
          /* Refuse to produce wrong code when local function with SSE enabled
             is called from SSE disabled function.
@@ -1698,7 +1696,7 @@ init_cumulative_args (CUMULATIVE_ARGS *cum,  /* Argument info to initialize */
                      tree fndecl,
                      int caller)
 {
-  struct cgraph_local_info *i = NULL;
+  struct cgraph_node *local_info_node = NULL;
   struct cgraph_node *target = NULL;
 
   memset (cum, 0, sizeof (*cum));
@@ -1709,7 +1707,7 @@ init_cumulative_args (CUMULATIVE_ARGS *cum,  /* Argument info to initialize */
       if (target)
        {
          target = target->function_symbol ();
-         i = cgraph_node::local_info (target->decl);
+         local_info_node = cgraph_node::local_info_node (target->decl);
          cum->call_abi = ix86_function_abi (target->decl);
        }
       else
@@ -1751,7 +1749,8 @@ init_cumulative_args (CUMULATIVE_ARGS *cum,  /* Argument info to initialize */
      va_start so for local functions maybe_vaarg can be made aggressive
      helping K&R code.
      FIXME: once typesytem is fixed, we won't need this code anymore.  */
-  if (i && i->local && i->can_change_signature)
+  if (local_info_node && local_info_node->local
+      && local_info_node->can_change_signature)
     fntype = TREE_TYPE (target->decl);
   cum->stdarg = stdarg_p (fntype);
   cum->maybe_vaarg = (fntype
index 23028e28a16bcbc4785b1a4b5ca86e959fc63716..8a5f8d362f6f31a130bca7e5a20bfbcd8e616984 100644 (file)
@@ -594,7 +594,7 @@ determine_versionability (struct cgraph_node *node,
      present.  */
   if (node->alias || node->thunk.thunk_p)
     reason = "alias or thunk";
-  else if (!node->local.versionable)
+  else if (!node->versionable)
     reason = "not a tree_versionable_function";
   else if (node->get_availability () <= AVAIL_INTERPOSABLE)
     reason = "insufficient body availability";
@@ -1150,7 +1150,7 @@ count_callers (cgraph_node *node, void *data)
   for (cgraph_edge *cs = node->callers; cs; cs = cs->next_caller)
     /* Local thunks can be handled transparently, but if the thunk cannot
        be optimized out, count it as a real use.  */
-    if (!cs->caller->thunk.thunk_p || !cs->caller->local.local)
+    if (!cs->caller->thunk.thunk_p || !cs->caller->local)
       ++*caller_count;
   return false;
 }
@@ -1163,7 +1163,7 @@ set_single_call_flag (cgraph_node *node, void *)
 {
   cgraph_edge *cs = node->callers;
   /* Local thunks can be handled transparently, skip them.  */
-  while (cs && cs->caller->thunk.thunk_p && cs->caller->local.local)
+  while (cs && cs->caller->thunk.thunk_p && cs->caller->local)
     cs = cs->next_caller;
   if (cs)
     {
@@ -1187,7 +1187,7 @@ initialize_node_lattices (struct cgraph_node *node)
 
   if (!ipa_get_param_count (info))
     disable = true;
-  else if (node->local.local)
+  else if (node->local)
     {
       int caller_count = 0;
       node->call_for_symbol_thunks_and_aliases (count_callers, &caller_count,
@@ -2935,7 +2935,7 @@ estimate_local_effects (struct cgraph_node *node)
   int devirt_bonus = devirtualization_time_bonus (node, known_csts,
                                           known_contexts, known_aggs_ptrs);
   if (always_const || devirt_bonus
-      || (removable_params_cost && node->local.can_change_signature))
+      || (removable_params_cost && node->can_change_signature))
     {
       struct caller_statistics stats;
       ipa_hints hints;
@@ -2957,7 +2957,7 @@ estimate_local_effects (struct cgraph_node *node)
        fprintf (dump_file, " - context independent values, size: %i, "
                 "time_benefit: %f\n", size, (base_time - time).to_double ());
 
-      if (size <= 0 || node->local.local)
+      if (size <= 0 || node->local)
        {
          info->do_clone_for_all_contexts = true;
 
@@ -3892,7 +3892,7 @@ create_specialized_node (struct cgraph_node *node,
   ipa_param_adjustments *old_adjustments = node->clone.param_adjustments;
   ipa_param_adjustments *new_adjustments;
   gcc_assert (!info->ipcp_orig_node);
-  gcc_assert (node->local.can_change_signature
+  gcc_assert (node->can_change_signature
              || !old_adjustments);
 
   if (old_adjustments)
@@ -3907,7 +3907,7 @@ create_specialized_node (struct cgraph_node *node,
       for (i = 0; i < old_adj_count; i++)
        {
          ipa_adjusted_param *old_adj = &(*old_adjustments->m_adj_params)[i];
-         if (!node->local.can_change_signature
+         if (!node->can_change_signature
              || old_adj->op != IPA_PARAM_OP_COPY
              || (!known_csts[old_adj->base_index]
                  && ipa_is_param_used (info, old_adj->base_index)))
@@ -3924,7 +3924,7 @@ create_specialized_node (struct cgraph_node *node,
                         ipa_param_adjustments (new_params, count,
                                                skip_return));
     }
-  else if (node->local.can_change_signature
+  else if (node->can_change_signature
           && want_remove_some_param_p (node, known_csts))
     {
       ipa_adjusted_param adj;
@@ -4990,7 +4990,7 @@ identify_dead_nodes (struct cgraph_node *node)
 {
   struct cgraph_node *v;
   for (v = node; v; v = ((struct ipa_dfs_info *) v->aux)->next_cycle)
-    if (v->local.local
+    if (v->local
        && !v->call_for_symbol_thunks_and_aliases
             (has_undead_caller_from_outside_scc_p, NULL, true))
       IPA_NODE_REF (v)->node_dead = 1;
index 798fdbe5dd251567b947ab6abe8359db3da46610..795e96566237d578100a4b42969919acd8b32055 100644 (file)
@@ -2712,7 +2712,7 @@ compute_fn_summary (struct cgraph_node *node, bool early)
       ipa_call_summary *es = ipa_call_summaries->get_create (node->callees);
       predicate t = true;
 
-      node->local.can_change_signature = false;
+      node->can_change_signature = false;
       es->call_stmt_size = eni_size_weights.call_cost;
       es->call_stmt_time = eni_time_weights.call_cost;
       info->account_size_time (ipa_fn_summary::size_scale
@@ -2751,12 +2751,12 @@ compute_fn_summary (struct cgraph_node *node, bool early)
              with simd attribute.  */
           || lookup_attribute ("omp declare simd",
                                DECL_ATTRIBUTES (node->decl)))
-        node->local.can_change_signature = false;
+        node->can_change_signature = false;
        else
         {
           /* Otherwise, inlinable functions always can change signature.  */
           if (info->inlinable)
-            node->local.can_change_signature = true;
+            node->can_change_signature = true;
           else
             {
               /* Functions calling builtin_apply cannot change signature.  */
@@ -2767,7 +2767,7 @@ compute_fn_summary (struct cgraph_node *node, bool early)
                       || fndecl_built_in_p (cdecl, BUILT_IN_VA_START))
                     break;
                 }
-              node->local.can_change_signature = !e;
+              node->can_change_signature = !e;
             }
         }
        analyze_function_body (node, early);
@@ -3485,7 +3485,7 @@ ipa_fn_summary_generate (void)
 
   FOR_EACH_DEFINED_FUNCTION (node)
     if (DECL_STRUCT_FUNCTION (node->decl))
-      node->local.versionable = tree_versionable_function_p (node->decl);
+      node->versionable = tree_versionable_function_p (node->decl);
 
   ipa_fn_summary_alloc ();
 
index 8af1d734d855c1792522e9bd8c38e90411aa5425..32280f3acac72a3d86638f8f5a15ad6c25acb0c4 100644 (file)
@@ -51,7 +51,7 @@ namespace {
 static bool
 check_warn_node_versionable (cgraph_node *node)
 {
-  if (!node->local.versionable)
+  if (!node->versionable)
     {
       warning_at (EXPR_LOCATION (node->decl), OPT_Whsa,
                  "could not emit HSAIL for function %s: function cannot be "
@@ -113,7 +113,7 @@ process_hsa_functions (void)
          TREE_PUBLIC (clone->decl) = TREE_PUBLIC (node->decl);
          clone->externally_visible = node->externally_visible;
 
-         if (!node->local.local)
+         if (!node->local)
            clone->force_output = true;
          hsa_summaries->link_functions (clone, node, HSA_FUNCTION, false);
 
index 066288d04ba68329806ad3929156afed05cf9b99..0d17fe990fc4fe01b830dc6c9043e7e711a028d5 100644 (file)
@@ -926,7 +926,7 @@ sem_function::equals_private (sem_item *item)
 static bool
 set_local (cgraph_node *node, void *data)
 {
-  node->local.local = data != NULL;
+  node->local = data != NULL;
   return false;
 }
 
index 8dee132600a0cb3ed89b44122b1a4d7da44c3118..fb3299d896f97e079bd0833f92a2338e02560692 100644 (file)
@@ -68,7 +68,7 @@ initialize_inline_failed (struct cgraph_edge *e)
     e->inline_failed = CIF_INDIRECT_UNKNOWN_CALL;
   else if (!callee->definition)
     e->inline_failed = CIF_BODY_NOT_AVAILABLE;
-  else if (callee->local.redefined_extern_inline)
+  else if (callee->redefined_extern_inline)
     e->inline_failed = CIF_REDEFINED_EXTERN_INLINE;
   else
     e->inline_failed = CIF_FUNCTION_NOT_CONSIDERED;
index 210387050bcecd7ceb36fbc8b12ebda0dbe6f3a6..05bc8e70677fe243d6e567cfa1d62837ed805551 100644 (file)
@@ -1757,7 +1757,7 @@ speculation_useful_p (struct cgraph_edge *e, bool anticipate_inlining)
      to an ipa-cp clone (that are seen by having local flag set),
      it is probably pointless to inline it unless hardware is missing
      indirect call predictor.  */
-  if (!anticipate_inlining && !target->local.local)
+  if (!anticipate_inlining && !target->local)
     return false;
   /* For overwritable targets there is not much to do.  */
   if (!can_inline_edge_p (e, false)
index 50a54ebf19befea1fc3970a3608b53b00832cc21..a1acd2e413a5f3c955ceeef33806140b8f3719c5 100644 (file)
@@ -393,7 +393,7 @@ ipa_propagate_frequency (struct cgraph_node *node)
 
   /* We cannot propagate anything useful about externally visible functions
      nor about virtuals.  */
-  if (!node->local.local
+  if (!node->local
       || node->alias
       || (opt_for_fn (node->decl, flag_devirtualize)
          && DECL_VIRTUAL_P (node->decl)))
@@ -682,12 +682,12 @@ ipa_profile (void)
   order_pos = ipa_reverse_postorder (order);
   for (i = order_pos - 1; i >= 0; i--)
     {
-      if (order[i]->local.local
+      if (order[i]->local
          && opt_for_fn (order[i]->decl, flag_ipa_profile)
          && ipa_propagate_frequency (order[i]))
        {
          for (e = order[i]->callees; e; e = e->next_callee)
-           if (e->callee->local.local && !e->callee->aux)
+           if (e->callee->local && !e->callee->aux)
              {
                something_changed = true;
                e->callee->aux = (void *)1;
@@ -706,7 +706,7 @@ ipa_profile (void)
              && ipa_propagate_frequency (order[i]))
            {
              for (e = order[i]->callees; e; e = e->next_callee)
-               if (e->callee->local.local && !e->callee->aux)
+               if (e->callee->local && !e->callee->aux)
                  {
                    something_changed = true;
                    e->callee->aux = (void *)1;
index 375a15c44b3089a011d1805111ae9f1ecaffc2b0..0444bda704d3fede7d28098544e1623b112b6c57 100644 (file)
@@ -1204,7 +1204,7 @@ split_function (basic_block return_bb, class split_point *split_point,
       dump_split_point (dump_file, split_point);
     }
 
-  if (cur_node->local.can_change_signature)
+  if (cur_node->can_change_signature)
     args_to_skip = BITMAP_ALLOC (NULL);
   else
     args_to_skip = NULL;
@@ -1757,7 +1757,7 @@ execute_split_functions (void)
      then inlining would still benefit.  */
   if ((!node->callers
        /* Local functions called once will be completely inlined most of time.  */
-       || (!node->callers->next_caller && node->local.local))
+       || (!node->callers->next_caller && node->local))
       && !node->address_taken
       && !node->has_aliases_p ()
       && (!flag_lto || !node->externally_visible))
index 038f38b912a59b1b1083c553f999df29ba9f3118..ad11d6f85555f7dc5f64a0ada602fa3935b30766 100644 (file)
@@ -552,7 +552,7 @@ struct obstack gensum_obstack;
 static bool
 ipa_sra_preliminary_function_checks (cgraph_node *node)
 {
-  if (!node->local.can_change_signature)
+  if (!node->can_change_signature)
     {
       if (dump_file)
        fprintf (dump_file, "Function cannot change signature.\n");
@@ -2882,7 +2882,7 @@ ipa_sra_ipa_function_checks (cgraph_node *node)
                 "made local.\n", node->dump_name ());
       return false;
     }
-  if (!node->local.can_change_signature)
+  if (!node->can_change_signature)
     {
       if (dump_file)
        fprintf (dump_file, "Function can not change signature.\n");
index 274d3081ada6ef9903cc7f611b676fd5195b8b8f..f470465f93591eb5c956ac41335a31fb1f763cd4 100644 (file)
@@ -747,8 +747,8 @@ function_and_variable_visibility (bool whole_program)
     }
   FOR_EACH_DEFINED_FUNCTION (node)
     {
-      if (!node->local.local)
-        node->local.local |= node->local_p ();
+      if (!node->local)
+       node->local |= node->local_p ();
 
       /* If we know that function cannot be overwritten by a
         different semantics and moreover its section cannot be
@@ -868,7 +868,7 @@ function_and_variable_visibility (bool whole_program)
     {
       fprintf (dump_file, "\nMarking local functions:");
       FOR_EACH_DEFINED_FUNCTION (node)
-       if (node->local.local)
+       if (node->local)
          fprintf (dump_file, " %s", node->name ());
       fprintf (dump_file, "\n\n");
       fprintf (dump_file, "\nMarking externally visible functions:");
index 5d47e3d21463a56c24cc79e854ac6bba6fca9d51..934e49785f3a1fc5ea079e74476234b7c1e59964 100644 (file)
--- a/gcc/ipa.c
+++ b/gcc/ipa.c
@@ -544,7 +544,7 @@ symbol_table::remove_unreachable_nodes (FILE *file)
                = remove_attribute ("always_inline",
                                    DECL_ATTRIBUTES (node->decl));
              if (!node->in_other_partition)
-               node->local.local = false;
+               node->local = false;
              node->remove_callees ();
              node->remove_all_references ();
              changed = true;
@@ -655,7 +655,7 @@ symbol_table::remove_unreachable_nodes (FILE *file)
                    || !node->call_for_symbol_and_aliases
                       (is_indirect_call_target_p, NULL, true)))
              {
-               node->local.local = true;
+               node->local = true;
                if (file)
                  fprintf (file, " (local)");
              }
index b03835a9b8c726d1fbc416f4a00687d986919abd..5b11150bc2f76ea8affdefdd73d78d732fcf9a56 100644 (file)
@@ -507,13 +507,13 @@ lto_output_node (struct lto_simple_output_block *ob, struct cgraph_node *node,
   streamer_write_hwi_stream (ob->main_stream, node->tp_first_run);
 
   bp = bitpack_create (ob->main_stream);
-  bp_pack_value (&bp, node->local.local, 1);
+  bp_pack_value (&bp, node->local, 1);
   bp_pack_value (&bp, node->externally_visible, 1);
   bp_pack_value (&bp, node->no_reorder, 1);
   bp_pack_value (&bp, node->definition, 1);
-  bp_pack_value (&bp, node->local.versionable, 1);
-  bp_pack_value (&bp, node->local.can_change_signature, 1);
-  bp_pack_value (&bp, node->local.redefined_extern_inline, 1);
+  bp_pack_value (&bp, node->versionable, 1);
+  bp_pack_value (&bp, node->can_change_signature, 1);
+  bp_pack_value (&bp, node->redefined_extern_inline, 1);
   bp_pack_value (&bp, node->force_output, 1);
   bp_pack_value (&bp, node->forced_by_abi, 1);
   bp_pack_value (&bp, node->unique_name, 1);
@@ -1139,13 +1139,13 @@ input_overwrite_node (struct lto_file_decl_data *file_data,
   node->aux = (void *) tag;
   node->lto_file_data = file_data;
 
-  node->local.local = bp_unpack_value (bp, 1);
+  node->local = bp_unpack_value (bp, 1);
   node->externally_visible = bp_unpack_value (bp, 1);
   node->no_reorder = bp_unpack_value (bp, 1);
   node->definition = bp_unpack_value (bp, 1);
-  node->local.versionable = bp_unpack_value (bp, 1);
-  node->local.can_change_signature = bp_unpack_value (bp, 1);
-  node->local.redefined_extern_inline = bp_unpack_value (bp, 1);
+  node->versionable = bp_unpack_value (bp, 1);
+  node->can_change_signature = bp_unpack_value (bp, 1);
+  node->redefined_extern_inline = bp_unpack_value (bp, 1);
   node->force_output = bp_unpack_value (bp, 1);
   node->forced_by_abi = bp_unpack_value (bp, 1);
   node->unique_name = bp_unpack_value (bp, 1);
index 968c8cfb1ab3c7c8e4689b484287c49784fa9833..19dcfc94b27e5d3732ebb1c88a6a366650b80e6a 100644 (file)
@@ -429,7 +429,7 @@ expand_target_clones (struct cgraph_node *node, bool definition)
                                                   attributes);
       if (new_node == NULL)
        return false;
-      new_node->local.local = false;
+      new_node->local = false;
       XDELETEVEC (suffix);
 
       decl2_v = new_node->function_version ();
@@ -457,7 +457,7 @@ expand_target_clones (struct cgraph_node *node, bool definition)
   tree attributes = make_attribute ("target", "default",
                                    DECL_ATTRIBUTES (node->decl));
   DECL_ATTRIBUTES (node->decl) = attributes;
-  node->local.local = false;
+  node->local = false;
   return true;
 }
 
index f4bfcc8b8b8c84a01ab1862d2dbc02ff1f79482a..76aea56bdcf3abcdbbf360bfb90fe407f607d147 100644 (file)
@@ -475,7 +475,7 @@ simd_clone_create (struct cgraph_node *old_node)
   /* The method cgraph_version_clone_with_body () will force the new
      symbol local.  Undo this, and inherit external visibility from
      the old node.  */
-  new_node->local.local = old_node->local.local;
+  new_node->local = old_node->local;
   new_node->externally_visible = old_node->externally_visible;
 
   return new_node;
index 4a3f130e8761de484d9017c7b3467c9ef850f664..2e7752865406193ddd51a610bf67b2414171b8c0 100644 (file)
@@ -2541,12 +2541,12 @@ expand_call_tm (struct tm_region *region,
          gimple_call_set_fndecl (stmt, repl);
          update_stmt (stmt);
          node = cgraph_node::create (repl);
-         node->local.tm_may_enter_irr = false;
+         node->tm_may_enter_irr = false;
          return expand_call_tm (region, gsi);
        }
       gcc_unreachable ();
     }
-  if (node->local.tm_may_enter_irr)
+  if (node->tm_may_enter_irr)
     transaction_subcode_ior (region, GTMA_MAY_ENTER_IRREVOCABLE);
 
   if (is_tm_abort (fn_decl))
@@ -4722,7 +4722,7 @@ ipa_tm_mayenterirr_function (struct cgraph_node *node)
 
   /* We may have previously marked this function as tm_may_enter_irr;
      see pass_diagnose_tm_blocks.  */
-  if (node->local.tm_may_enter_irr)
+  if (node->tm_may_enter_irr)
     return true;
 
   /* Recurse on the main body for aliases.  In general, this will
@@ -4746,7 +4746,7 @@ ipa_tm_diagnose_tm_safe (struct cgraph_node *node)
 
   for (e = node->callees; e ; e = e->next_callee)
     if (!is_tm_callable (e->callee->decl)
-       && e->callee->local.tm_may_enter_irr)
+       && e->callee->tm_may_enter_irr)
       error_at (gimple_location (e->call_stmt),
                "unsafe function call %qD within "
                "%<transaction_safe%> function", e->callee->decl);
@@ -4814,7 +4814,7 @@ ipa_tm_diagnose_transaction (struct cgraph_node *node,
              if (is_tm_callable (fndecl))
                continue;
 
-             if (cgraph_node::local_info (fndecl)->tm_may_enter_irr)
+             if (cgraph_node::local_info_node (fndecl)->tm_may_enter_irr)
                error_at (gimple_location (stmt),
                          "unsafe function call %qD within "
                          "atomic transaction", fndecl);
@@ -4989,7 +4989,7 @@ ipa_tm_create_version (struct cgraph_node *old_node)
 
   gcc_assert (!old_node->ipa_transforms_to_apply.exists ());
   new_node = old_node->create_version_clone (new_decl, vNULL, NULL);
-  new_node->local.local = false;
+  new_node->local = false;
   new_node->externally_visible = old_node->externally_visible;
   new_node->lowered = true;
   new_node->tm_clone = 1;
@@ -5209,7 +5209,7 @@ ipa_tm_transform_calls_redirect (struct cgraph_node *node,
         CALLER.  Also note that find_tm_replacement_function also
         contains mappings into the TM runtime, e.g. memcpy.  These
         we know won't go irrevocable.  */
-      new_node->local.tm_may_enter_irr = 1;
+      new_node->tm_may_enter_irr = 1;
     }
   else
     {
@@ -5417,7 +5417,7 @@ ipa_tm_execute (void)
           No need to do this if the function's address can't be taken.  */
        if (is_tm_pure (node->decl))
          {
-           if (!node->local.local)
+           if (!node->local)
              record_tm_clone_pair (node->decl, node->decl);
            continue;
          }
@@ -5544,14 +5544,14 @@ ipa_tm_execute (void)
       node = irr_worklist[i];
       d = get_cg_data (&node, true);
       d->in_worklist = false;
-      node->local.tm_may_enter_irr = true;
+      node->tm_may_enter_irr = true;
 
       /* Propagate back to normal callers.  */
       for (e = node->callers; e ; e = e->next_caller)
        {
          caller = e->caller;
          if (!is_tm_safe_or_pure (caller->decl)
-             && !caller->local.tm_may_enter_irr)
+             && !caller->tm_may_enter_irr)
            {
              d = get_cg_data (&caller, true);
              maybe_push_queue (caller, &irr_worklist, &d->in_worklist);
@@ -5562,7 +5562,7 @@ ipa_tm_execute (void)
       FOR_EACH_ALIAS (node, ref)
        {
          caller = dyn_cast<cgraph_node *> (ref->referring);
-         if (!caller->local.tm_may_enter_irr)
+         if (!caller->tm_may_enter_irr)
            {
              /* ?? Do not traverse aliases here.  */
              d = get_cg_data (&caller, false);
index d6920f48693d3551b630583bd623056077e93dd5..2b8b9ee58c196c4658c7e052e94a09436154d314 100644 (file)
@@ -4688,7 +4688,7 @@ expand_call_inline (basic_block bb, gimple *stmt, copy_body_data *id)
             be to be able to keep both bodies and use extern inline body
             for inlining, but we can't do that because frontends overwrite
             the body.  */
-         && !cg_edge->callee->local.redefined_extern_inline
+         && !cg_edge->callee->redefined_extern_inline
          /* During early inline pass, report only when optimization is
             not turned on.  */
          && (symtab->global_info_ready