mirror of
git://gcc.gnu.org/git/gcc.git
synced 2025-04-08 02:20:39 +08:00
jump.c (jump_optimize_1): When we delete a conditional jump preceeding a non-conditional jump to...
* jump.c (jump_optimize_1): When we delete a conditional jump preceeding a non-conditional jump to effectively the same place, make sure that the combined jump skips any clobber insns between the two labels. Co-Authored-By: DJ Delorie <dj@redhat.com> From-SVN: r39686
This commit is contained in:
parent
7161c1a582
commit
8e0b124eaf
@ -1,3 +1,11 @@
|
||||
2001-02-14 Richard Henderson <rth@redhat.com>
|
||||
DJ Delorie <dj@redhat.com>
|
||||
|
||||
* jump.c (jump_optimize_1): When we delete a conditional jump
|
||||
preceeding a non-conditional jump to effectively the same place,
|
||||
make sure that the combined jump skips any clobber insns between
|
||||
the two labels.
|
||||
|
||||
2001-02-14 Jeffrey Oldham <oldham@codesourcery.com>
|
||||
|
||||
* gcc.c (do_spec_1): Fix off-by-one error for '%M' case.
|
||||
|
22
gcc/jump.c
22
gcc/jump.c
@ -420,6 +420,28 @@ jump_optimize_1 (f, cross_jump, noop_moves, after_regscan,
|
||||
|
||||
if (temp2 == temp)
|
||||
{
|
||||
/* Ensure that we jump to the later of the two labels.
|
||||
Consider:
|
||||
|
||||
if (test) goto L2;
|
||||
goto L1;
|
||||
...
|
||||
L1:
|
||||
(clobber return-reg)
|
||||
L2:
|
||||
(use return-reg)
|
||||
|
||||
If we leave the goto L1, we'll incorrectly leave
|
||||
return-reg dead for TEST true. */
|
||||
|
||||
temp2 = next_active_insn (JUMP_LABEL (insn));
|
||||
if (!temp2)
|
||||
temp2 = get_last_insn ();
|
||||
if (GET_CODE (temp2) != CODE_LABEL)
|
||||
temp2 = prev_label (temp2);
|
||||
if (temp2 != JUMP_LABEL (temp))
|
||||
redirect_jump (temp, temp2, 1);
|
||||
|
||||
delete_jump (insn);
|
||||
changed = 1;
|
||||
continue;
|
||||
|
Loading…
x
Reference in New Issue
Block a user