(copy_loop_body): Don't assume (pc) can be on either leg of jump; use
invert_exp and redirect_exp instead. From-SVN: r1843
This commit is contained in:
parent
4214a50578
commit
a9d27cb2a3
25
gcc/unroll.c
25
gcc/unroll.c
@ -1662,23 +1662,18 @@ copy_loop_body (copy_start, copy_end, map, exit_label, last_iteration,
|
||||
int fall_through;
|
||||
|
||||
/* Never map the label in this case. */
|
||||
pattern = copy_rtx (PATTERN (insn));
|
||||
rtx tmp_pattern = copy_rtx (PATTERN (insn));
|
||||
|
||||
/* Assume a conditional branch, since the code above
|
||||
does not let unconditional branches be copied. */
|
||||
if (! condjump_p (insn))
|
||||
abort ();
|
||||
fall_through
|
||||
= (XEXP (SET_SRC (PATTERN (insn)), 2) == pc_rtx) + 1;
|
||||
/* Set the fall through case to the exit label. If we
|
||||
can't do this in place, abort for now. Maybe
|
||||
we can do something more sophisticated eventually. */
|
||||
|
||||
/* Set the fall through case to the exit label. Must
|
||||
create a new label_ref since they can't be shared. */
|
||||
XEXP (SET_SRC (pattern), fall_through)
|
||||
= gen_rtx (LABEL_REF, VOIDmode, exit_label);
|
||||
|
||||
/* Set the original branch case to fall through. */
|
||||
XEXP (SET_SRC (pattern), 3 - fall_through)
|
||||
= pc_rtx;
|
||||
if (! invert_exp (tmp_pattern, insn)
|
||||
|| ! redirect_exp (&tmp_pattern, JUMP_LABEL (insn),
|
||||
exit_label, insn))
|
||||
abort ();
|
||||
|
||||
pattern = tmp_pattern;
|
||||
}
|
||||
else
|
||||
pattern = copy_rtx_and_substitute (PATTERN (insn), map);
|
||||
|
Loading…
Reference in New Issue
Block a user