diff options
author | Jan Hubicka <jh@suse.cz> | 2012-03-25 15:28:32 +0200 |
---|---|---|
committer | Jan Hubicka <hubicka@gcc.gnu.org> | 2012-03-25 13:28:32 +0000 |
commit | 47a1ae3c6a27bfd5875d70860d72ea31d4c98cc7 (patch) | |
tree | 92acef700b091d82f1b0b19cc3a1903207a22d71 /gcc/varpool.c | |
parent | e24e08d4e2c4d8f008bdf0dd7ed91449ba3f7787 (diff) | |
download | gcc-47a1ae3c6a27bfd5875d70860d72ea31d4c98cc7.zip gcc-47a1ae3c6a27bfd5875d70860d72ea31d4c98cc7.tar.gz gcc-47a1ae3c6a27bfd5875d70860d72ea31d4c98cc7.tar.bz2 |
re PR middle-end/51663 (Desirable/undesirable elimination of unused variables & functions at -O0, -O0 -flto and -O0 -fwhole-program)
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.
From-SVN: r185777
Diffstat (limited to 'gcc/varpool.c')
-rw-r--r-- | gcc/varpool.c | 10 |
1 files changed, 5 insertions, 5 deletions
diff --git a/gcc/varpool.c b/gcc/varpool.c index c2d88c3..e064f7b 100644 --- a/gcc/varpool.c +++ b/gcc/varpool.c @@ -334,10 +334,6 @@ decide_is_variable_needed (struct varpool_node *node, tree decl) && !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; } @@ -405,7 +401,11 @@ varpool_finalize_decl (tree decl) 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)) |