diff options
-rw-r--r-- | gcc/ChangeLog | 22 | ||||
-rw-r--r-- | gcc/Makefile.in | 2 | ||||
-rw-r--r-- | gcc/basic-block.h | 3 | ||||
-rw-r--r-- | gcc/bb-reorder.c | 2 | ||||
-rw-r--r-- | gcc/cgraph.h | 2 | ||||
-rw-r--r-- | gcc/cgraphbuild.c | 14 | ||||
-rw-r--r-- | gcc/cgraphunit.c | 347 | ||||
-rw-r--r-- | gcc/combine.c | 27 | ||||
-rw-r--r-- | gcc/cse.c | 4 | ||||
-rw-r--r-- | gcc/dse.c | 109 | ||||
-rw-r--r-- | gcc/dse.h | 30 | ||||
-rw-r--r-- | gcc/rtl.h | 2 |
12 files changed, 202 insertions, 362 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 9d3d515..fc2ec36 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,25 @@ +2012-03-29 Richard Guenther <rguenther@suse.de> + + * cgraph.h (cgraph_materialize_all_clones): Remove. + (reset_inline_failed): Likewise. + * cgraphunit.c (cgraph_materialize_all_clones): Make static. + * cgraphbuild.c (reset_inline_failed): Remove. + * rtl.h (cse_main): Remove. + (extended_count): Likewise. + * cse.c (dump_class): Mark as DEBUG_FUNCTION. + (cse_main): Make static. + * combine.c (extended_count): Remove. + (dump_combine_stats): Mark as DEBUG_FUNCTION. + * basic-block.h (reorder_basic_blocks): Remove. + * bb-reorder.c (reorder_basic_blocks): Make static. + * Makefile.in (dse.o): Remove dse.h dependency. + * dse.h: Remove. + * dse.c (gate_dse): Remove. + (clear_alias_mode_eq): Likewise. + (clear_alias_mode_hash): Likewise. + (dse_record_singleton_alias_set): Likewise. + (dse_invalidate_singleton_alias_set): Likewise. + 2012-03-29 H.J. Lu <hongjiu.lu@intel.com> * config/linux-android.h (ANDROID_STARTFILE_SPEC): Use diff --git a/gcc/Makefile.in b/gcc/Makefile.in index d50facc..f5fa0c3 100644 --- a/gcc/Makefile.in +++ b/gcc/Makefile.in @@ -3011,7 +3011,7 @@ dce.o : dce.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(RTL_H) \ dse.o : dse.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(RTL_H) \ $(TREE_H) $(TM_P_H) $(REGS_H) hard-reg-set.h $(FLAGS_H) insn-config.h \ $(RECOG_H) $(EXPR_H) $(DF_H) cselib.h $(DBGCNT_H) $(TIMEVAR_H) \ - $(TREE_PASS_H) alloc-pool.h $(ALIAS_H) dse.h $(OPTABS_H) $(TARGET_H) \ + $(TREE_PASS_H) alloc-pool.h $(ALIAS_H) $(OPTABS_H) $(TARGET_H) \ $(BITMAP_H) $(PARAMS_H) fwprop.o : fwprop.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(RTL_H) \ $(DIAGNOSTIC_CORE_H) insn-config.h $(RECOG_H) $(FLAGS_H) $(OBSTACK_H) $(BASIC_BLOCK_H) \ diff --git a/gcc/basic-block.h b/gcc/basic-block.h index fb17bad..f8cdea0 100644 --- a/gcc/basic-block.h +++ b/gcc/basic-block.h @@ -830,9 +830,6 @@ extern bool inside_basic_block_p (const_rtx); extern bool control_flow_insn_p (const_rtx); extern rtx get_last_bb_insn (basic_block); -/* In bb-reorder.c */ -extern void reorder_basic_blocks (void); - /* In dominance.c */ enum cdi_direction diff --git a/gcc/bb-reorder.c b/gcc/bb-reorder.c index a35b8e6..c7f9c92 100644 --- a/gcc/bb-reorder.c +++ b/gcc/bb-reorder.c @@ -1903,7 +1903,7 @@ verify_hot_cold_block_grouping (void) /* Reorder basic blocks. The main entry point to this file. FLAGS is the set of flags to pass to cfg_layout_initialize(). */ -void +static void reorder_basic_blocks (void) { int n_traces; diff --git a/gcc/cgraph.h b/gcc/cgraph.h index 93efd94..7262859 100644 --- a/gcc/cgraph.h +++ b/gcc/cgraph.h @@ -613,13 +613,11 @@ struct cgraph_2edge_hook_list *cgraph_add_edge_duplication_hook (cgraph_2edge_ho void cgraph_remove_edge_duplication_hook (struct cgraph_2edge_hook_list *); struct cgraph_2node_hook_list *cgraph_add_node_duplication_hook (cgraph_2node_hook, void *); void cgraph_remove_node_duplication_hook (struct cgraph_2node_hook_list *); -void cgraph_materialize_all_clones (void); gimple cgraph_redirect_edge_call_stmt_to_callee (struct cgraph_edge *); bool cgraph_propagate_frequency (struct cgraph_node *node); /* In cgraphbuild.c */ unsigned int rebuild_cgraph_edges (void); void cgraph_rebuild_references (void); -void reset_inline_failed (struct cgraph_node *); int compute_call_stmt_bb_frequency (tree, basic_block bb); /* In ipa.c */ diff --git a/gcc/cgraphbuild.c b/gcc/cgraphbuild.c index 8bf8830..d7ef7f9 100644 --- a/gcc/cgraphbuild.c +++ b/gcc/cgraphbuild.c @@ -200,20 +200,6 @@ record_eh_tables (struct cgraph_node *node, struct function *fun) } } -/* Reset inlining information of all incoming call edges of NODE. */ - -void -reset_inline_failed (struct cgraph_node *node) -{ - struct cgraph_edge *e; - - for (e = node->callers; e; e = e->next_caller) - { - e->callee->global.inlined_to = NULL; - initialize_inline_failed (e); - } -} - /* Computes the frequency of the call statement so that it can be stored in cgraph_edge. BB is the basic block of the call statement. */ int diff --git a/gcc/cgraphunit.c b/gcc/cgraphunit.c index 516f187..9e5820f 100644 --- a/gcc/cgraphunit.c +++ b/gcc/cgraphunit.c @@ -1294,59 +1294,6 @@ handle_alias_pairs (void) } -/* Analyze the whole compilation unit once it is parsed completely. */ - -void -cgraph_finalize_compilation_unit (void) -{ - timevar_push (TV_CGRAPH); - - /* If LTO is enabled, initialize the streamer hooks needed by GIMPLE. */ - if (flag_lto) - lto_streamer_hooks_init (); - - /* If we're here there's no current function anymore. Some frontends - are lazy in clearing these. */ - current_function_decl = NULL; - set_cfun (NULL); - - /* Do not skip analyzing the functions if there were errors, we - miss diagnostics for following functions otherwise. */ - - /* Emit size functions we didn't inline. */ - finalize_size_functions (); - - /* Mark alias targets necessary and emit diagnostics. */ - finish_aliases_1 (); - handle_alias_pairs (); - - if (!quiet_flag) - { - fprintf (stderr, "\nAnalyzing compilation unit\n"); - fflush (stderr); - } - - if (flag_dump_passes) - dump_passes (); - - /* Gimplify and lower all functions, compute reachability and - remove unreachable nodes. */ - cgraph_analyze_functions (); - - /* Mark alias targets necessary and emit diagnostics. */ - finish_aliases_1 (); - handle_alias_pairs (); - - /* Gimplify and lower thunks. */ - cgraph_analyze_functions (); - - /* Finally drive the pass manager. */ - cgraph_optimize (); - - timevar_pop (TV_CGRAPH); -} - - /* Figure out what functions we want to assemble. */ static void @@ -2134,124 +2081,6 @@ output_weakrefs (void) } -/* Perform simple optimizations based on callgraph. */ - -void -cgraph_optimize (void) -{ - if (seen_error ()) - return; - -#ifdef ENABLE_CHECKING - verify_cgraph (); -#endif - - /* Frontend may output common variables after the unit has been finalized. - It is safe to deal with them here as they are always zero initialized. */ - varpool_analyze_pending_decls (); - - timevar_push (TV_CGRAPHOPT); - if (pre_ipa_mem_report) - { - fprintf (stderr, "Memory consumption before IPA\n"); - dump_memory_report (false); - } - if (!quiet_flag) - fprintf (stderr, "Performing interprocedural optimizations\n"); - cgraph_state = CGRAPH_STATE_IPA; - - /* Don't run the IPA passes if there was any error or sorry messages. */ - if (!seen_error ()) - ipa_passes (); - - /* Do nothing else if any IPA pass found errors or if we are just streaming LTO. */ - if (seen_error () - || (!in_lto_p && flag_lto && !flag_fat_lto_objects)) - { - timevar_pop (TV_CGRAPHOPT); - return; - } - - /* This pass remove bodies of extern inline functions we never inlined. - Do this later so other IPA passes see what is really going on. */ - cgraph_remove_unreachable_nodes (false, dump_file); - cgraph_global_info_ready = true; - if (cgraph_dump_file) - { - fprintf (cgraph_dump_file, "Optimized "); - dump_cgraph (cgraph_dump_file); - dump_varpool (cgraph_dump_file); - } - if (post_ipa_mem_report) - { - fprintf (stderr, "Memory consumption after IPA\n"); - dump_memory_report (false); - } - timevar_pop (TV_CGRAPHOPT); - - /* Output everything. */ - (*debug_hooks->assembly_start) (); - if (!quiet_flag) - fprintf (stderr, "Assembling functions:\n"); -#ifdef ENABLE_CHECKING - verify_cgraph (); -#endif - - cgraph_materialize_all_clones (); - bitmap_obstack_initialize (NULL); - execute_ipa_pass_list (all_late_ipa_passes); - cgraph_remove_unreachable_nodes (true, dump_file); -#ifdef ENABLE_CHECKING - verify_cgraph (); -#endif - bitmap_obstack_release (NULL); - cgraph_mark_functions_to_output (); - output_weakrefs (); - - cgraph_state = CGRAPH_STATE_EXPANSION; - if (!flag_toplevel_reorder) - cgraph_output_in_order (); - else - { - cgraph_output_pending_asms (); - - cgraph_expand_all_functions (); - varpool_remove_unreferenced_decls (); - - varpool_assemble_pending_decls (); - } - - cgraph_process_new_functions (); - cgraph_state = CGRAPH_STATE_FINISHED; - - if (cgraph_dump_file) - { - fprintf (cgraph_dump_file, "\nFinal "); - dump_cgraph (cgraph_dump_file); - dump_varpool (cgraph_dump_file); - } -#ifdef ENABLE_CHECKING - verify_cgraph (); - /* Double check that all inline clones are gone and that all - function bodies have been released from memory. */ - if (!seen_error ()) - { - struct cgraph_node *node; - bool error_found = false; - - for (node = cgraph_nodes; node; node = node->next) - if (node->analyzed - && (node->global.inlined_to - || gimple_has_body_p (node->decl))) - { - error_found = true; - dump_cgraph_node (stderr, node); - } - if (error_found) - internal_error ("nodes with unreleased memory found"); - } -#endif -} void init_cgraph (void) @@ -2549,7 +2378,7 @@ cgraph_redirect_edge_call_stmt_to_callee (struct cgraph_edge *e) bring all functions to memory prior compilation, but current WHOPR implementation does that and it is is bit easier to keep everything right in this order. */ -void +static void cgraph_materialize_all_clones (void) { struct cgraph_node *node; @@ -2628,4 +2457,178 @@ cgraph_materialize_all_clones (void) cgraph_remove_unreachable_nodes (false, cgraph_dump_file); } + +/* Perform simple optimizations based on callgraph. */ + +void +cgraph_optimize (void) +{ + if (seen_error ()) + return; + +#ifdef ENABLE_CHECKING + verify_cgraph (); +#endif + + /* Frontend may output common variables after the unit has been finalized. + It is safe to deal with them here as they are always zero initialized. */ + varpool_analyze_pending_decls (); + + timevar_push (TV_CGRAPHOPT); + if (pre_ipa_mem_report) + { + fprintf (stderr, "Memory consumption before IPA\n"); + dump_memory_report (false); + } + if (!quiet_flag) + fprintf (stderr, "Performing interprocedural optimizations\n"); + cgraph_state = CGRAPH_STATE_IPA; + + /* Don't run the IPA passes if there was any error or sorry messages. */ + if (!seen_error ()) + ipa_passes (); + + /* Do nothing else if any IPA pass found errors or if we are just streaming LTO. */ + if (seen_error () + || (!in_lto_p && flag_lto && !flag_fat_lto_objects)) + { + timevar_pop (TV_CGRAPHOPT); + return; + } + + /* This pass remove bodies of extern inline functions we never inlined. + Do this later so other IPA passes see what is really going on. */ + cgraph_remove_unreachable_nodes (false, dump_file); + cgraph_global_info_ready = true; + if (cgraph_dump_file) + { + fprintf (cgraph_dump_file, "Optimized "); + dump_cgraph (cgraph_dump_file); + dump_varpool (cgraph_dump_file); + } + if (post_ipa_mem_report) + { + fprintf (stderr, "Memory consumption after IPA\n"); + dump_memory_report (false); + } + timevar_pop (TV_CGRAPHOPT); + + /* Output everything. */ + (*debug_hooks->assembly_start) (); + if (!quiet_flag) + fprintf (stderr, "Assembling functions:\n"); +#ifdef ENABLE_CHECKING + verify_cgraph (); +#endif + + cgraph_materialize_all_clones (); + bitmap_obstack_initialize (NULL); + execute_ipa_pass_list (all_late_ipa_passes); + cgraph_remove_unreachable_nodes (true, dump_file); +#ifdef ENABLE_CHECKING + verify_cgraph (); +#endif + bitmap_obstack_release (NULL); + cgraph_mark_functions_to_output (); + output_weakrefs (); + + cgraph_state = CGRAPH_STATE_EXPANSION; + if (!flag_toplevel_reorder) + cgraph_output_in_order (); + else + { + cgraph_output_pending_asms (); + + cgraph_expand_all_functions (); + varpool_remove_unreferenced_decls (); + + varpool_assemble_pending_decls (); + } + + cgraph_process_new_functions (); + cgraph_state = CGRAPH_STATE_FINISHED; + + if (cgraph_dump_file) + { + fprintf (cgraph_dump_file, "\nFinal "); + dump_cgraph (cgraph_dump_file); + dump_varpool (cgraph_dump_file); + } +#ifdef ENABLE_CHECKING + verify_cgraph (); + /* Double check that all inline clones are gone and that all + function bodies have been released from memory. */ + if (!seen_error ()) + { + struct cgraph_node *node; + bool error_found = false; + + for (node = cgraph_nodes; node; node = node->next) + if (node->analyzed + && (node->global.inlined_to + || gimple_has_body_p (node->decl))) + { + error_found = true; + dump_cgraph_node (stderr, node); + } + if (error_found) + internal_error ("nodes with unreleased memory found"); + } +#endif +} + + +/* Analyze the whole compilation unit once it is parsed completely. */ + +void +cgraph_finalize_compilation_unit (void) +{ + timevar_push (TV_CGRAPH); + + /* If LTO is enabled, initialize the streamer hooks needed by GIMPLE. */ + if (flag_lto) + lto_streamer_hooks_init (); + + /* If we're here there's no current function anymore. Some frontends + are lazy in clearing these. */ + current_function_decl = NULL; + set_cfun (NULL); + + /* Do not skip analyzing the functions if there were errors, we + miss diagnostics for following functions otherwise. */ + + /* Emit size functions we didn't inline. */ + finalize_size_functions (); + + /* Mark alias targets necessary and emit diagnostics. */ + finish_aliases_1 (); + handle_alias_pairs (); + + if (!quiet_flag) + { + fprintf (stderr, "\nAnalyzing compilation unit\n"); + fflush (stderr); + } + + if (flag_dump_passes) + dump_passes (); + + /* Gimplify and lower all functions, compute reachability and + remove unreachable nodes. */ + cgraph_analyze_functions (); + + /* Mark alias targets necessary and emit diagnostics. */ + finish_aliases_1 (); + handle_alias_pairs (); + + /* Gimplify and lower thunks. */ + cgraph_analyze_functions (); + + /* Finally drive the pass manager. */ + cgraph_optimize (); + + timevar_pop (TV_CGRAPH); +} + + #include "gt-cgraphunit.h" diff --git a/gcc/combine.c b/gcc/combine.c index e3c8209..de3afcc 100644 --- a/gcc/combine.c +++ b/gcc/combine.c @@ -9674,31 +9674,6 @@ reg_num_sign_bit_copies_for_combine (const_rtx x, enum machine_mode mode, return NULL; } -/* Return the number of "extended" bits there are in X, when interpreted - as a quantity in MODE whose signedness is indicated by UNSIGNEDP. For - unsigned quantities, this is the number of high-order zero bits. - For signed quantities, this is the number of copies of the sign bit - minus 1. In both case, this function returns the number of "spare" - bits. For example, if two quantities for which this function returns - at least 1 are added, the addition is known not to overflow. - - This function will always return 0 unless called during combine, which - implies that it must be called from a define_split. */ - -unsigned int -extended_count (const_rtx x, enum machine_mode mode, int unsignedp) -{ - if (nonzero_sign_valid == 0) - return 0; - - return (unsignedp - ? (HWI_COMPUTABLE_MODE_P (mode) - ? (unsigned int) (GET_MODE_PRECISION (mode) - 1 - - floor_log2 (nonzero_bits (x, mode))) - : 0) - : num_sign_bit_copies (x, mode) - 1); -} - /* This function is called from `simplify_shift_const' to merge two outer operations. Specifically, we have already found that we need to perform operation *POP0 with constant *PCONST0 at the outermost @@ -13912,7 +13887,7 @@ unmentioned_reg_p (rtx equiv, rtx expr) return for_each_rtx (&equiv, unmentioned_reg_p_1, expr); } -void +DEBUG_FUNCTION void dump_combine_stats (FILE *file) { fprintf @@ -653,7 +653,7 @@ fixed_base_plus_p (rtx x) /* Dump the expressions in the equivalence class indicated by CLASSP. This function is used only for debugging. */ -void +DEBUG_FUNCTION void dump_class (struct table_elt *classp) { struct table_elt *elt; @@ -6519,7 +6519,7 @@ cse_extended_basic_block (struct cse_basic_block_data *ebb_data) Return 1 if the CFG should be cleaned up because it has been modified. Return 0 otherwise. */ -int +static int cse_main (rtx f ATTRIBUTE_UNUSED, int nregs) { struct cse_basic_block_data ebb_data; @@ -44,7 +44,6 @@ along with GCC; see the file COPYING3. If not see #include "insn-config.h" #include "expr.h" #include "recog.h" -#include "dse.h" #include "optabs.h" #include "dbgcnt.h" #include "target.h" @@ -614,7 +613,6 @@ static bitmap kill_on_calls; static unsigned int current_position; -static bool gate_dse (void); static bool gate_dse1 (void); static bool gate_dse2 (void); @@ -625,28 +623,6 @@ static bool gate_dse2 (void); Initialization. ----------------------------------------------------------------------------*/ -/* Hashtable callbacks for maintaining the "bases" field of - store_group_info, given that the addresses are function invariants. */ - -static int -clear_alias_mode_eq (const void *p1, const void *p2) -{ - const struct clear_alias_mode_holder * h1 - = (const struct clear_alias_mode_holder *) p1; - const struct clear_alias_mode_holder * h2 - = (const struct clear_alias_mode_holder *) p2; - return h1->alias_set == h2->alias_set; -} - - -static hashval_t -clear_alias_mode_hash (const void *p) -{ - const struct clear_alias_mode_holder *holder - = (const struct clear_alias_mode_holder *) p; - return holder->alias_set; -} - /* Find the entry associated with ALIAS_SET. */ @@ -3044,85 +3020,6 @@ dse_step2_spill (void) ----------------------------------------------------------------------------*/ -/* Note that this is NOT a general purpose function. Any mem that has - an alias set registered here expected to be COMPLETELY unaliased: - i.e it's addresses are not and need not be examined. - - It is known that all references to this address will have this - alias set and there are NO other references to this address in the - function. - - Currently the only place that is known to be clean enough to use - this interface is the code that assigns the spill locations. - - All of the mems that have alias_sets registered are subjected to a - very powerful form of dse where function calls, volatile reads and - writes, and reads from random location are not taken into account. - - It is also assumed that these locations go dead when the function - returns. This assumption could be relaxed if there were found to - be places that this assumption was not correct. - - The MODE is passed in and saved. The mode of each load or store to - a mem with ALIAS_SET is checked against MEM. If the size of that - load or store is different from MODE, processing is halted on this - alias set. For the vast majority of aliases sets, all of the loads - and stores will use the same mode. But vectors are treated - differently: the alias set is established for the entire vector, - but reload will insert loads and stores for individual elements and - we do not necessarily have the information to track those separate - elements. So when we see a mode mismatch, we just bail. */ - - -void -dse_record_singleton_alias_set (alias_set_type alias_set, - enum machine_mode mode) -{ - struct clear_alias_mode_holder tmp_holder; - struct clear_alias_mode_holder *entry; - void **slot; - - /* If we are not going to run dse, we need to return now or there - will be problems with allocating the bitmaps. */ - if ((!gate_dse()) || !alias_set) - return; - - if (!clear_alias_sets) - { - clear_alias_sets = BITMAP_ALLOC (NULL); - disqualified_clear_alias_sets = BITMAP_ALLOC (NULL); - clear_alias_mode_table = htab_create (11, clear_alias_mode_hash, - clear_alias_mode_eq, NULL); - clear_alias_mode_pool = create_alloc_pool ("clear_alias_mode_pool", - sizeof (struct clear_alias_mode_holder), 100); - } - - bitmap_set_bit (clear_alias_sets, alias_set); - - tmp_holder.alias_set = alias_set; - - slot = htab_find_slot (clear_alias_mode_table, &tmp_holder, INSERT); - gcc_assert (*slot == NULL); - - *slot = entry = - (struct clear_alias_mode_holder *) pool_alloc (clear_alias_mode_pool); - entry->alias_set = alias_set; - entry->mode = mode; -} - - -/* Remove ALIAS_SET from the sets of stack slots being considered. */ - -void -dse_invalidate_singleton_alias_set (alias_set_type alias_set) -{ - if ((!gate_dse()) || !alias_set) - return; - - bitmap_clear_bit (clear_alias_sets, alias_set); -} - - /* Look up the bitmap index for OFFSET in GROUP_INFO. If it is not there, return 0. */ @@ -4015,12 +3912,6 @@ rest_of_handle_dse (void) } static bool -gate_dse (void) -{ - return gate_dse1 () || gate_dse2 (); -} - -static bool gate_dse1 (void) { return optimize > 0 && flag_dse diff --git a/gcc/dse.h b/gcc/dse.h deleted file mode 100644 index dca6ea0..0000000 --- a/gcc/dse.h +++ /dev/null @@ -1,30 +0,0 @@ -/* RTL dead store elimination. - Copyright (C) 2007, 2010 Free Software Foundation, Inc. - - Contributed by Richard Sandiford <rsandifor@codesourcery.com> - and Kenneth Zadeck <zadeck@naturalbridge.com> - -This file is part of GCC. - -GCC is free software; you can redistribute it and/or modify it under -the terms of the GNU General Public License as published by the Free -Software Foundation; either version 3, or (at your option) any later -version. - -GCC is distributed in the hope that it will be useful, but WITHOUT ANY -WARRANTY; without even the implied warranty of MERCHANTABILITY or -FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - for more details. - -You should have received a copy of the GNU General Public License -along with GCC; see the file COPYING3. If not see -<http://www.gnu.org/licenses/>. */ - -#ifndef GCC_DSE_H -#define GCC_DSE_H - -extern void dse_record_singleton_alias_set (alias_set_type, enum machine_mode); -extern void dse_invalidate_singleton_alias_set (alias_set_type); - -#endif /* GCC_DSE_H */ - @@ -2373,7 +2373,6 @@ extern int rtx_to_tree_code (enum rtx_code); /* In cse.c */ extern int delete_trivially_dead_insns (rtx, int); -extern int cse_main (rtx, int); extern int exp_equiv_p (const_rtx, const_rtx, int, bool); extern unsigned hash_rtx (const_rtx x, enum machine_mode, int *, int *, bool); @@ -2456,7 +2455,6 @@ extern bool validate_subreg (enum machine_mode, enum machine_mode, const_rtx, unsigned int); /* In combine.c */ -extern unsigned int extended_count (const_rtx, enum machine_mode, int); extern rtx remove_death (unsigned int, rtx); extern void dump_combine_stats (FILE *); extern void dump_combine_total_stats (FILE *); |