summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorrakdver <rakdver@138bc75d-0d04-0410-961f-82ee72b054a4>2007-05-27 17:23:11 +0000
committerrakdver <rakdver@138bc75d-0d04-0410-961f-82ee72b054a4>2007-05-27 17:23:11 +0000
commit7a3bf727e16b2e01cb8d18c050a1fdfe1175da2f (patch)
tree877b6d8a4f3bb9732c119f5030e7349e852d40a1
parentdfbbba6106fee07791f0313f926d1c3d46b3f7a0 (diff)
downloadgcc-7a3bf727e16b2e01cb8d18c050a1fdfe1175da2f.tar.gz
* tree-vrp.c (execute_vrp): Do not check whether current_loops == NULL.
* tree-chrec.c (evolution_function_is_invariant_rec_p): Ditto. * ifcvt.c (if_convert): Ditto. * tree-ssa-threadupdate.c (thread_block): Ditto. (thread_through_all_blocks): Ditto. Assert that loops were analysed. * tree-ssa-loop-manip.c (rewrite_into_loop_closed_ssa, verify_loop_closed_ssa): Check number_of_loops instead of current_loops. * predict.c (tree_estimate_probability): Ditto. * tree-if-conv.c (main_tree_if_conversion): Ditto. * tree-ssa-loop-ch.c (copy_loop_headers): Ditto. * modulo-sched.c (sms_schedule): Ditto. * tree-scalar-evolution.c (scev_const_prop): Ditto. (scev_finalize): Do not do anything if scev analysis was not initialized. * cfgloopanal.c (mark_irreducible_loops): Do not check whether current_loops == NULL. (mark_loop_exit_edges): Check number_of_loops instead of current_loops. * loop-init.c (loop_optimizer_init): Do not free current_loops when there are no loops. (loop_optimizer_finalize): Assert that loops were analyzed. (rtl_move_loop_invariants, rtl_unswitch, rtl_unroll_and_peel_loops, rtl_doloop): Check number_of_loops instead of current_loops. * tree-ssa-loop.c (tree_loop_optimizer_init): Do not check whether current_loops == NULL. (tree_ssa_loop_init, tree_ssa_loop_im, tree_ssa_loop_unswitch, gate_tree_vectorize tree_linear_transform, check_data_deps, tree_ssa_loop_ivcanon, tree_ssa_empty_loop, tree_ssa_loop_bounds, tree_complete_unroll, tree_ssa_loop_prefetch, tree_ssa_loop_ivopts): Check number_of_loops instead of current_loops. (tree_ssa_loop_done): Do not check whether current_loops == NULL. * tree-ssa-pre.c (fini_pre): Do not take do_fre argument. Always free loops if available. (execute_pre): Do not pass do_fre to fini_pre. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@125114 138bc75d-0d04-0410-961f-82ee72b054a4
-rw-r--r--gcc/ChangeLog36
-rw-r--r--gcc/cfgloopanal.c70
-rw-r--r--gcc/ifcvt.c7
-rw-r--r--gcc/loop-init.c19
-rw-r--r--gcc/modulo-sched.c7
-rw-r--r--gcc/predict.c6
-rw-r--r--gcc/tree-chrec.c8
-rw-r--r--gcc/tree-if-conv.c2
-rw-r--r--gcc/tree-scalar-evolution.c4
-rw-r--r--gcc/tree-ssa-loop-ch.c7
-rw-r--r--gcc/tree-ssa-loop-manip.c7
-rw-r--r--gcc/tree-ssa-loop.c30
-rw-r--r--gcc/tree-ssa-pre.c6
-rw-r--r--gcc/tree-ssa-threadupdate.c19
-rw-r--r--gcc/tree-vrp.c14
15 files changed, 124 insertions, 118 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 4df2a050d37..d162264a7c4 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,39 @@
+2007-05-27 Zdenek Dvorak <dvorakz@suse.cz>
+
+ * tree-vrp.c (execute_vrp): Do not check whether current_loops == NULL.
+ * tree-chrec.c (evolution_function_is_invariant_rec_p): Ditto.
+ * ifcvt.c (if_convert): Ditto.
+ * tree-ssa-threadupdate.c (thread_block): Ditto.
+ (thread_through_all_blocks): Ditto. Assert that loops were analysed.
+ * tree-ssa-loop-manip.c (rewrite_into_loop_closed_ssa,
+ verify_loop_closed_ssa): Check number_of_loops instead of current_loops.
+ * predict.c (tree_estimate_probability): Ditto.
+ * tree-if-conv.c (main_tree_if_conversion): Ditto.
+ * tree-ssa-loop-ch.c (copy_loop_headers): Ditto.
+ * modulo-sched.c (sms_schedule): Ditto.
+ * tree-scalar-evolution.c (scev_const_prop): Ditto.
+ (scev_finalize): Do not do anything if scev analysis was not
+ initialized.
+ * cfgloopanal.c (mark_irreducible_loops): Do not check whether
+ current_loops == NULL.
+ (mark_loop_exit_edges): Check number_of_loops instead of current_loops.
+ * loop-init.c (loop_optimizer_init): Do not free current_loops when
+ there are no loops.
+ (loop_optimizer_finalize): Assert that loops were analyzed.
+ (rtl_move_loop_invariants, rtl_unswitch, rtl_unroll_and_peel_loops,
+ rtl_doloop): Check number_of_loops instead of current_loops.
+ * tree-ssa-loop.c (tree_loop_optimizer_init): Do not check whether
+ current_loops == NULL.
+ (tree_ssa_loop_init, tree_ssa_loop_im, tree_ssa_loop_unswitch,
+ gate_tree_vectorize tree_linear_transform, check_data_deps,
+ tree_ssa_loop_ivcanon, tree_ssa_empty_loop, tree_ssa_loop_bounds,
+ tree_complete_unroll, tree_ssa_loop_prefetch, tree_ssa_loop_ivopts):
+ Check number_of_loops instead of current_loops.
+ (tree_ssa_loop_done): Do not check whether current_loops == NULL.
+ * tree-ssa-pre.c (fini_pre): Do not take do_fre argument. Always
+ free loops if available.
+ (execute_pre): Do not pass do_fre to fini_pre.
+
2007-05-27 Tobias Burnus <burnus@net-b.de>
PR middle-end/32083
diff --git a/gcc/cfgloopanal.c b/gcc/cfgloopanal.c
index 54d00ce574c..760542a0ba8 100644
--- a/gcc/cfgloopanal.c
+++ b/gcc/cfgloopanal.c
@@ -273,7 +273,7 @@ mark_irreducible_loops (void)
edge_iterator ei;
int i, src, dest;
struct graph *g;
- int num = current_loops ? number_of_loops () : 1;
+ int num = number_of_loops ();
int *queue1 = XNEWVEC (int, last_basic_block + num);
int *queue2 = XNEWVEC (int, last_basic_block + num);
int nq;
@@ -281,6 +281,8 @@ mark_irreducible_loops (void)
struct loop *cloop, *loop;
loop_iterator li;
+ gcc_assert (current_loops != NULL);
+
/* Reset the flags. */
FOR_BB_BETWEEN (act, ENTRY_BLOCK_PTR, EXIT_BLOCK_PTR, next_bb)
{
@@ -302,36 +304,32 @@ mark_irreducible_loops (void)
src = BB_REPR (act);
dest = BB_REPR (e->dest);
- if (current_loops)
- {
- /* Ignore latch edges. */
- if (e->dest->loop_father->header == e->dest
- && e->dest->loop_father->latch == act)
- continue;
+ /* Ignore latch edges. */
+ if (e->dest->loop_father->header == e->dest
+ && e->dest->loop_father->latch == act)
+ continue;
+
+ /* Edges inside a single loop should be left where they are. Edges
+ to subloop headers should lead to representative of the subloop,
+ but from the same place.
- /* Edges inside a single loop should be left where they are. Edges
- to subloop headers should lead to representative of the subloop,
- but from the same place.
-
- Edges exiting loops should lead from representative
- of the son of nearest common ancestor of the loops in that
- act lays. */
-
- if (e->dest->loop_father->header == e->dest)
- dest = LOOP_REPR (e->dest->loop_father);
-
- if (!flow_bb_inside_loop_p (act->loop_father, e->dest))
- {
- depth = 1 + loop_depth (find_common_loop (act->loop_father,
- e->dest->loop_father));
- if (depth == loop_depth (act->loop_father))
- cloop = act->loop_father;
- else
- cloop = VEC_index (loop_p, act->loop_father->superloops,
- depth);
-
- src = LOOP_REPR (cloop);
- }
+ Edges exiting loops should lead from representative
+ of the son of nearest common ancestor of the loops in that
+ act lays. */
+
+ if (e->dest->loop_father->header == e->dest)
+ dest = LOOP_REPR (e->dest->loop_father);
+
+ if (!flow_bb_inside_loop_p (act->loop_father, e->dest))
+ {
+ depth = 1 + loop_depth (find_common_loop (act->loop_father,
+ e->dest->loop_father));
+ if (depth == loop_depth (act->loop_father))
+ cloop = act->loop_father;
+ else
+ cloop = VEC_index (loop_p, act->loop_father->superloops, depth);
+
+ src = LOOP_REPR (cloop);
}
add_edge (g, src, dest, e);
@@ -347,12 +345,9 @@ mark_irreducible_loops (void)
queue1[nq++] = BB_REPR (act);
}
- if (current_loops)
+ FOR_EACH_LOOP (li, loop, 0)
{
- FOR_EACH_LOOP (li, loop, 0)
- {
- queue1[nq++] = LOOP_REPR (loop);
- }
+ queue1[nq++] = LOOP_REPR (loop);
}
dfs (g, queue1, nq, queue2, false);
for (i = 0; i < nq; i++)
@@ -366,8 +361,7 @@ mark_irreducible_loops (void)
free (queue1);
free (queue2);
- if (current_loops)
- current_loops->state |= LOOPS_HAVE_MARKED_IRREDUCIBLE_REGIONS;
+ current_loops->state |= LOOPS_HAVE_MARKED_IRREDUCIBLE_REGIONS;
}
/* Counts number of insns inside LOOP. */
@@ -605,7 +599,7 @@ mark_loop_exit_edges (void)
basic_block bb;
edge e;
- if (!current_loops)
+ if (number_of_loops () <= 1)
return;
FOR_EACH_BB (bb)
diff --git a/gcc/ifcvt.c b/gcc/ifcvt.c
index 6fca205a4ef..28f510cda29 100644
--- a/gcc/ifcvt.c
+++ b/gcc/ifcvt.c
@@ -3953,11 +3953,8 @@ if_convert (int x_life_data_ok)
gcc_assert (! no_new_pseudos || reload_completed);
loop_optimizer_init (AVOID_CFG_MODIFICATIONS);
- if (current_loops)
- {
- mark_loop_exit_edges ();
- loop_optimizer_finalize ();
- }
+ mark_loop_exit_edges ();
+ loop_optimizer_finalize ();
free_dominance_info (CDI_DOMINATORS);
/* Compute postdominators if we think we'll use them. */
diff --git a/gcc/loop-init.c b/gcc/loop-init.c
index 3aa6527a80a..d78b5ace52e 100644
--- a/gcc/loop-init.c
+++ b/gcc/loop-init.c
@@ -51,14 +51,6 @@ loop_optimizer_init (unsigned flags)
flow_loops_find (loops);
current_loops = loops;
- if (number_of_loops () <= 1)
- {
- /* No loops (the 1 returned by number_of_loops corresponds to the fake
- loop that we put as a root of the loop tree). */
- loop_optimizer_finalize ();
- return;
- }
-
if (flags & LOOPS_MAY_HAVE_MULTIPLE_LATCHES)
{
/* If the loops may have multiple latches, we cannot canonicalize
@@ -105,8 +97,7 @@ loop_optimizer_finalize (void)
struct loop *loop;
basic_block bb;
- if (!current_loops)
- return;
+ gcc_assert (current_loops != NULL);
FOR_EACH_LOOP (li, loop, 0)
{
@@ -244,7 +235,7 @@ gate_rtl_move_loop_invariants (void)
static unsigned int
rtl_move_loop_invariants (void)
{
- if (current_loops)
+ if (number_of_loops () > 1)
move_loop_invariants ();
return 0;
}
@@ -277,7 +268,7 @@ gate_rtl_unswitch (void)
static unsigned int
rtl_unswitch (void)
{
- if (current_loops)
+ if (number_of_loops () > 1)
unswitch_loops ();
return 0;
}
@@ -310,7 +301,7 @@ gate_rtl_unroll_and_peel_loops (void)
static unsigned int
rtl_unroll_and_peel_loops (void)
{
- if (current_loops)
+ if (number_of_loops () > 1)
{
int flags = 0;
@@ -359,7 +350,7 @@ static unsigned int
rtl_doloop (void)
{
#ifdef HAVE_doloop_end
- if (current_loops)
+ if (number_of_loops () > 1)
doloop_optimize_loops ();
#endif
return 0;
diff --git a/gcc/modulo-sched.c b/gcc/modulo-sched.c
index 36278a3a9eb..3e14ff5ac82 100644
--- a/gcc/modulo-sched.c
+++ b/gcc/modulo-sched.c
@@ -893,8 +893,11 @@ sms_schedule (void)
loop_optimizer_init (LOOPS_HAVE_PREHEADERS
| LOOPS_HAVE_RECORDED_EXITS);
- if (!current_loops)
- return; /* There are no loops to schedule. */
+ if (number_of_loops () <= 1)
+ {
+ loop_optimizer_finalize ();
+ return; /* There are no loops to schedule. */
+ }
/* Initialize issue_rate. */
if (targetm.sched.issue_rate)
diff --git a/gcc/predict.c b/gcc/predict.c
index f4ecb6fd415..0aa2c953757 100644
--- a/gcc/predict.c
+++ b/gcc/predict.c
@@ -1353,7 +1353,7 @@ tree_estimate_probability (void)
basic_block bb;
loop_optimizer_init (0);
- if (current_loops && dump_file && (dump_flags & TDF_DETAILS))
+ if (dump_file && (dump_flags & TDF_DETAILS))
flow_loops_dump (dump_file, NULL, 0);
add_noreturn_fake_exit_edges ();
@@ -1368,7 +1368,7 @@ tree_estimate_probability (void)
mark_irreducible_loops ();
record_loop_exits ();
- if (current_loops)
+ if (number_of_loops () > 1)
predict_loops ();
FOR_EACH_BB (bb)
@@ -1731,7 +1731,7 @@ estimate_loops (void)
basic_block bb;
/* Start by estimating the frequencies in the loops. */
- if (current_loops)
+ if (number_of_loops () > 1)
estimate_loops_at_level (current_loops->tree_root->inner);
/* Now propagate the frequencies through all the blocks. */
diff --git a/gcc/tree-chrec.c b/gcc/tree-chrec.c
index 45bee574f85..f55d004c8e9 100644
--- a/gcc/tree-chrec.c
+++ b/gcc/tree-chrec.c
@@ -974,13 +974,7 @@ evolution_function_is_invariant_rec_p (tree chrec, int loopnum)
bool
evolution_function_is_invariant_p (tree chrec, int loopnum)
{
- if (evolution_function_is_constant_p (chrec))
- return true;
-
- if (current_loops != NULL)
- return evolution_function_is_invariant_rec_p (chrec, loopnum);
-
- return false;
+ return evolution_function_is_invariant_rec_p (chrec, loopnum);
}
/* Determine whether the given tree is an affine multivariate
diff --git a/gcc/tree-if-conv.c b/gcc/tree-if-conv.c
index 580848eb06a..de2933e53ce 100644
--- a/gcc/tree-if-conv.c
+++ b/gcc/tree-if-conv.c
@@ -1105,7 +1105,7 @@ main_tree_if_conversion (void)
loop_iterator li;
struct loop *loop;
- if (!current_loops)
+ if (number_of_loops () <= 1)
return 0;
FOR_EACH_LOOP (li, loop, 0)
diff --git a/gcc/tree-scalar-evolution.c b/gcc/tree-scalar-evolution.c
index eb45529e8f2..fd559388d65 100644
--- a/gcc/tree-scalar-evolution.c
+++ b/gcc/tree-scalar-evolution.c
@@ -2863,6 +2863,8 @@ scev_analysis (void)
void
scev_finalize (void)
{
+ if (!scalar_evolution_info)
+ return;
htab_delete (scalar_evolution_info);
BITMAP_FREE (already_instantiated);
scalar_evolution_info = NULL;
@@ -2885,7 +2887,7 @@ scev_const_prop (void)
unsigned i;
loop_iterator li;
- if (!current_loops)
+ if (number_of_loops () <= 1)
return 0;
FOR_EACH_BB (bb)
diff --git a/gcc/tree-ssa-loop-ch.c b/gcc/tree-ssa-loop-ch.c
index e2e272b2266..570ad268d2b 100644
--- a/gcc/tree-ssa-loop-ch.c
+++ b/gcc/tree-ssa-loop-ch.c
@@ -133,8 +133,11 @@ copy_loop_headers (void)
loop_optimizer_init (LOOPS_HAVE_PREHEADERS
| LOOPS_HAVE_SIMPLE_LATCHES);
- if (!current_loops)
- return 0;
+ if (number_of_loops () <= 1)
+ {
+ loop_optimizer_finalize ();
+ return 0;
+ }
#ifdef ENABLE_CHECKING
verify_loop_structure ();
diff --git a/gcc/tree-ssa-loop-manip.c b/gcc/tree-ssa-loop-manip.c
index 16b126dc457..a1d06911d6b 100644
--- a/gcc/tree-ssa-loop-manip.c
+++ b/gcc/tree-ssa-loop-manip.c
@@ -360,7 +360,8 @@ rewrite_into_loop_closed_ssa (bitmap changed_bbs, unsigned update_flag)
unsigned i, old_num_ssa_names;
bitmap names_to_rename;
- if (!current_loops)
+ current_loops->state |= LOOP_CLOSED_SSA;
+ if (number_of_loops () <= 1)
return;
loop_exits = get_loops_exits ();
@@ -389,8 +390,6 @@ rewrite_into_loop_closed_ssa (bitmap changed_bbs, unsigned update_flag)
/* Fix up all the names found to be used outside their original
loops. */
update_ssa (TODO_update_ssa);
-
- current_loops->state |= LOOP_CLOSED_SSA;
}
/* Check invariants of the loop closed ssa form for the USE in BB. */
@@ -432,7 +431,7 @@ verify_loop_closed_ssa (void)
tree phi;
unsigned i;
- if (current_loops == NULL)
+ if (number_of_loops () <= 1)
return;
verify_ssa (false);
diff --git a/gcc/tree-ssa-loop.c b/gcc/tree-ssa-loop.c
index 895c9c25174..3a8f5db5ae7 100644
--- a/gcc/tree-ssa-loop.c
+++ b/gcc/tree-ssa-loop.c
@@ -45,9 +45,6 @@ tree_loop_optimizer_init (void)
{
loop_optimizer_init (LOOPS_NORMAL
| LOOPS_HAVE_RECORDED_EXITS);
- if (!current_loops)
- return;
-
rewrite_into_loop_closed_ssa (NULL, TODO_update_ssa);
}
@@ -82,7 +79,7 @@ static unsigned int
tree_ssa_loop_init (void)
{
tree_loop_optimizer_init ();
- if (!current_loops)
+ if (number_of_loops () <= 1)
return 0;
scev_initialize ();
@@ -111,7 +108,7 @@ struct tree_opt_pass pass_tree_loop_init =
static unsigned int
tree_ssa_loop_im (void)
{
- if (!current_loops)
+ if (number_of_loops () <= 1)
return 0;
tree_ssa_lim ();
@@ -146,7 +143,7 @@ struct tree_opt_pass pass_lim =
static unsigned int
tree_ssa_loop_unswitch (void)
{
- if (!current_loops)
+ if (number_of_loops () <= 1)
return 0;
return tree_ssa_unswitch_loops ();
@@ -223,7 +220,7 @@ tree_vectorize (void)
static bool
gate_tree_vectorize (void)
{
- return flag_tree_vectorize && current_loops;
+ return flag_tree_vectorize && number_of_loops () > 1;
}
struct tree_opt_pass pass_vectorize =
@@ -249,7 +246,7 @@ struct tree_opt_pass pass_vectorize =
static unsigned int
tree_linear_transform (void)
{
- if (!current_loops)
+ if (number_of_loops () <= 1)
return 0;
linear_transform_loops ();
@@ -285,7 +282,7 @@ struct tree_opt_pass pass_linear_transform =
static unsigned int
check_data_deps (void)
{
- if (!current_loops)
+ if (number_of_loops () <= 1)
return 0;
tree_check_data_deps ();
@@ -320,7 +317,7 @@ struct tree_opt_pass pass_check_data_deps =
static unsigned int
tree_ssa_loop_ivcanon (void)
{
- if (!current_loops)
+ if (number_of_loops () <= 1)
return 0;
return canonicalize_induction_variables ();
@@ -381,7 +378,7 @@ struct tree_opt_pass pass_scev_cprop =
static unsigned int
tree_ssa_empty_loop (void)
{
- if (!current_loops)
+ if (number_of_loops () <= 1)
return 0;
return remove_empty_loops ();
@@ -410,7 +407,7 @@ struct tree_opt_pass pass_empty_loop =
static unsigned int
tree_ssa_loop_bounds (void)
{
- if (!current_loops)
+ if (number_of_loops () <= 1)
return 0;
estimate_numbers_of_iterations ();
@@ -440,7 +437,7 @@ struct tree_opt_pass pass_record_bounds =
static unsigned int
tree_complete_unroll (void)
{
- if (!current_loops)
+ if (number_of_loops () <= 1)
return 0;
return tree_unroll_loops_completely (flag_unroll_loops
@@ -477,7 +474,7 @@ struct tree_opt_pass pass_complete_unroll =
static unsigned int
tree_ssa_loop_prefetch (void)
{
- if (!current_loops)
+ if (number_of_loops () <= 1)
return 0;
return tree_ssa_prefetch_arrays ();
@@ -511,7 +508,7 @@ struct tree_opt_pass pass_loop_prefetch =
static unsigned int
tree_ssa_loop_ivopts (void)
{
- if (!current_loops)
+ if (number_of_loops () <= 1)
return 0;
tree_ssa_iv_optimize ();
@@ -547,9 +544,6 @@ struct tree_opt_pass pass_iv_optimize =
static unsigned int
tree_ssa_loop_done (void)
{
- if (!current_loops)
- return 0;
-
free_numbers_of_iterations_estimates ();
scev_finalize ();
loop_optimizer_finalize ();
diff --git a/gcc/tree-ssa-pre.c b/gcc/tree-ssa-pre.c
index 46332112cda..cdb6aa8e2e2 100644
--- a/gcc/tree-ssa-pre.c
+++ b/gcc/tree-ssa-pre.c
@@ -3801,7 +3801,7 @@ init_pre (bool do_fre)
/* Deallocate data structures used by PRE. */
static void
-fini_pre (bool do_fre)
+fini_pre (void)
{
basic_block bb;
unsigned int i;
@@ -3849,7 +3849,7 @@ fini_pre (bool do_fre)
&& TREE_CODE (SSA_NAME_VALUE (name)) == VALUE_HANDLE)
SSA_NAME_VALUE (name) = NULL;
}
- if (!do_fre && current_loops)
+ if (current_loops != NULL)
loop_optimizer_finalize ();
}
@@ -3915,7 +3915,7 @@ execute_pre (bool do_fre)
realify_fake_stores ();
}
- fini_pre (do_fre);
+ fini_pre ();
}
/* Gate and execute functions for PRE. */
diff --git a/gcc/tree-ssa-threadupdate.c b/gcc/tree-ssa-threadupdate.c
index 6732f2e2899..815c84fb7b3 100644
--- a/gcc/tree-ssa-threadupdate.c
+++ b/gcc/tree-ssa-threadupdate.c
@@ -530,7 +530,7 @@ thread_block (basic_block bb, bool noloop_only)
/* If we thread the latch of the loop to its exit, the loop ceases to
exist. Make sure we do not restrict ourselves in order to preserve
this loop. */
- if (current_loops && loop->header == bb)
+ if (loop->header == bb)
{
e = loop_latch_edge (loop);
e2 = e->aux;
@@ -552,7 +552,6 @@ thread_block (basic_block bb, bool noloop_only)
/* If NOLOOP_ONLY is true, we only allow threading through the
header of a loop to exit edges. */
|| (noloop_only
- && current_loops
&& bb == bb->loop_father->header
&& !loop_exit_edge_p (bb->loop_father, e2)))
{
@@ -1023,6 +1022,9 @@ thread_through_all_blocks (bool may_peel_loop_headers)
struct loop *loop;
loop_iterator li;
+ /* We must know about loops in order to preserve them. */
+ gcc_assert (current_loops != NULL);
+
if (threaded_edges == NULL)
return false;
@@ -1046,16 +1048,13 @@ thread_through_all_blocks (bool may_peel_loop_headers)
/* Then perform the threading through loop headers. We start with the
innermost loop, so that the changes in cfg we perform won't affect
further threading. */
- if (current_loops)
+ FOR_EACH_LOOP (li, loop, LI_FROM_INNERMOST)
{
- FOR_EACH_LOOP (li, loop, LI_FROM_INNERMOST)
- {
- if (!loop->header
- || !bitmap_bit_p (threaded_blocks, loop->header->index))
- continue;
+ if (!loop->header
+ || !bitmap_bit_p (threaded_blocks, loop->header->index))
+ continue;
- retval |= thread_through_loop_header (loop, may_peel_loop_headers);
- }
+ retval |= thread_through_loop_header (loop, may_peel_loop_headers);
}
if (retval)
diff --git a/gcc/tree-vrp.c b/gcc/tree-vrp.c
index c32c907ee3a..b62b3e1d70b 100644
--- a/gcc/tree-vrp.c
+++ b/gcc/tree-vrp.c
@@ -5998,11 +5998,8 @@ static unsigned int
execute_vrp (void)
{
loop_optimizer_init (LOOPS_NORMAL | LOOPS_HAVE_RECORDED_EXITS);
- if (current_loops)
- {
- rewrite_into_loop_closed_ssa (NULL, TODO_update_ssa);
- scev_initialize ();
- }
+ rewrite_into_loop_closed_ssa (NULL, TODO_update_ssa);
+ scev_initialize ();
insert_range_assertions ();
@@ -6023,11 +6020,8 @@ execute_vrp (void)
update_ssa (TODO_update_ssa);
finalize_jump_threads ();
- if (current_loops)
- {
- scev_finalize ();
- loop_optimizer_finalize ();
- }
+ scev_finalize ();
+ loop_optimizer_finalize ();
return 0;
}