cgraphunit.c (cgraph_node::finalize_function): When !flag_toplevel_reorde set no_reor...
authorJan Hubicka <hubicka@ucw.cz>
Thu, 6 Jul 2017 16:46:47 +0000 (18:46 +0200)
committerJan Hubicka <hubicka@gcc.gnu.org>
Thu, 6 Jul 2017 16:46:47 +0000 (16:46 +0000)
* cgraphunit.c (cgraph_node::finalize_function): When
!flag_toplevel_reorde set no_reorder flag.
(varpool_node::finalize_decl): Likewise.
(symbol_table::compile): Drop no toplevel reorder path.

* lto-partition.c (lto_balanced_map): Do not check
flag_toplevel_reorder.

From-SVN: r250034

gcc/ChangeLog
gcc/cgraphunit.c
gcc/lto/ChangeLog
gcc/lto/lto-partition.c

index f2a15a186a8d5e0ea31eb4a46f79d048010b4e81..1e46b67af1fda0becb623b7508333b07105d9fd6 100644 (file)
@@ -1,3 +1,10 @@
+2017-07-06  Jan Hubicka  <hubicka@ucw.cz>
+
+       * cgraphunit.c (cgraph_node::finalize_function): When
+       !flag_toplevel_reorde set no_reorder flag.
+       (varpool_node::finalize_decl): Likewise.
+       (symbol_table::compile): Drop no toplevel reorder path.
+
 2017-07-06  Jan Hubicka  <hubicka@ucw.cz>
 
        * bb-reorder.c (better_edge_p): Do not build traces across abnormal/eh
index a0d1f303b2a0c86bb8857cf1bc1bfc1e7911a584..6072c567bc36660cbf8b6f4d5fcba42544cef751 100644 (file)
@@ -449,6 +449,8 @@ cgraph_node::finalize_function (tree decl, bool no_collect)
   node->definition = true;
   notice_global_symbol (decl);
   node->lowered = DECL_STRUCT_FUNCTION (decl)->cfg != NULL;
+  if (!flag_toplevel_reorder)
+    node->no_reorder = true;
 
   /* With -fkeep-inline-functions we are keeping all inline functions except
      for extern inline ones.  */
@@ -471,7 +473,8 @@ cgraph_node::finalize_function (tree decl, bool no_collect)
      declared inline and nested functions.  These were optimized out
      in the original implementation and it is unclear whether we want
      to change the behavior here.  */
-  if (((!opt_for_fn (decl, optimize) || flag_keep_static_functions)
+  if (((!opt_for_fn (decl, optimize) || flag_keep_static_functions
+       || node->no_reorder)
        && !node->cpp_implicit_alias
        && !DECL_DISREGARD_INLINE_LIMITS (decl)
        && !DECL_DECLARED_INLINE_P (decl)
@@ -840,13 +843,13 @@ varpool_node::finalize_decl (tree decl)
      it is available to notice_global_symbol.  */
   node->definition = true;
   notice_global_symbol (decl);
+  if (!flag_toplevel_reorder)
+    node->no_reorder = true;
   if (TREE_THIS_VOLATILE (decl) || DECL_PRESERVE_P (decl)
       /* Traditionally we do not eliminate static variables when not
         optimizing and when not doing toplevel reoder.  */
-      || node->no_reorder
-      || ((!flag_toplevel_reorder
-          && !DECL_COMDAT (node->decl)
-          && !DECL_ARTIFICIAL (node->decl))))
+      || (node->no_reorder && !DECL_COMDAT (node->decl)
+         && !DECL_ARTIFICIAL (node->decl)))
     node->force_output = true;
 
   if (symtab->state == CONSTRUCTION
@@ -857,8 +860,8 @@ varpool_node::finalize_decl (tree decl)
   /* Some frontends produce various interface variables after compilation
      finished.  */
   if (symtab->state == FINISHED
-      || (!flag_toplevel_reorder
-       && symtab->state == EXPANSION))
+      || (node->no_reorder
+         && symtab->state == EXPANSION))
     node->assemble_decl ();
 
   if (DECL_INITIAL (decl))
@@ -2226,11 +2229,10 @@ struct cgraph_order_sort
    according to their order fields, which is the order in which they
    appeared in the file.  This implements -fno-toplevel-reorder.  In
    this mode we may output functions and variables which don't really
-   need to be output.
-   When NO_REORDER is true only do this for symbols marked no reorder. */
+   need to be output.  */
 
 static void
-output_in_order (bool no_reorder)
+output_in_order (void)
 {
   int max;
   cgraph_order_sort *nodes;
@@ -2245,7 +2247,7 @@ output_in_order (bool no_reorder)
     {
       if (pf->process && !pf->thunk.thunk_p && !pf->alias)
        {
-         if (no_reorder && !pf->no_reorder)
+         if (!pf->no_reorder)
            continue;
          i = pf->order;
          gcc_assert (nodes[i].kind == ORDER_UNDEFINED);
@@ -2258,7 +2260,7 @@ output_in_order (bool no_reorder)
      Please keep them in sync.  */
   FOR_EACH_VARIABLE (pv)
     {
-      if (no_reorder && !pv->no_reorder)
+      if (!pv->no_reorder)
        continue;
       if (DECL_HARD_REGISTER (pv->decl)
          || DECL_HAS_VALUE_EXPR_P (pv->decl))
@@ -2532,16 +2534,11 @@ symbol_table::compile (void)
 
   state = EXPANSION;
 
-  if (!flag_toplevel_reorder)
-    output_in_order (false);
-  else
-    {
-      /* Output first asm statements and anything ordered. The process
-         flag is cleared for these nodes, so we skip them later.  */
-      output_in_order (true);
-      expand_all_functions ();
-      output_variables ();
-    }
+  /* Output first asm statements and anything ordered. The process
+     flag is cleared for these nodes, so we skip them later.  */
+  output_in_order ();
+  expand_all_functions ();
+  output_variables ();
 
   process_new_functions ();
   state = FINISHED;
index 41f034372d94cd6efba2b0592a937cef71895844..667d58c886c8f65e46a74e1dd936e646e5221b62 100644 (file)
@@ -1,5 +1,9 @@
-2017-06-23  Marc Glisse  <marc.glisse@inria.fr>
+2017-07-06  Jan Hubicka  <hubicka@ucw.cz>
+
+       * lto-partition.c (lto_balanced_map): Do not check
+       flag_toplevel_reorder.
 
+2017-06-23  Marc Glisse  <marc.glisse@inria.fr>
        * lto-lang.c (lto_init): Use builtin_structptr_types.
 
 2017-06-15  Jan Hubicka  <hubicka@ucw.cz>
index 3600ab23bd9157aad76751912306abd498acae92..3141ecec07c0efecc30a4cee9abf8ca0c95d0732 100644 (file)
@@ -506,7 +506,7 @@ lto_balanced_map (int n_lto_partitions, int max_partition_size)
   /* Collect all variables that should not be reordered.  */
   FOR_EACH_VARIABLE (vnode)
     if (vnode->get_partitioning_class () == SYMBOL_PARTITION
-       && (!flag_toplevel_reorder || vnode->no_reorder))
+       && vnode->no_reorder)
       varpool_order.safe_push (vnode);
   n_varpool_nodes = varpool_order.length ();
   varpool_order.qsort (varpool_node_cmp);
@@ -547,7 +547,8 @@ lto_balanced_map (int n_lto_partitions, int max_partition_size)
        }
       add_sorted_nodes (next_nodes, partition);
 
-      add_symbol_to_partition (partition, order[i]);
+      if (!symbol_partitioned_p (order[i]))
+        add_symbol_to_partition (partition, order[i]);
       if (!order[i]->alias)
         total_size -= ipa_fn_summaries->get (order[i])->size;
          
@@ -634,7 +635,7 @@ lto_balanced_map (int n_lto_partitions, int max_partition_size)
                vnode = dyn_cast <varpool_node *> (ref->referred);
                if (!vnode->definition)
                  continue;
-               if (!symbol_partitioned_p (vnode) && flag_toplevel_reorder
+               if (!symbol_partitioned_p (vnode)
                    && !vnode->no_reorder
                    && vnode->get_partitioning_class () == SYMBOL_PARTITION)
                  add_symbol_to_partition (partition, vnode);
@@ -672,7 +673,7 @@ lto_balanced_map (int n_lto_partitions, int max_partition_size)
                   because it allows them to be removed.  Coupling
                   with objects they refer to only helps to reduce
                   number of symbols promoted to hidden.  */
-               if (!symbol_partitioned_p (vnode) && flag_toplevel_reorder
+               if (!symbol_partitioned_p (vnode)
                    && !vnode->no_reorder
                    && !vnode->can_remove_if_no_refs_p ()
                    && vnode->get_partitioning_class () == SYMBOL_PARTITION)
@@ -767,14 +768,10 @@ lto_balanced_map (int n_lto_partitions, int max_partition_size)
   next_nodes.truncate (0);
 
   /* Varables that are not reachable from the code go into last partition.  */
-  if (flag_toplevel_reorder)
-    {
-      FOR_EACH_VARIABLE (vnode)
-       if (vnode->get_partitioning_class () == SYMBOL_PARTITION
-           && !symbol_partitioned_p (vnode)
-           && !vnode->no_reorder)
-         next_nodes.safe_push (vnode);
-    }
+  FOR_EACH_VARIABLE (vnode)
+    if (vnode->get_partitioning_class () == SYMBOL_PARTITION
+       && !symbol_partitioned_p (vnode))
+      next_nodes.safe_push (vnode);
 
   /* Output remaining ordered symbols.  */
   while (varpool_pos < n_varpool_nodes)