From b5f89788219bb69aa9d4c37b3673f96c4eb339a7 Mon Sep 17 00:00:00 2001 From: Richard Kenner Date: Fri, 12 May 1995 12:48:07 -0400 Subject: [PATCH] (unroll_loop): Don't move reg if used in copy_end and that is a JUMP_INSN. From-SVN: r9646 --- gcc/unroll.c | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/gcc/unroll.c b/gcc/unroll.c index 84a79ce2f25..050273fc89c 100644 --- a/gcc/unroll.c +++ b/gcc/unroll.c @@ -728,17 +728,17 @@ unroll_loop (loop_end, insn_count, loop_start, end_insert_before, int copy_start_luid = INSN_LUID (copy_start); int copy_end_luid = INSN_LUID (copy_end); + /* If a register is used in the jump insn, we must not duplicate it + since it will also be used outside the loop. */ + if (GET_CODE (copy_end) == JUMP_INSN) + copy_end_luid--; + for (j = FIRST_PSEUDO_REGISTER; j < maxregnum; ++j) - { - int first_uid = regno_first_uid[j]; - int last_uid = regno_last_uid[j]; - - if (first_uid > 0 && first_uid <= max_uid_for_loop - && uid_luid[first_uid] >= copy_start_luid - && last_uid > 0 && last_uid <= max_uid_for_loop - && uid_luid[last_uid] <= copy_end_luid) - local_regno[j] = 1; - } + if (regno_first_uid[j] > 0 && regno_first_uid[j] <= max_uid_for_loop + && uid_luid[regno_first_uid[j]] >= copy_start_luid + && regno_last_uid[j] > 0 && regno_last_uid[j] <= max_uid_for_loop + && uid_luid[regno_last_uid[j]] <= copy_end_luid) + local_regno[j] = 1; } /* If this loop requires exit tests when unrolled, check to see if we -- 2.30.2