X-Git-Url: http://git.sourceforge.jp/view?a=blobdiff_plain;f=gcc%2Ftree-ssa-loop-ch.c;h=3033c9082ef40a5483c0271b787d48f71d6e2612;hb=97bb28494500b9d33b0aba1d9b429a753aab8ace;hp=2b3094622d71c8ffdb1a02aad9de300f35ff5a91;hpb=00bd8b4402db49aeb3edfbfd278b1566b02a9563;p=pf3gnuchains%2Fgcc-fork.git diff --git a/gcc/tree-ssa-loop-ch.c b/gcc/tree-ssa-loop-ch.c index 2b3094622d7..3033c9082ef 100644 --- a/gcc/tree-ssa-loop-ch.c +++ b/gcc/tree-ssa-loop-ch.c @@ -87,7 +87,7 @@ should_duplicate_loop_header_p (basic_block header, struct loop *loop, if (get_call_expr_in (last)) return false; - *limit -= estimate_num_insns (last); + *limit -= estimate_num_insns (last, &eni_size_weights); if (*limit < 0) return false; } @@ -120,11 +120,10 @@ do_while_loop_p (struct loop *loop) of the loop. This is beneficial since it increases efficiency of code motion optimizations. It also saves one jump on entry to the loop. */ -static void +static unsigned int copy_loop_headers (void) { - struct loops *loops; - unsigned i; + loop_iterator li; struct loop *loop; basic_block header; edge exit, entry; @@ -132,30 +131,24 @@ copy_loop_headers (void) unsigned n_bbs; unsigned bbs_size; - loops = loop_optimizer_init (dump_file); - if (!loops) - return; - - /* We do not try to keep the information about irreducible regions - up-to-date. */ - loops->state &= ~LOOPS_HAVE_MARKED_IRREDUCIBLE_REGIONS; + loop_optimizer_init (LOOPS_HAVE_PREHEADERS + | LOOPS_HAVE_SIMPLE_LATCHES); + if (!current_loops) + return 0; #ifdef ENABLE_CHECKING - verify_loop_structure (loops); + verify_loop_structure (); #endif - bbs = xmalloc (sizeof (basic_block) * n_basic_blocks); - copied_bbs = xmalloc (sizeof (basic_block) * n_basic_blocks); + bbs = XNEWVEC (basic_block, n_basic_blocks); + copied_bbs = XNEWVEC (basic_block, n_basic_blocks); bbs_size = n_basic_blocks; - for (i = 1; i < loops->num; i++) + FOR_EACH_LOOP (li, loop, 0) { /* Copy at most 20 insns. */ int limit = 20; - loop = loops->parray[i]; - if (!loop) - continue; header = loop->header; /* If the loop is already a do-while style one (either because it was @@ -197,7 +190,7 @@ copy_loop_headers (void) /* Ensure that the header will have just the latch as a predecessor inside the loop. */ if (!single_pred_p (exit->dest)) - exit = single_pred_edge (loop_split_edge_with (exit, NULL)); + exit = single_pred_edge (split_edge (exit)); entry = loop_preheader_edge (loop); @@ -209,14 +202,15 @@ copy_loop_headers (void) /* Ensure that the latch and the preheader is simple (we know that they are not now, since there was the loop exit condition. */ - loop_split_edge_with (loop_preheader_edge (loop), NULL); - loop_split_edge_with (loop_latch_edge (loop), NULL); + split_edge (loop_preheader_edge (loop)); + split_edge (loop_latch_edge (loop)); } free (bbs); free (copied_bbs); - loop_optimizer_finalize (loops, NULL); + loop_optimizer_finalize (); + return 0; } static bool