From: Jeff Law Date: Mon, 25 Nov 2013 18:24:57 +0000 (-0700) Subject: tree-ssa-threadupdate.c (thread_through_all_blocks): Selectively invalidate loop... X-Git-Tag: releases/gcc-4.9.0~2465 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=807b7031711f7e7b48cabd52ef3e30e32dbcfeee;p=thirdparty%2Fgcc.git tree-ssa-threadupdate.c (thread_through_all_blocks): Selectively invalidate loop information. * tree-ssa-threadupdate.c (thread_through_all_blocks): Selectively invalidate loop information. From-SVN: r205361 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 8f235decc81a..28b415bd44e7 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +2013-11-25 Jeff Law + + * tree-ssa-threadupdate.c (thread_through_all_blocks): Selectively + invalidate loop information. + 2013-11-25 Oleg Endo * config/sh/sh.md (doloop_end_split): Add missing SI mode. diff --git a/gcc/tree-ssa-threadupdate.c b/gcc/tree-ssa-threadupdate.c index ee0c838126eb..1a52e4702fa0 100644 --- a/gcc/tree-ssa-threadupdate.c +++ b/gcc/tree-ssa-threadupdate.c @@ -1579,7 +1579,6 @@ thread_through_all_blocks (bool may_peel_loop_headers) bitmap_iterator bi; bitmap threaded_blocks; struct loop *loop; - bool totally_clobbered_loops = false; /* We must know about loops in order to preserve them. */ gcc_assert (current_loops != NULL); @@ -1675,9 +1674,15 @@ thread_through_all_blocks (bool may_peel_loop_headers) /* Our path is still valid, thread it. */ if (e->aux) { - totally_clobbered_loops - |= thread_block ((*path)[0]->e->dest, false); + struct loop *loop = (*path)[0]->e->dest->loop_father; + + retval |= thread_block ((*path)[0]->e->dest, false); e->aux = NULL; + + /* This jump thread likely totally scrambled this loop. + So arrange for it to be fixed up. */ + loop->header = NULL; + loop->latch = NULL; } } else @@ -1700,32 +1705,7 @@ thread_through_all_blocks (bool may_peel_loop_headers) threaded_blocks = NULL; paths.release (); - /* If we made changes to the CFG that might have totally messed - up the loop structure, then drop the old loop structure and - rebuild. */ - if (totally_clobbered_loops) - { - /* Release the current loop structures, they are totally - clobbered at this point. */ - loop_optimizer_finalize (); - current_loops = NULL; - - /* Similarly for dominance information. */ - free_dominance_info (CDI_DOMINATORS); - free_dominance_info (CDI_POST_DOMINATORS); - - /* Before we can rebuild the loop structures, we need dominators, - which requires no unreachable code. So remove unreachable code. */ - delete_unreachable_blocks (); - - /* Now rebuild the loop structures. */ - cfun->curr_properties &= ~PROP_loops; - loop_optimizer_init (AVOID_CFG_MODIFICATIONS); - cfun->curr_properties |= PROP_loops; - retval = 1; - } - - if (retval && current_loops) + if (retval) loops_state_set (LOOPS_NEED_FIXUP); return retval;