From 74d7ab557f039cde838e431c610535c57b2476df Mon Sep 17 00:00:00 2001 From: Jason Merrill Date: Fri, 12 Dec 1997 06:12:03 +0000 Subject: 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 --- gcc/ChangeLog | 6 ++++++ 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 + + * 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 * 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))) { -- cgit v1.1