Commit a9d27cb2 by Richard Kenner

(copy_loop_body): Don't assume (pc) can be on either leg of jump; use

invert_exp and redirect_exp instead.

From-SVN: r1843
parent 4214a505
...@@ -1662,23 +1662,18 @@ copy_loop_body (copy_start, copy_end, map, exit_label, last_iteration, ...@@ -1662,23 +1662,18 @@ copy_loop_body (copy_start, copy_end, map, exit_label, last_iteration,
int fall_through; int fall_through;
/* Never map the label in this case. */ /* 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 /* Set the fall through case to the exit label. If we
does not let unconditional branches be copied. */ can't do this in place, abort for now. Maybe
if (! condjump_p (insn)) we can do something more sophisticated eventually. */
if (! invert_exp (tmp_pattern, insn)
|| ! redirect_exp (&tmp_pattern, JUMP_LABEL (insn),
exit_label, insn))
abort (); abort ();
fall_through
= (XEXP (SET_SRC (PATTERN (insn)), 2) == pc_rtx) + 1;
/* Set the fall through case to the exit label. Must pattern = tmp_pattern;
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;
} }
else else
pattern = copy_rtx_and_substitute (PATTERN (insn), map); pattern = copy_rtx_and_substitute (PATTERN (insn), map);
......
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