diff options
author | Jason Merrill <jason@yorick.cygnus.com> | 1997-12-12 06:12:03 +0000 |
---|---|---|
committer | Jason Merrill <jason@gcc.gnu.org> | 1997-12-12 01:12:03 -0500 |
commit | 74d7ab557f039cde838e431c610535c57b2476df (patch) | |
tree | ef476f447665cee8582d9c733afa3dcaabfcdf21 | |
parent | 0776059ee03d0974e3f953917ceffc2ea4681a14 (diff) | |
download | gcc-74d7ab557f039cde838e431c610535c57b2476df.zip gcc-74d7ab557f039cde838e431c610535c57b2476df.tar.gz gcc-74d7ab557f039cde838e431c610535c57b2476df.tar.bz2 |
flow.c (find_basic_blocks): A CALL_INSN that can throw starts a new basic block.
* flow.c (find_basic_blocks): A CALL_INSN that can throw starts
a new basic block.
(find_basic_blocks_1): Likewise.
From-SVN: r17055
-rw-r--r-- | gcc/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/flow.c | 9 |
2 files changed, 13 insertions, 2 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index d871668..a072e14 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +Thu Dec 11 22:02:10 1997 Jason Merrill <jason@yorick.cygnus.com> + + * flow.c (find_basic_blocks): A CALL_INSN that can throw starts + a new basic block. + (find_basic_blocks_1): Likewise. + Thu Dec 11 21:08:48 1997 Jason Merrill <jason@yorick.cygnus.com> * except.c (use_eh_context): Don't copy_rtx a REG. @@ -304,6 +304,7 @@ flow_analysis (f, nregs, file) { register RTX_CODE prev_code = JUMP_INSN; register RTX_CODE code; + int eh_region = 0; max_uid_for_flow = 0; @@ -316,7 +317,7 @@ flow_analysis (f, nregs, file) || (GET_RTX_CLASS (code) == 'i' && (prev_code == JUMP_INSN || (prev_code == CALL_INSN - && nonlocal_label_list != 0) + && (nonlocal_label_list != 0 || eh_region)) || prev_code == BARRIER))) i++; @@ -325,6 +326,10 @@ flow_analysis (f, nregs, file) if (code != NOTE) prev_code = code; + else if (NOTE_LINE_NUMBER (insn) == NOTE_INSN_EH_REGION_BEG) + ++eh_region; + else if (NOTE_LINE_NUMBER (insn) == NOTE_INSN_EH_REGION_END) + --eh_region; } } @@ -418,7 +423,7 @@ find_basic_blocks (f, nonlocal_label_list) || (GET_RTX_CLASS (code) == 'i' && (prev_code == JUMP_INSN || (prev_code == CALL_INSN - && nonlocal_label_list != 0 + && (nonlocal_label_list != 0 || eh_note) && ! find_reg_note (insn, REG_RETVAL, NULL_RTX)) || prev_code == BARRIER))) { |