Commit d85428e2 by Dale Johannesen Committed by Dale Johannesen

loop.c (loop_givs_reduce): Avoid miscompilation of loops entered at bottom.


2004-06-16  Dale Johannesen  <dalej@apple.com>

        * loop.c (loop_givs_reduce): Avoid miscompilation of
        loops entered at bottom.

From-SVN: r83248
parent e370de6e
2004-06-16 Dale Johannesen <dalej@apple.com>
* loop.c (loop_givs_reduce): Avoid miscompilation of
loops entered at bottom.
2004-06-16 J"orn Rennecke <joern.rennecke@superh.com> 2004-06-16 J"orn Rennecke <joern.rennecke@superh.com>
* cfglayout.c (fixup_reorder_chain): Handle case where the * cfglayout.c (fixup_reorder_chain): Handle case where the
......
...@@ -4699,13 +4699,24 @@ loop_givs_reduce (struct loop *loop, struct iv_class *bl) ...@@ -4699,13 +4699,24 @@ loop_givs_reduce (struct loop *loop, struct iv_class *bl)
this is an address giv, then try to put the increment this is an address giv, then try to put the increment
immediately after its use, so that flow can create an immediately after its use, so that flow can create an
auto-increment addressing mode. */ auto-increment addressing mode. */
/* Don't do this for loops entered at the bottom, to avoid
this invalid transformation:
jmp L; -> jmp L;
TOP: TOP:
use giv use giv
L: inc giv
inc biv L:
test biv test giv
cbr TOP cbr TOP
*/
if (v->giv_type == DEST_ADDR && bl->biv_count == 1 if (v->giv_type == DEST_ADDR && bl->biv_count == 1
&& bl->biv->always_executed && ! bl->biv->maybe_multiple && bl->biv->always_executed && ! bl->biv->maybe_multiple
/* We don't handle reversed biv's because bl->biv->insn /* We don't handle reversed biv's because bl->biv->insn
does not have a valid INSN_LUID. */ does not have a valid INSN_LUID. */
&& ! bl->reversed && ! bl->reversed
&& v->always_executed && ! v->maybe_multiple && v->always_executed && ! v->maybe_multiple
&& INSN_UID (v->insn) < max_uid_for_loop) && INSN_UID (v->insn) < max_uid_for_loop
&& !loop->top)
{ {
/* If other giv's have been combined with this one, then /* If other giv's have been combined with this one, then
this will work only if all uses of the other giv's occur this will work only if all uses of the other giv's occur
......
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