aboutsummaryrefslogtreecommitdiffstats
path: root/gcc-4.6/gcc/tree-ssa.c
diff options
context:
space:
mode:
Diffstat (limited to 'gcc-4.6/gcc/tree-ssa.c')
-rw-r--r--gcc-4.6/gcc/tree-ssa.c6
1 files changed, 5 insertions, 1 deletions
diff --git a/gcc-4.6/gcc/tree-ssa.c b/gcc-4.6/gcc/tree-ssa.c
index 3d4a81f..9c1e31c 100644
--- a/gcc-4.6/gcc/tree-ssa.c
+++ b/gcc-4.6/gcc/tree-ssa.c
@@ -44,6 +44,7 @@ along with GCC; see the file COPYING3. If not see
#include "tree-pass.h"
#include "diagnostic-core.h"
#include "l-ipo.h"
+#include "cfgloop.h"
/* Pointer map of variable mappings, keyed by edge. */
static struct pointer_map_t *edge_var_maps;
@@ -2228,7 +2229,10 @@ execute_update_addresses_taken (void)
}
/* Update SSA form here, we are called as non-pass as well. */
- update_ssa (TODO_update_ssa);
+ if (number_of_loops () > 1 && loops_state_satisfies_p (LOOP_CLOSED_SSA))
+ rewrite_into_loop_closed_ssa (NULL, TODO_update_ssa);
+ else
+ update_ssa (TODO_update_ssa);
}
BITMAP_FREE (not_reg_needs);