From: Bin Cheng Date: Thu, 13 Mar 2014 02:40:08 +0000 (+0000) Subject: tree-cfgcleanup.c (remove_forwarder_block_with_phi): Record BB's single pred and... X-Git-Tag: releases/gcc-4.9.0~475 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=d731ee04423f788ff370a82eab69b4038bb14cdd;p=thirdparty%2Fgcc.git tree-cfgcleanup.c (remove_forwarder_block_with_phi): Record BB's single pred and update the father loop's latch info later. * tree-cfgcleanup.c (remove_forwarder_block_with_phi): Record BB's single pred and update the father loop's latch info later. From-SVN: r208527 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index c199901dd37c..beea3437a473 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +2014-03-13 Bin Cheng + + * tree-cfgcleanup.c (remove_forwarder_block_with_phi): Record + BB's single pred and update the father loop's latch info later. + 2014-03-12 Michael Meissner * config/rs6000/vector.md (VEC_L): Add V1TI mode to vector types. diff --git a/gcc/tree-cfgcleanup.c b/gcc/tree-cfgcleanup.c index 926d3000dc51..08401dd2db64 100644 --- a/gcc/tree-cfgcleanup.c +++ b/gcc/tree-cfgcleanup.c @@ -820,6 +820,12 @@ remove_forwarder_block_with_phi (basic_block bb) && DECL_NONLOCAL (gimple_label_label (label))) return false; + /* Record BB's single pred in case we need to update the father + loop's latch information later. */ + basic_block pred = NULL; + if (single_pred_p (bb)) + pred = single_pred (bb); + /* Redirect each incoming edge to BB to DEST. */ while (EDGE_COUNT (bb->preds) > 0) { @@ -904,6 +910,11 @@ remove_forwarder_block_with_phi (basic_block bb) set_immediate_dominator (CDI_DOMINATORS, dest, dom); + /* Adjust latch infomation of BB's parent loop as otherwise + the cfg hook has a hard time not to kill the loop. */ + if (current_loops && bb->loop_father->latch == bb) + bb->loop_father->latch = pred; + /* Remove BB since all of BB's incoming edges have been redirected to DEST. */ delete_basic_block (bb);