diff options
Diffstat (limited to 'gcc/loop-invariant.c')
-rw-r--r-- | gcc/loop-invariant.c | 24 |
1 files changed, 6 insertions, 18 deletions
diff --git a/gcc/loop-invariant.c b/gcc/loop-invariant.c index d4258f0..4c6e8bc 100644 --- a/gcc/loop-invariant.c +++ b/gcc/loop-invariant.c @@ -1318,33 +1318,21 @@ void move_loop_invariants (void) { struct loop *loop; - unsigned i; + loop_iterator li; df = df_init (DF_HARD_REGS | DF_EQUIV_NOTES); df_chain_add_problem (df, DF_UD_CHAIN); /* Process the loops, innermost first. */ - loop = current_loops->tree_root; - while (loop->inner) - loop = loop->inner; - - while (loop != current_loops->tree_root) + FOR_EACH_LOOP (li, loop, LI_FROM_INNERMOST) { move_single_loop_invariants (loop); - - if (loop->next) - { - loop = loop->next; - while (loop->inner) - loop = loop->inner; - } - else - loop = loop->outer; } - for (i = 1; i < current_loops->num; i++) - if (current_loops->parray[i]) - free_loop_data (current_loops->parray[i]); + FOR_EACH_LOOP (li, loop, 0) + { + free_loop_data (loop); + } df_finish (df); df = NULL; |