cfg.c (force_nonfallthru_and_redirect): Handle redirecting to the exit block.
* cfg.c (force_nonfallthru_and_redirect): Handle redirecting to the exit block. * Makefile.in (cfg.o): Depend on TM_P_H. From-SVN: r45696
This commit is contained in:
parent
e2c9fb9bbc
commit
3d9339a9ca
3 changed files with 29 additions and 7 deletions
|
@ -1,3 +1,9 @@
|
|||
2001-09-19 Richard Henderson <rth@redhat.com>
|
||||
|
||||
* cfg.c (force_nonfallthru_and_redirect): Handle redirecting
|
||||
to the exit block.
|
||||
* Makefile.in (cfg.o): Depend on TM_P_H.
|
||||
|
||||
2001-09-19 Richard Henderson <rth@redhat.com>
|
||||
|
||||
* config/alpha/alpha.c (local_symbol_p): Split out from ...
|
||||
|
|
|
@ -1490,7 +1490,7 @@ flow.o : flow.c $(CONFIG_H) $(SYSTEM_H) $(RTL_H) $(TREE_H) flags.h insn-config.h
|
|||
function.h except.h $(EXPR_H) ssa.h $(GGC_H) $(TM_P_H)
|
||||
cfg.o : cfg.c $(CONFIG_H) $(SYSTEM_H) $(RTL_H) flags.h insn-config.h \
|
||||
$(BASIC_BLOCK_H) $(REGS_H) hard-reg-set.h output.h toplev.h $(RECOG_H) \
|
||||
function.h except.h $(GGC_H)
|
||||
function.h except.h $(GGC_H) $(TM_P_H)
|
||||
cfganal.o : cfganal.c $(CONFIG_H) $(SYSTEM_H) $(RTL_H) \
|
||||
$(BASIC_BLOCK_H) hard-reg-set.h $(GGC_H)
|
||||
cfgbuild.o : cfgbuild.c $(CONFIG_H) $(SYSTEM_H) $(RTL_H) flags.h insn-config.h \
|
||||
|
|
28
gcc/cfg.c
28
gcc/cfg.c
|
@ -64,9 +64,16 @@ Software Foundation, 59 Temple Place - Suite 330, Boston, MA
|
|||
#include "function.h"
|
||||
#include "except.h"
|
||||
#include "toplev.h"
|
||||
|
||||
#include "tm_p.h"
|
||||
#include "obstack.h"
|
||||
|
||||
|
||||
/* Stubs in case we haven't got a return insn. */
|
||||
#ifndef HAVE_return
|
||||
#define HAVE_return 0
|
||||
#define gen_return() NULL_RTX
|
||||
#endif
|
||||
|
||||
/* The obstack on which the flow graph components are allocated. */
|
||||
|
||||
struct obstack flow_obstack;
|
||||
|
@ -1249,7 +1256,6 @@ force_nonfallthru_and_redirect (e, target)
|
|||
basic_block jump_block, new_bb = NULL;
|
||||
rtx note;
|
||||
edge new_edge;
|
||||
rtx label;
|
||||
|
||||
if (e->flags & EDGE_ABNORMAL)
|
||||
abort ();
|
||||
|
@ -1290,10 +1296,20 @@ force_nonfallthru_and_redirect (e, target)
|
|||
else
|
||||
jump_block = e->src;
|
||||
e->flags &= ~EDGE_FALLTHRU;
|
||||
label = block_label (target);
|
||||
emit_jump_insn_after (gen_jump (label), jump_block->end);
|
||||
JUMP_LABEL (jump_block->end) = label;
|
||||
LABEL_NUSES (label)++;
|
||||
if (target == EXIT_BLOCK_PTR)
|
||||
{
|
||||
if (HAVE_return)
|
||||
emit_jump_insn_after (gen_return (), jump_block->end);
|
||||
else
|
||||
abort ();
|
||||
}
|
||||
else
|
||||
{
|
||||
rtx label = block_label (target);
|
||||
emit_jump_insn_after (gen_jump (label), jump_block->end);
|
||||
JUMP_LABEL (jump_block->end) = label;
|
||||
LABEL_NUSES (label)++;
|
||||
}
|
||||
emit_barrier_after (jump_block->end);
|
||||
redirect_edge_succ_nodup (e, target);
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue