jump.c (onlyjump_p): New function.
* jump.c (onlyjump_p): New function. * rtl.h: Declare it. * flow.c (delete_unreachable_blocks): Use onlyjump_p instead of condjump_p in calling tidy_fallthru_edge and merge_blocks. From-SVN: r28584
This commit is contained in:
parent
021d167782
commit
d0e8071928
|
@ -1,3 +1,10 @@
|
|||
Sat Aug 7 19:32:16 1999 Richard Henderson <rth@cygnus.com>
|
||||
|
||||
* jump.c (onlyjump_p): New function.
|
||||
* rtl.h: Declare it.
|
||||
* flow.c (delete_unreachable_blocks): Use onlyjump_p instead
|
||||
of condjump_p in calling tidy_fallthru_edge and merge_blocks.
|
||||
|
||||
Sat Aug 7 17:09:36 1999 Richard Henderson <rth@cygnus.com>
|
||||
|
||||
* global.c (build_insn_chain): Use EXECUTE_IF_SET_IN_REG_SET
|
||||
|
|
16
gcc/flow.c
16
gcc/flow.c
|
@ -1564,11 +1564,9 @@ delete_unreachable_blocks ()
|
|||
if ((s = b->succ) != NULL
|
||||
&& s->succ_next == NULL
|
||||
&& s->dest == c
|
||||
/* If the last insn is not a normal conditional jump
|
||||
(or an unconditional jump), then we can not tidy the
|
||||
fallthru edge because we can not delete the jump. */
|
||||
&& GET_CODE (b->end) == JUMP_INSN
|
||||
&& condjump_p (b->end))
|
||||
/* If the jump insn has side effects, we can't tidy the edge. */
|
||||
&& (GET_CODE (b->end) != JUMP_INSN
|
||||
|| onlyjump_p (b->end)))
|
||||
tidy_fallthru_edge (s, b, c);
|
||||
}
|
||||
|
||||
|
@ -1587,11 +1585,9 @@ delete_unreachable_blocks ()
|
|||
&& (s->flags & EDGE_EH) == 0
|
||||
&& (c = s->dest) != EXIT_BLOCK_PTR
|
||||
&& c->pred->pred_next == NULL
|
||||
/* If the last insn is not a normal conditional jump
|
||||
(or an unconditional jump), then we can not merge
|
||||
the blocks because we can not delete the jump. */
|
||||
&& GET_CODE (b->end) == JUMP_INSN
|
||||
&& condjump_p (b->end)
|
||||
/* If the jump insn has side effects, we can't kill the edge. */
|
||||
&& (GET_CODE (b->end) != JUMP_INSN
|
||||
|| onlyjump_p (b->end))
|
||||
&& merge_blocks (s, b, c))
|
||||
continue;
|
||||
|
||||
|
|
23
gcc/jump.c
23
gcc/jump.c
|
@ -3528,6 +3528,29 @@ returnjump_p (insn)
|
|||
return for_each_rtx (&PATTERN (insn), returnjump_p_1, NULL);
|
||||
}
|
||||
|
||||
/* Return true if INSN is a jump that only transfers control and
|
||||
nothing more. */
|
||||
|
||||
int
|
||||
onlyjump_p (insn)
|
||||
rtx insn;
|
||||
{
|
||||
rtx set;
|
||||
|
||||
if (GET_CODE (insn) != JUMP_INSN)
|
||||
return 0;
|
||||
|
||||
set = single_set (insn);
|
||||
if (set == NULL)
|
||||
return 0;
|
||||
if (GET_CODE (SET_DEST (set)) != PC)
|
||||
return 0;
|
||||
if (side_effects_p (SET_SRC (set)))
|
||||
return 0;
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
#ifdef HAVE_cc0
|
||||
|
||||
/* Return 1 if X is an RTX that does nothing but set the condition codes
|
||||
|
|
|
@ -1352,6 +1352,7 @@ extern int condjump_p PROTO ((rtx));
|
|||
extern rtx condjump_label PROTO ((rtx));
|
||||
extern int simplejump_p PROTO ((rtx));
|
||||
extern int returnjump_p PROTO ((rtx));
|
||||
extern int onlyjump_p PROTO ((rtx));
|
||||
extern int sets_cc0_p PROTO ((rtx));
|
||||
extern int invert_jump PROTO ((rtx, rtx));
|
||||
extern int rtx_renumbered_equal_p PROTO ((rtx, rtx));
|
||||
|
|
Loading…
Reference in New Issue