diff options
author | Jan Hubicka <jh@suse.cz> | 2012-04-22 23:28:07 +0200 |
---|---|---|
committer | Jan Hubicka <hubicka@gcc.gnu.org> | 2012-04-22 21:28:07 +0000 |
commit | 660584689a4397f18cda03b458703bbbf909dd12 (patch) | |
tree | a4cd93cef18f73580dc0226c3ce10cbae70f9f08 /gcc/ipa.c | |
parent | f04e40afc115bcf2143f541baa9e4cccef19922a (diff) | |
download | gcc-660584689a4397f18cda03b458703bbbf909dd12.zip gcc-660584689a4397f18cda03b458703bbbf909dd12.tar.gz gcc-660584689a4397f18cda03b458703bbbf909dd12.tar.bz2 |
lto-symtab.c (lto_varpool_replace_node): Do not merge needed flags.
* lto-symtab.c (lto_varpool_replace_node): Do not merge needed flags.
* cgraphbuild.c (record_reference, record_type_list, mark_address,
mark_load, mark_store): Do not mark varpool nodes as needed.
* cgraph.c (cgraph_new_nodes): Remove.
(cgraph_create_function_alias): Do not mark nodes as reachable.
(cgraph_add_thunk): Likewise.
(cgraph_mark_reachable_node): Do not manage the queue.
* cgraph.h (cgraph_node): Remove next_needed.
(varpool_nodes_queue): Remove next_needed and prev_needed.
(x_cgraph_nodes_queue, x_cgraph_nodes_queue, cgraph_new_nodes): Remove.
(cgraph_new_nodes): Declare.
(x_varpool_nodes_queue, varpool_nodes_queue); Remove.
(varpool_analyze_pending_decls): Remove.
(varpool_analyze_node): New.
(varpool_mark_needed_node): Remove.
(varpool_first_variable, varpool_next_variable): New inlines.
(varpool_first_static_initializer, varpool_next_static_initializer): Update.
(FOR_EACH_STATIC_VARIABLE): Remove unused walker.
(varpool_first_defined_variable): New inline.
(varpool_next_defined_variable): New inline
(FOR_EACH_VARIABLE): Reimplement.
(FOR_EACH_DEFINED_VARIABLE): Reimplement.
* toplev.c (wrapup_global_declaration_2): Use analyzed instead of
needed flag.
* cgraphunit.c (cgraph_new_nodes): Declare here.
(enqueue_node): New function.
(cgraph_process_new_functions): update for new
node set; when constructing cgraph enqueue node for processing.
(cgraph_add_new_function): Use new node set.
(process_function_and_variable_attributes): Do not set varpool needed
flags.
(referred_to_p): New function.
(varpool_finalize_decl): Move here from varpool.c; enqueue needed node
when varpool is in construction.
(cgraph_analyze_functions): Rewrite.
(cgraph_expand_all_functions): Update.
(cgraph_output_in_order): Do not analyze pending decls; do not set needed flags.
(cgraph_optimize): Do not analyze pending decls.
* lto-cgraph.c (input_varpool_node): Clear analyzed flag for objects in other
partition; do not mark node as needed.
* dwarf2out.c (reference_to_unused): Use analyzed flag.
(premark_types_used_by_global_vars_helper): Likewise.
* ipa.c (process_references): Do not call varpool_mark_needed_node.
(cgraph_remove_unreachable_nodes): Do not rely on varpool and
cgrpah queues.
(function_and_variable_visibility): Do not mark node as needed.
(whole_program_function_and_variable_visibility): Likewise.
* Makefile.in (gt-varpool.h): No longer needed.
* passes.c (execute_one_pass, execute_ipa_pass_list): Update.
(ipa_write_summaries): Do not use needed flag.
* varpool.c: Do not include gt-varpool.h
(x_varpool_nodes_queue, x_varpool_last_needed_node,
x_varpool_last_needed_node, x_varpool_first_unanalyzed_node,
x_varpool_first_unanalyzed_node, varpool_assembled_nodes_queue):
Remove.
(varpool_remove_node): Do not update the lists.
(dump_varpool_node): Do not dump needed flag.
(varpool_enqueue_needed_node): Remove.
(varpool_mark_needed_node): Remove.
(varpool_reset_queue): Remove.
(varpool_finalize_decl): Move to cgraphunit.c
(varpool_analyze_node): New functions based on former
varpool_analyze_pending_decls.
(varpool_analyze_pending_decls): Remove.
(varpool_assemble_decl): Do not update the lists.
(enqueue_node): New function.
(varpool_remove_unreferenced_decls): Rewrite.
(varpool_empty_needed_queue): Remove.
(add_new_static_var): Do not mark node as needed.
(varpool_create_variable_alias): Handle expansion state
creation.
* except.c (output_ttype): Do not mark node as needed.
* varasm.c (mark_decl_referenced): Do not use mark_needed_node.
* tree-profile.c (init_ic_make_global_vars, init_ic_make_global_vars):
Likewise.
* tree-switch-conversion.c (build_one_array): Likewise.
* class.c (build_utf8_ref): Do not mark varpool node as needed.
* gcc-interface/utils.c (gnat_write_global_declarations): Do not mark
needed node.
* lto-partition.c (partition_varpool_node_p): Do not use needed flag.
* decl2.c (maybe_make_one_only): Mark keyed COMDATs as USED so they
gets finalized.
From-SVN: r186687
Diffstat (limited to 'gcc/ipa.c')
-rw-r--r-- | gcc/ipa.c | 31 |
1 files changed, 6 insertions, 25 deletions
@@ -107,7 +107,7 @@ process_references (struct ipa_ref_list *list, struct varpool_node *node = ipa_ref_varpool_node (ref); if (!node->needed) { - varpool_mark_needed_node (node); + node->needed = true; enqueue_varpool_node (node, first_varpool); } } @@ -187,7 +187,6 @@ cgraph_remove_unreachable_nodes (bool before_inlining_p, FILE *file) FOR_EACH_VARIABLE (vnode) gcc_assert (!vnode->symbol.aux); #endif - varpool_reset_queue (); /* Mark functions whose bodies are obviously needed. This is mostly when they can be referenced externally. Inline clones are special since their declarations are shared with master clone and thus @@ -213,13 +212,10 @@ cgraph_remove_unreachable_nodes (bool before_inlining_p, FILE *file) /* Mark variables that are obviously needed. */ FOR_EACH_VARIABLE (vnode) { - vnode->next_needed = NULL; - vnode->prev_needed = NULL; if ((vnode->analyzed || vnode->symbol.force_output) && !varpool_can_remove_if_no_refs (vnode)) { - vnode->needed = false; - varpool_mark_needed_node (vnode); + vnode->needed = true; enqueue_varpool_node (vnode, &first_varpool); } else @@ -315,7 +311,7 @@ cgraph_remove_unreachable_nodes (bool before_inlining_p, FILE *file) next = varpool (next->symbol.same_comdat_group)) if (!next->needed) { - varpool_mark_needed_node (next); + next->needed = true; enqueue_varpool_node (next, &first_varpool); } } @@ -794,8 +790,6 @@ function_and_variable_visibility (bool whole_program) && !DECL_EXTERNAL (vnode->symbol.decl)) { vnode->symbol.force_output = 1; - varpool_mark_needed_node (vnode); - gcc_assert (vnode->needed); pointer_set_insert (aliased_vnodes, vnode); if (dump_file) fprintf (dump_file, " varpool node %s", @@ -933,10 +927,9 @@ function_and_variable_visibility (bool whole_program) { if (!vnode->finalized) continue; - if (vnode->needed - && varpool_externally_visible_p - (vnode, - pointer_set_contains (aliased_vnodes, vnode))) + if (varpool_externally_visible_p + (vnode, + pointer_set_contains (aliased_vnodes, vnode))) vnode->symbol.externally_visible = true; else vnode->symbol.externally_visible = false; @@ -1018,7 +1011,6 @@ static unsigned int whole_program_function_and_variable_visibility (void) { struct cgraph_node *node; - struct varpool_node *vnode; function_and_variable_visibility (flag_whole_program); @@ -1026,17 +1018,6 @@ whole_program_function_and_variable_visibility (void) if ((node->symbol.externally_visible && !DECL_COMDAT (node->symbol.decl)) && node->local.finalized) cgraph_mark_reachable_node (node); - FOR_EACH_DEFINED_VARIABLE (vnode) - if (vnode->symbol.externally_visible && !DECL_COMDAT (vnode->symbol.decl)) - varpool_mark_needed_node (vnode); - if (dump_file) - { - fprintf (dump_file, "\nNeeded variables:"); - FOR_EACH_DEFINED_VARIABLE (vnode) - if (vnode->needed) - fprintf (dump_file, " %s", varpool_node_name (vnode)); - fprintf (dump_file, "\n\n"); - } if (optimize) ipa_discover_readonly_nonaddressable_vars (); return 0; |