aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJason Merrill <jason@yorick.cygnus.com>1997-12-12 06:12:03 +0000
committerJason Merrill <jason@gcc.gnu.org>1997-12-12 01:12:03 -0500
commit74d7ab557f039cde838e431c610535c57b2476df (patch)
treeef476f447665cee8582d9c733afa3dcaabfcdf21
parent0776059ee03d0974e3f953917ceffc2ea4681a14 (diff)
downloadgcc-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/ChangeLog6
-rw-r--r--gcc/flow.c9
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.
diff --git a/gcc/flow.c b/gcc/flow.c
index 90df30a..720886d 100644
--- a/gcc/flow.c
+++ b/gcc/flow.c
@@ -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)))
{