aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorRichard Henderson <rth@redhat.com>2010-07-19 07:42:50 -0700
committerRichard Henderson <rth@gcc.gnu.org>2010-07-19 07:42:50 -0700
commit157be8f67b0ff8906b93ca4b7ee178f2e44fa725 (patch)
tree87cca400d98eb86595a987dbae508b5c25a54f20 /gcc
parentca90e7f6c12ddcf9f7ac890d07e168b0f2f21f1a (diff)
downloadgcc-157be8f67b0ff8906b93ca4b7ee178f2e44fa725.zip
gcc-157be8f67b0ff8906b93ca4b7ee178f2e44fa725.tar.gz
gcc-157be8f67b0ff8906b93ca4b7ee178f2e44fa725.tar.bz2
Reliably change cgraph_state to SSA form.
From-SVN: r162306
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog8
-rw-r--r--gcc/tree-optimize.c30
2 files changed, 24 insertions, 14 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index bac660b..118ada7 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,10 @@
+2010-07-19 Richard Henderson <rth@redhat.com>
+
+ * tree-optimize.c (execute_all_early_local_passes): New. Change
+ cgraph_state here ...
+ (execute_early_local_optimizations): ... not here. Remove.
+ (pass_early_local_passes, pass_all_early_optimizations): Update.
+
2010-07-19 Bernd Schmidt <bernds@codesourcery.com>
* postreload.c (reload_combine_closest_single_use): Ignore the
@@ -11,6 +18,7 @@
(reload_combine): Use control_flow_insn_p rather than JUMP_P.
2010-07-19 Bingfeng Mei <bmei@broadcom.com>
+
* ddg.c (create_ddg): Exclude nodes of debug_insn in counting nodes
of a loop.
* loop-doloop.c (doloop_condition_get): Skip possible debug_insn.
diff --git a/gcc/tree-optimize.c b/gcc/tree-optimize.c
index e736b4f..5df3fdb 100644
--- a/gcc/tree-optimize.c
+++ b/gcc/tree-optimize.c
@@ -87,13 +87,27 @@ gate_all_early_local_passes (void)
return (!seen_error () && !in_lto_p);
}
+static unsigned int
+execute_all_early_local_passes (void)
+{
+ /* Once this pass (and its sub-passes) are complete, all functions
+ will be in SSA form. Technically this state change is happening
+ a tad early, since the sub-passes have not yet run, but since
+ none of the sub-passes are IPA passes and do not create new
+ functions, this is ok. We're setting this value for the benefit
+ of IPA passes that follow. */
+ if (cgraph_state < CGRAPH_STATE_IPA_SSA)
+ cgraph_state = CGRAPH_STATE_IPA_SSA;
+ return 0;
+}
+
struct simple_ipa_opt_pass pass_early_local_passes =
{
{
SIMPLE_IPA_PASS,
"early_local_cleanups", /* name */
gate_all_early_local_passes, /* gate */
- NULL, /* execute */
+ execute_all_early_local_passes, /* execute */
NULL, /* sub */
NULL, /* next */
0, /* static_pass_number */
@@ -106,18 +120,6 @@ struct simple_ipa_opt_pass pass_early_local_passes =
}
};
-static unsigned int
-execute_early_local_optimizations (void)
-{
- /* First time we start with early optimization we need to advance
- cgraph state so newly inserted functions are also early optimized.
- However we execute early local optimizations for lately inserted
- functions, in that case don't reset cgraph state back to IPA_SSA. */
- if (cgraph_state < CGRAPH_STATE_IPA_SSA)
- cgraph_state = CGRAPH_STATE_IPA_SSA;
- return 0;
-}
-
/* Gate: execute, or not, all of the non-trivial optimizations. */
static bool
@@ -134,7 +136,7 @@ struct gimple_opt_pass pass_all_early_optimizations =
GIMPLE_PASS,
"early_optimizations", /* name */
gate_all_early_optimizations, /* gate */
- execute_early_local_optimizations, /* execute */
+ NULL, /* execute */
NULL, /* sub */
NULL, /* next */
0, /* static_pass_number */