From: Mircea Namolaru Date: Thu, 17 Jan 2008 17:49:32 +0000 (+0000) Subject: Fix 34826 X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=806631075bf64119cd6dfede10d22429266aa514;p=gcc.git Fix 34826 From-SVN: r131604 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index c337e95a9c5..15885512ed3 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +2008-01-17 Mircea Namolaru + + PR rtl-optimization/34826 + * loop-doloop (doloop_modify): Update the REG_BR_PROB note. + 2008-01-17 Andreas Krebbel * global.c (find_reg): Mark the eh regs as used if necessary. diff --git a/gcc/loop-doloop.c b/gcc/loop-doloop.c index 6e33a4f9ba0..448bb723a55 100644 --- a/gcc/loop-doloop.c +++ b/gcc/loop-doloop.c @@ -348,6 +348,7 @@ doloop_modify (struct loop *loop, struct niter_desc *desc, bool increment_count; basic_block loop_end = desc->out_edge->src; enum machine_mode mode; + rtx true_prob_val; jump_insn = BB_END (loop_end); @@ -361,6 +362,10 @@ doloop_modify (struct loop *loop, struct niter_desc *desc, fputs (" iterations).\n", dump_file); } + /* Get the probabilty of the original branch. If it exists we would + need to update REG_BR_PROB of the new jump_insn. */ + true_prob_val = find_reg_note (jump_insn, REG_BR_PROB, NULL_RTX); + /* Discard original jump to continue loop. The original compare result may still be live, so it cannot be discarded explicitly. */ delete_insn (jump_insn); @@ -516,6 +521,15 @@ doloop_modify (struct loop *loop, struct niter_desc *desc, REG_NOTES (jump_insn) = gen_rtx_EXPR_LIST (REG_NONNEG, NULL_RTX, REG_NOTES (jump_insn)); } + /* Update the REG_BR_PROB note. */ + if (true_prob_val) + { + /* Seems safer to use the branch probability. */ + REG_NOTES (jump_insn) = + gen_rtx_EXPR_LIST (REG_BR_PROB, + GEN_INT (desc->in_edge->probability), + REG_NOTES (jump_insn)); + } } /* Process loop described by LOOP validating that the loop is suitable for