Commit 0878843f by Richard Guenther Committed by Richard Biener

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
parent c0d942d2
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> 2012-04-10 Ulrich Weigand <ulrich.weigand@linaro.org>
PR tree-optimization/52870 PR tree-optimization/52870
......
...@@ -2556,7 +2556,7 @@ tree-optimize.o : tree-optimize.c $(TREE_FLOW_H) $(CONFIG_H) $(SYSTEM_H) \ ...@@ -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 \ coretypes.h $(TREE_DUMP_H) toplev.h $(DIAGNOSTIC_CORE_H) $(FUNCTION_H) langhooks.h \
$(FLAGS_H) $(CGRAPH_H) $(PLUGIN_H) \ $(FLAGS_H) $(CGRAPH_H) $(PLUGIN_H) \
$(TREE_INLINE_H) $(GGC_H) graph.h $(CGRAPH_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) \ gimplify.o : gimplify.c $(CONFIG_H) $(SYSTEM_H) $(TREE_H) $(GIMPLE_H) \
$(DIAGNOSTIC_H) $(GIMPLE_H) $(TREE_INLINE_H) langhooks.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) \ ...@@ -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) \ $(FIBHEAP_H) output.h $(PARAMS_H) $(RTL_H) $(TIMEVAR_H) $(IPA_PROP_H) \
gt-cgraphunit.h tree-iterator.h $(COVERAGE_H) $(TREE_DUMP_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) \ 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) \ 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_H) langhooks.h $(CGRAPH_H) intl.h pointer-set.h $(GIMPLE_H) \
$(TREE_FLOW_H) $(TREE_PASS_H) $(IPA_UTILS_H) $(EXCEPT_H) \ $(TREE_FLOW_H) $(TREE_PASS_H) $(IPA_UTILS_H) $(EXCEPT_H) \
......
...@@ -2466,7 +2466,7 @@ cgraph_add_new_function (tree fndecl, bool lowered) ...@@ -2466,7 +2466,7 @@ cgraph_add_new_function (tree fndecl, bool lowered)
if (!gimple_in_ssa_p (DECL_STRUCT_FUNCTION (fndecl))) if (!gimple_in_ssa_p (DECL_STRUCT_FUNCTION (fndecl)))
execute_pass_list (pass_early_local_passes.pass.sub); execute_pass_list (pass_early_local_passes.pass.sub);
bitmap_obstack_release (NULL); bitmap_obstack_release (NULL);
tree_rest_of_compilation (fndecl); tree_rest_of_compilation (node);
pop_cfun (); pop_cfun ();
current_function_decl = NULL; current_function_decl = NULL;
break; break;
......
...@@ -565,6 +565,7 @@ void cgraph_mark_if_needed (tree); ...@@ -565,6 +565,7 @@ void cgraph_mark_if_needed (tree);
void cgraph_analyze_function (struct cgraph_node *); void cgraph_analyze_function (struct cgraph_node *);
void cgraph_finalize_compilation_unit (void); void cgraph_finalize_compilation_unit (void);
void cgraph_optimize (void); void cgraph_optimize (void);
void tree_rest_of_compilation (struct cgraph_node *);
void cgraph_mark_needed_node (struct cgraph_node *); void cgraph_mark_needed_node (struct cgraph_node *);
void cgraph_mark_address_taken_node (struct cgraph_node *); void cgraph_mark_address_taken_node (struct cgraph_node *);
void cgraph_mark_reachable_node (struct cgraph_node *); void cgraph_mark_reachable_node (struct cgraph_node *);
......
...@@ -111,6 +111,7 @@ along with GCC; see the file COPYING3. If not see ...@@ -111,6 +111,7 @@ along with GCC; see the file COPYING3. If not see
#include "coretypes.h" #include "coretypes.h"
#include "tm.h" #include "tm.h"
#include "tree.h" #include "tree.h"
#include "output.h"
#include "rtl.h" #include "rtl.h"
#include "tree-flow.h" #include "tree-flow.h"
#include "tree-inline.h" #include "tree-inline.h"
...@@ -141,6 +142,7 @@ along with GCC; see the file COPYING3. If not see ...@@ -141,6 +142,7 @@ along with GCC; see the file COPYING3. If not see
#include "ipa-inline.h" #include "ipa-inline.h"
#include "ipa-utils.h" #include "ipa-utils.h"
#include "lto-streamer.h" #include "lto-streamer.h"
#include "regset.h" /* FIXME: For reg_obstack. */
static void cgraph_expand_all_functions (void); static void cgraph_expand_all_functions (void);
static void cgraph_mark_functions_to_output (void); static void cgraph_mark_functions_to_output (void);
...@@ -1768,6 +1770,94 @@ assemble_thunks_and_aliases (struct cgraph_node *node) ...@@ -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 (&reg_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 (&reg_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. */ /* Expand function specified by NODE. */
static void static void
...@@ -1783,7 +1873,7 @@ cgraph_expand_function (struct cgraph_node *node) ...@@ -1783,7 +1873,7 @@ cgraph_expand_function (struct cgraph_node *node)
gcc_assert (node->lowered); gcc_assert (node->lowered);
/* Generate RTL for the body of DECL. */ /* 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. */ /* Make sure that BE didn't give up on compiling. */
gcc_assert (TREE_ASM_WRITTEN (decl)); gcc_assert (TREE_ASM_WRITTEN (decl));
......
...@@ -29,7 +29,6 @@ extern unsigned int save_decoded_options_count; ...@@ -29,7 +29,6 @@ extern unsigned int save_decoded_options_count;
extern int toplev_main (int, char **); extern int toplev_main (int, char **);
extern void rest_of_decl_compilation (tree, int, int); extern void rest_of_decl_compilation (tree, int, int);
extern void rest_of_type_compilation (tree, int); extern void rest_of_type_compilation (tree, int);
extern void tree_rest_of_compilation (tree);
extern void init_optimization_passes (void); extern void init_optimization_passes (void);
extern void finish_optimization_passes (void); extern void finish_optimization_passes (void);
extern bool enable_rtl_dump_file (void); extern bool enable_rtl_dump_file (void);
......
...@@ -45,7 +45,6 @@ along with GCC; see the file COPYING3. If not see ...@@ -45,7 +45,6 @@ along with GCC; see the file COPYING3. If not see
#include "cfgloop.h" #include "cfgloop.h"
#include "except.h" #include "except.h"
#include "plugin.h" #include "plugin.h"
#include "regset.h" /* FIXME: For reg_obstack. */
/* Gate: execute, or not, all of the non-trivial optimizations. */ /* Gate: execute, or not, all of the non-trivial optimizations. */
...@@ -366,90 +365,3 @@ struct gimple_opt_pass pass_init_datastructures = ...@@ -366,90 +365,3 @@ struct gimple_opt_pass pass_init_datastructures =
0 /* todo_flags_finish */ 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 (&reg_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 (&reg_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);
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment