diff options
author | Richard Henderson <rth@redhat.com> | 2000-12-20 17:11:31 -0800 |
---|---|---|
committer | Richard Henderson <rth@gcc.gnu.org> | 2000-12-20 17:11:31 -0800 |
commit | 4b01bd1658cc87a0d9a674606b4ae78a3b4594fe (patch) | |
tree | ffba52aed7e19dec753b233566b9ab484e11d29e /gcc/flow.c | |
parent | 1e248ee3875e64165a8a5c928e175603be975ffa (diff) | |
download | gcc-4b01bd1658cc87a0d9a674606b4ae78a3b4594fe.zip gcc-4b01bd1658cc87a0d9a674606b4ae78a3b4594fe.tar.gz gcc-4b01bd1658cc87a0d9a674606b4ae78a3b4594fe.tar.bz2 |
rtl.h (REG_NON_LOCAL_GOTO): New.
* rtl.h (REG_NON_LOCAL_GOTO): New.
* rtl.c (reg_note_name): Update.
* stmt.c (expand_goto): Emit a REG_NON_LOCAL_GOTO note.
* builtins.c (expand_builtin_longjmp): Likewise.
* flow.c (make_edges): Check for REG_NON_LOCAL_GOTO and do
not emit an edge.
From-SVN: r38408
Diffstat (limited to 'gcc/flow.c')
-rw-r--r-- | gcc/flow.c | 15 |
1 files changed, 10 insertions, 5 deletions
@@ -1094,12 +1094,17 @@ make_edges (label_value_list) { rtx tmp; + /* Recognize a non-local goto as a branch outside the + current function. */ + if (find_reg_note (insn, REG_NON_LOCAL_GOTO, NULL_RTX)) + ; + /* ??? Recognize a tablejump and do the right thing. */ - if ((tmp = JUMP_LABEL (insn)) != NULL_RTX - && (tmp = NEXT_INSN (tmp)) != NULL_RTX - && GET_CODE (tmp) == JUMP_INSN - && (GET_CODE (PATTERN (tmp)) == ADDR_VEC - || GET_CODE (PATTERN (tmp)) == ADDR_DIFF_VEC)) + else if ((tmp = JUMP_LABEL (insn)) != NULL_RTX + && (tmp = NEXT_INSN (tmp)) != NULL_RTX + && GET_CODE (tmp) == JUMP_INSN + && (GET_CODE (PATTERN (tmp)) == ADDR_VEC + || GET_CODE (PATTERN (tmp)) == ADDR_DIFF_VEC)) { rtvec vec; int j; |