aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorRichard Guenther <rguenther@suse.de>2012-04-10 11:56:05 +0000
committerRichard Biener <rguenth@gcc.gnu.org>2012-04-10 11:56:05 +0000
commit0878843fd50d1ac01305b963a5b4c52732694f01 (patch)
tree42226e862a782231da6620d3afb31c4d4f6bec51 /gcc
parentc0d942d2117b785d768c5f2ab2813e4781e29e43 (diff)
downloadgcc-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/ChangeLog11
-rw-r--r--gcc/Makefile.in4
-rw-r--r--gcc/cgraph.c2
-rw-r--r--gcc/cgraph.h1
-rw-r--r--gcc/cgraphunit.c92
-rw-r--r--gcc/toplev.h1
-rw-r--r--gcc/tree-optimize.c88
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 (&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. */
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 (&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);
-}