Commit b5f89788 by Richard Kenner

(unroll_loop): Don't move reg if used in copy_end and that is a

JUMP_INSN.

From-SVN: r9646
parent 454e0249
...@@ -728,18 +728,18 @@ unroll_loop (loop_end, insn_count, loop_start, end_insert_before, ...@@ -728,18 +728,18 @@ unroll_loop (loop_end, insn_count, loop_start, end_insert_before,
int copy_start_luid = INSN_LUID (copy_start); int copy_start_luid = INSN_LUID (copy_start);
int copy_end_luid = INSN_LUID (copy_end); int copy_end_luid = INSN_LUID (copy_end);
for (j = FIRST_PSEUDO_REGISTER; j < maxregnum; ++j) /* If a register is used in the jump insn, we must not duplicate it
{ since it will also be used outside the loop. */
int first_uid = regno_first_uid[j]; if (GET_CODE (copy_end) == JUMP_INSN)
int last_uid = regno_last_uid[j]; copy_end_luid--;
if (first_uid > 0 && first_uid <= max_uid_for_loop for (j = FIRST_PSEUDO_REGISTER; j < maxregnum; ++j)
&& uid_luid[first_uid] >= copy_start_luid if (regno_first_uid[j] > 0 && regno_first_uid[j] <= max_uid_for_loop
&& last_uid > 0 && last_uid <= max_uid_for_loop && uid_luid[regno_first_uid[j]] >= copy_start_luid
&& uid_luid[last_uid] <= copy_end_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; local_regno[j] = 1;
} }
}
/* If this loop requires exit tests when unrolled, check to see if we /* If this loop requires exit tests when unrolled, check to see if we
can precondition the loop so as to make the exit tests unnecessary. can precondition the loop so as to make the exit tests unnecessary.
......
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