Commit 80663107 by Mircea Namolaru Committed by Revital Eres

Fix 34826

From-SVN: r131604
parent 599824d2
2008-01-17 Mircea Namolaru <namolaru@il.ibm.com>
PR rtl-optimization/34826
* loop-doloop (doloop_modify): Update the REG_BR_PROB note.
2008-01-17 Andreas Krebbel <krebbel1@de.ibm.com> 2008-01-17 Andreas Krebbel <krebbel1@de.ibm.com>
* global.c (find_reg): Mark the eh regs as used if necessary. * global.c (find_reg): Mark the eh regs as used if necessary.
......
...@@ -348,6 +348,7 @@ doloop_modify (struct loop *loop, struct niter_desc *desc, ...@@ -348,6 +348,7 @@ doloop_modify (struct loop *loop, struct niter_desc *desc,
bool increment_count; bool increment_count;
basic_block loop_end = desc->out_edge->src; basic_block loop_end = desc->out_edge->src;
enum machine_mode mode; enum machine_mode mode;
rtx true_prob_val;
jump_insn = BB_END (loop_end); jump_insn = BB_END (loop_end);
...@@ -361,6 +362,10 @@ doloop_modify (struct loop *loop, struct niter_desc *desc, ...@@ -361,6 +362,10 @@ doloop_modify (struct loop *loop, struct niter_desc *desc,
fputs (" iterations).\n", dump_file); 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 /* Discard original jump to continue loop. The original compare
result may still be live, so it cannot be discarded explicitly. */ result may still be live, so it cannot be discarded explicitly. */
delete_insn (jump_insn); delete_insn (jump_insn);
...@@ -516,6 +521,15 @@ doloop_modify (struct loop *loop, struct niter_desc *desc, ...@@ -516,6 +521,15 @@ doloop_modify (struct loop *loop, struct niter_desc *desc,
REG_NOTES (jump_insn) REG_NOTES (jump_insn)
= gen_rtx_EXPR_LIST (REG_NONNEG, NULL_RTX, 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 /* Process loop described by LOOP validating that the loop is suitable for
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment