* varpool.c (varpool_finalize_decl): Handle toplevel_reorder here.
(decide_is_variable_needed): Do not handle toplevel reorder here.
* cgraph.h (varpool_can_remove_if_no_refs): Likewise.
* ipa.c (cgraph_remove_unreachable_nodes): Remove unreachable vars
even at -O0.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@185777
138bc75d-0d04-0410-961f-
82ee72b054a4
+2012-03-24 Jan Hubicka <jh@suse.cz>
+
+ PR lto/51663
+ * varpool.c (varpool_finalize_decl): Handle toplevel_reorder here.
+ (decide_is_variable_needed): Do not handle toplevel reorder here.
+ * cgraph.h (varpool_can_remove_if_no_refs): Likewise.
+ * ipa.c (cgraph_remove_unreachable_nodes): Remove unreachable vars
+ even at -O0.
+
2012-03-24 Eric Botcazou <ebotcazou@adacore.com>
* expr.c (optimize_bitfield_assignment_op) <BIT_IOR_EXPR>: Use str_mode
varpool_can_remove_if_no_refs (struct varpool_node *node)
{
return (!node->force_output && !node->used_from_other_partition
- && (flag_toplevel_reorder || DECL_COMDAT (node->decl)
- || DECL_ARTIFICIAL (node->decl))
&& (DECL_COMDAT (node->decl) || !node->externally_visible));
}
if (file)
fprintf (file, "\n");
- /* We must release unused extern inlines or sanity checking will fail. Rest of transformations
- are undesirable at -O0 since we do not want to remove anything. */
- if (!optimize)
- return changed;
-
if (file)
fprintf (file, "Reclaiming variables:");
for (vnode = varpool_nodes; vnode; vnode = vnext)
if (file)
fprintf (file, "\n");
+ /* Rest of transformations are undesirable at -O0. */
+ if (!optimize)
+ return changed;
+
#ifdef ENABLE_CHECKING
verify_cgraph ();
#endif
&& !DECL_EXTERNAL (decl))
return true;
- /* When not reordering top level variables, we have to assume that
- we are going to keep everything. */
- if (!flag_toplevel_reorder)
- return true;
return false;
}
if (node->needed)
varpool_enqueue_needed_node (node);
node->finalized = true;
- if (TREE_THIS_VOLATILE (decl) || DECL_PRESERVE_P (decl))
+ 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. */
+ || (!flag_toplevel_reorder && !DECL_COMDAT (node->decl)
+ && !DECL_ARTIFICIAL (node->decl)))
node->force_output = true;
if (decide_is_variable_needed (node, decl))