From 9290558260c3d26ae55adb61a7225dde9e61fb79 Mon Sep 17 00:00:00 2001 From: Jim Wilson Date: Thu, 20 Feb 1997 13:43:33 -0800 Subject: [PATCH] (unroll_loop): Add check for naive loop that ends with conditional branch that does not branch back to loop start. From-SVN: r13672 --- gcc/unroll.c | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/gcc/unroll.c b/gcc/unroll.c index 0e033ef53b2..2ab6b2a16bc 100644 --- a/gcc/unroll.c +++ b/gcc/unroll.c @@ -637,6 +637,23 @@ unroll_loop (loop_end, insn_count, loop_start, end_insert_before, copy_end = last_loop_insn; } + if (unroll_type == UNROLL_NAIVE + && GET_CODE (last_loop_insn) == JUMP_INSN + && start_label != JUMP_LABEL (last_loop_insn)) + { + /* ??? The loop ends with a conditional branch that does not branch back + to the loop start label. In this case, we must emit an unconditional + branch to the loop exit after emitting the final branch. + copy_loop_body does not have support for this currently, so we + give up. It doesn't seem worthwhile to unroll anyways since + unrolling would increase the number of branch instructions + executed. */ + if (loop_dump_stream) + fprintf (loop_dump_stream, + "Unrolling failure: final conditional branch not to loop start\n"); + return; + } + /* Allocate a translation table for the labels and insn numbers. They will be filled in as we copy the insns in the loop. */