diff options
author | Richard Guenther <rguenther@suse.de> | 2012-04-10 11:56:05 +0000 |
---|---|---|
committer | Richard Biener <rguenth@gcc.gnu.org> | 2012-04-10 11:56:05 +0000 |
commit | 0878843fd50d1ac01305b963a5b4c52732694f01 (patch) | |
tree | 42226e862a782231da6620d3afb31c4d4f6bec51 /gcc | |
parent | c0d942d2117b785d768c5f2ab2813e4781e29e43 (diff) | |
download | gcc-0878843fd50d1ac01305b963a5b4c52732694f01.zip gcc-0878843fd50d1ac01305b963a5b4c52732694f01.tar.gz gcc-0878843fd50d1ac01305b963a5b4c52732694f01.tar.bz2 |
toplev.h (tree_rest_of_compilation): Remove.
2012-04-10 Richard Guenther <rguenther@suse.de>
* toplev.h (tree_rest_of_compilation): Remove.
* tree-optimize.c (tree_rest_of_compilation): Likewise.
* cgraph.h (tree_rest_of_compilation): Declare.
* tree-optimize.c (tree_rest_of_compilation): Move ...
* cgraphunit.c (tree_rest_of_compilation): ... here.
* cgraph.c (cgraph_add_new_function): Adjust.
* Makefile.in (tree-optimize.o): Adjust.
(cgraphunit.o): Likewise.
From-SVN: r186274
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 11 | ||||
-rw-r--r-- | gcc/Makefile.in | 4 | ||||
-rw-r--r-- | gcc/cgraph.c | 2 | ||||
-rw-r--r-- | gcc/cgraph.h | 1 | ||||
-rw-r--r-- | gcc/cgraphunit.c | 92 | ||||
-rw-r--r-- | gcc/toplev.h | 1 | ||||
-rw-r--r-- | gcc/tree-optimize.c | 88 |
7 files changed, 106 insertions, 93 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 64ff386..9628b8f 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,14 @@ +2012-04-10 Richard Guenther <rguenther@suse.de> + + * toplev.h (tree_rest_of_compilation): Remove. + * tree-optimize.c (tree_rest_of_compilation): Likewise. + * cgraph.h (tree_rest_of_compilation): Declare. + * tree-optimize.c (tree_rest_of_compilation): Move ... + * cgraphunit.c (tree_rest_of_compilation): ... here. + * cgraph.c (cgraph_add_new_function): Adjust. + * Makefile.in (tree-optimize.o): Adjust. + (cgraphunit.o): Likewise. + 2012-04-10 Ulrich Weigand <ulrich.weigand@linaro.org> PR tree-optimization/52870 diff --git a/gcc/Makefile.in b/gcc/Makefile.in index 9c4d4fe..726b9d3 100644 --- a/gcc/Makefile.in +++ b/gcc/Makefile.in @@ -2556,7 +2556,7 @@ tree-optimize.o : tree-optimize.c $(TREE_FLOW_H) $(CONFIG_H) $(SYSTEM_H) \ coretypes.h $(TREE_DUMP_H) toplev.h $(DIAGNOSTIC_CORE_H) $(FUNCTION_H) langhooks.h \ $(FLAGS_H) $(CGRAPH_H) $(PLUGIN_H) \ $(TREE_INLINE_H) $(GGC_H) graph.h $(CGRAPH_H) \ - $(TREE_PASS_H) $(CFGLOOP_H) $(EXCEPT_H) $(REGSET_H) + $(TREE_PASS_H) $(CFGLOOP_H) $(EXCEPT_H) gimplify.o : gimplify.c $(CONFIG_H) $(SYSTEM_H) $(TREE_H) $(GIMPLE_H) \ $(DIAGNOSTIC_H) $(GIMPLE_H) $(TREE_INLINE_H) langhooks.h \ @@ -2922,7 +2922,7 @@ cgraphunit.o : cgraphunit.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) \ $(FIBHEAP_H) output.h $(PARAMS_H) $(RTL_H) $(TIMEVAR_H) $(IPA_PROP_H) \ gt-cgraphunit.h tree-iterator.h $(COVERAGE_H) $(TREE_DUMP_H) \ tree-pretty-print.h gimple-pretty-print.h ipa-inline.h $(IPA_UTILS_H) \ - $(LTO_STREAMER_H) + $(LTO_STREAMER_H) output.h $(REGSET_H) cgraphbuild.o : cgraphbuild.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) \ $(TREE_H) langhooks.h $(CGRAPH_H) intl.h pointer-set.h $(GIMPLE_H) \ $(TREE_FLOW_H) $(TREE_PASS_H) $(IPA_UTILS_H) $(EXCEPT_H) \ diff --git a/gcc/cgraph.c b/gcc/cgraph.c index 8ab8a0b..6c31507 100644 --- a/gcc/cgraph.c +++ b/gcc/cgraph.c @@ -2466,7 +2466,7 @@ cgraph_add_new_function (tree fndecl, bool lowered) if (!gimple_in_ssa_p (DECL_STRUCT_FUNCTION (fndecl))) execute_pass_list (pass_early_local_passes.pass.sub); bitmap_obstack_release (NULL); - tree_rest_of_compilation (fndecl); + tree_rest_of_compilation (node); pop_cfun (); current_function_decl = NULL; break; diff --git a/gcc/cgraph.h b/gcc/cgraph.h index 7262859..dc085e1 100644 --- a/gcc/cgraph.h +++ b/gcc/cgraph.h @@ -565,6 +565,7 @@ void cgraph_mark_if_needed (tree); void cgraph_analyze_function (struct cgraph_node *); void cgraph_finalize_compilation_unit (void); void cgraph_optimize (void); +void tree_rest_of_compilation (struct cgraph_node *); void cgraph_mark_needed_node (struct cgraph_node *); void cgraph_mark_address_taken_node (struct cgraph_node *); void cgraph_mark_reachable_node (struct cgraph_node *); diff --git a/gcc/cgraphunit.c b/gcc/cgraphunit.c index 70ac1f3..9d2c46c 100644 --- a/gcc/cgraphunit.c +++ b/gcc/cgraphunit.c @@ -111,6 +111,7 @@ along with GCC; see the file COPYING3. If not see #include "coretypes.h" #include "tm.h" #include "tree.h" +#include "output.h" #include "rtl.h" #include "tree-flow.h" #include "tree-inline.h" @@ -141,6 +142,7 @@ along with GCC; see the file COPYING3. If not see #include "ipa-inline.h" #include "ipa-utils.h" #include "lto-streamer.h" +#include "regset.h" /* FIXME: For reg_obstack. */ static void cgraph_expand_all_functions (void); static void cgraph_mark_functions_to_output (void); @@ -1768,6 +1770,94 @@ assemble_thunks_and_aliases (struct cgraph_node *node) } } +/* For functions-as-trees languages, this performs all optimization and + compilation for FNDECL. */ + +void +tree_rest_of_compilation (struct cgraph_node *node) +{ + tree fndecl = node->decl; + location_t saved_loc; + + timevar_push (TV_REST_OF_COMPILATION); + + gcc_assert (cgraph_global_info_ready); + + /* Initialize the default bitmap obstack. */ + bitmap_obstack_initialize (NULL); + + /* Initialize the RTL code for the function. */ + current_function_decl = fndecl; + saved_loc = input_location; + input_location = DECL_SOURCE_LOCATION (fndecl); + init_function_start (fndecl); + + gimple_register_cfg_hooks (); + + bitmap_obstack_initialize (®_obstack); /* FIXME, only at RTL generation*/ + + execute_all_ipa_transforms (); + + /* Perform all tree transforms and optimizations. */ + + /* Signal the start of passes. */ + invoke_plugin_callbacks (PLUGIN_ALL_PASSES_START, NULL); + + execute_pass_list (all_passes); + + /* Signal the end of passes. */ + invoke_plugin_callbacks (PLUGIN_ALL_PASSES_END, NULL); + + bitmap_obstack_release (®_obstack); + + /* Release the default bitmap obstack. */ + bitmap_obstack_release (NULL); + + set_cfun (NULL); + + /* If requested, warn about function definitions where the function will + return a value (usually of some struct or union type) which itself will + take up a lot of stack space. */ + if (warn_larger_than && !DECL_EXTERNAL (fndecl) && TREE_TYPE (fndecl)) + { + tree ret_type = TREE_TYPE (TREE_TYPE (fndecl)); + + if (ret_type && TYPE_SIZE_UNIT (ret_type) + && TREE_CODE (TYPE_SIZE_UNIT (ret_type)) == INTEGER_CST + && 0 < compare_tree_int (TYPE_SIZE_UNIT (ret_type), + larger_than_size)) + { + unsigned int size_as_int + = TREE_INT_CST_LOW (TYPE_SIZE_UNIT (ret_type)); + + if (compare_tree_int (TYPE_SIZE_UNIT (ret_type), size_as_int) == 0) + warning (OPT_Wlarger_than_, "size of return value of %q+D is %u bytes", + fndecl, size_as_int); + else + warning (OPT_Wlarger_than_, "size of return value of %q+D is larger than %wd bytes", + fndecl, larger_than_size); + } + } + + gimple_set_body (fndecl, NULL); + if (DECL_STRUCT_FUNCTION (fndecl) == 0 + && !cgraph_get_node (fndecl)->origin) + { + /* Stop pointing to the local nodes about to be freed. + But DECL_INITIAL must remain nonzero so we know this + was an actual function definition. + For a nested function, this is done in c_pop_function_context. + If rest_of_compilation set this to 0, leave it 0. */ + if (DECL_INITIAL (fndecl) != 0) + DECL_INITIAL (fndecl) = error_mark_node; + } + + input_location = saved_loc; + + ggc_collect (); + timevar_pop (TV_REST_OF_COMPILATION); +} + /* Expand function specified by NODE. */ static void @@ -1783,7 +1873,7 @@ cgraph_expand_function (struct cgraph_node *node) gcc_assert (node->lowered); /* Generate RTL for the body of DECL. */ - tree_rest_of_compilation (decl); + tree_rest_of_compilation (node); /* Make sure that BE didn't give up on compiling. */ gcc_assert (TREE_ASM_WRITTEN (decl)); diff --git a/gcc/toplev.h b/gcc/toplev.h index 588cfdb..307fb64 100644 --- a/gcc/toplev.h +++ b/gcc/toplev.h @@ -29,7 +29,6 @@ extern unsigned int save_decoded_options_count; extern int toplev_main (int, char **); extern void rest_of_decl_compilation (tree, int, int); extern void rest_of_type_compilation (tree, int); -extern void tree_rest_of_compilation (tree); extern void init_optimization_passes (void); extern void finish_optimization_passes (void); extern bool enable_rtl_dump_file (void); diff --git a/gcc/tree-optimize.c b/gcc/tree-optimize.c index e59d1ad..7cd3ef3 100644 --- a/gcc/tree-optimize.c +++ b/gcc/tree-optimize.c @@ -45,7 +45,6 @@ along with GCC; see the file COPYING3. If not see #include "cfgloop.h" #include "except.h" #include "plugin.h" -#include "regset.h" /* FIXME: For reg_obstack. */ /* Gate: execute, or not, all of the non-trivial optimizations. */ @@ -366,90 +365,3 @@ struct gimple_opt_pass pass_init_datastructures = 0 /* todo_flags_finish */ } }; - -/* For functions-as-trees languages, this performs all optimization and - compilation for FNDECL. */ - -void -tree_rest_of_compilation (tree fndecl) -{ - location_t saved_loc; - - timevar_push (TV_REST_OF_COMPILATION); - - gcc_assert (cgraph_global_info_ready); - - /* Initialize the default bitmap obstack. */ - bitmap_obstack_initialize (NULL); - - /* Initialize the RTL code for the function. */ - current_function_decl = fndecl; - saved_loc = input_location; - input_location = DECL_SOURCE_LOCATION (fndecl); - init_function_start (fndecl); - - gimple_register_cfg_hooks (); - - bitmap_obstack_initialize (®_obstack); /* FIXME, only at RTL generation*/ - - execute_all_ipa_transforms (); - - /* Perform all tree transforms and optimizations. */ - - /* Signal the start of passes. */ - invoke_plugin_callbacks (PLUGIN_ALL_PASSES_START, NULL); - - execute_pass_list (all_passes); - - /* Signal the end of passes. */ - invoke_plugin_callbacks (PLUGIN_ALL_PASSES_END, NULL); - - bitmap_obstack_release (®_obstack); - - /* Release the default bitmap obstack. */ - bitmap_obstack_release (NULL); - - set_cfun (NULL); - - /* If requested, warn about function definitions where the function will - return a value (usually of some struct or union type) which itself will - take up a lot of stack space. */ - if (warn_larger_than && !DECL_EXTERNAL (fndecl) && TREE_TYPE (fndecl)) - { - tree ret_type = TREE_TYPE (TREE_TYPE (fndecl)); - - if (ret_type && TYPE_SIZE_UNIT (ret_type) - && TREE_CODE (TYPE_SIZE_UNIT (ret_type)) == INTEGER_CST - && 0 < compare_tree_int (TYPE_SIZE_UNIT (ret_type), - larger_than_size)) - { - unsigned int size_as_int - = TREE_INT_CST_LOW (TYPE_SIZE_UNIT (ret_type)); - - if (compare_tree_int (TYPE_SIZE_UNIT (ret_type), size_as_int) == 0) - warning (OPT_Wlarger_than_, "size of return value of %q+D is %u bytes", - fndecl, size_as_int); - else - warning (OPT_Wlarger_than_, "size of return value of %q+D is larger than %wd bytes", - fndecl, larger_than_size); - } - } - - gimple_set_body (fndecl, NULL); - if (DECL_STRUCT_FUNCTION (fndecl) == 0 - && !cgraph_get_node (fndecl)->origin) - { - /* Stop pointing to the local nodes about to be freed. - But DECL_INITIAL must remain nonzero so we know this - was an actual function definition. - For a nested function, this is done in c_pop_function_context. - If rest_of_compilation set this to 0, leave it 0. */ - if (DECL_INITIAL (fndecl) != 0) - DECL_INITIAL (fndecl) = error_mark_node; - } - - input_location = saved_loc; - - ggc_collect (); - timevar_pop (TV_REST_OF_COMPILATION); -} |