summaryrefslogtreecommitdiff
path: root/gcc/flow.c
diff options
context:
space:
mode:
authorkenner <kenner@138bc75d-0d04-0410-961f-82ee72b054a4>2000-04-15 15:20:58 +0000
committerkenner <kenner@138bc75d-0d04-0410-961f-82ee72b054a4>2000-04-15 15:20:58 +0000
commit8c8b35e212d1bfbcf2ef28ed08605a6bf4e28fc2 (patch)
tree821e1bef737bb762147038f329cc098df7dca708 /gcc/flow.c
parent8a126e61b7f3654a47b3140885100d16ee5d140b (diff)
downloadgcc-8c8b35e212d1bfbcf2ef28ed08605a6bf4e28fc2.tar.gz
* flow.c (count_basic_blocks, find_basic_blocks_1): Remove last change.
* optabs.c (emit_libcall_block): If have REG_EHG_REGION, update region number to -1. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@33164 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/flow.c')
-rw-r--r--gcc/flow.c49
1 files changed, 16 insertions, 33 deletions
diff --git a/gcc/flow.c b/gcc/flow.c
index c0583e87f05..9f7537e3aea 100644
--- a/gcc/flow.c
+++ b/gcc/flow.c
@@ -462,7 +462,6 @@ count_basic_blocks (f)
register int count = 0;
int eh_region = 0;
int call_had_abnormal_edge = 0;
- int in_libcall = 0;
prev_code = JUMP_INSN;
for (insn = f; insn; insn = NEXT_INSN (insn))
@@ -473,17 +472,9 @@ count_basic_blocks (f)
|| (GET_RTX_CLASS (code) == 'i'
&& (prev_code == JUMP_INSN
|| prev_code == BARRIER
- || (prev_code == CALL_INSN
- && call_had_abnormal_edge && in_libcall == 0))))
+ || (prev_code == CALL_INSN && call_had_abnormal_edge))))
count++;
- /* Track whether or not we are in a LIBCALL block. These must
- all be within the same basic block. */
- if (find_reg_note (insn, REG_LIBCALL, NULL_RTX) != 0)
- in_libcall++;
- else if (find_reg_note (insn, REG_RETVAL, NULL_RTX) != 0)
- in_libcall--;
-
/* Record whether this call created an edge. */
if (code == CALL_INSN)
{
@@ -538,7 +529,6 @@ find_basic_blocks_1 (f)
rtx label_value_list = NULL_RTX;
rtx head = NULL_RTX;
rtx end = NULL_RTX;
- int in_libcall = 0;
/* We process the instructions in a slightly different way than we did
previously. This is so that we see a NOTE_BASIC_BLOCK after we have
@@ -671,9 +661,8 @@ find_basic_blocks_1 (f)
call_has_abnormal_edge = 1;
/* A basic block ends at a call that can either throw or
- do a non-local goto. LIBCALLs must reside totally in one
- basic block, so don't end a block after them. */
- if (call_has_abnormal_edge && in_libcall == 0)
+ do a non-local goto. */
+ if (call_has_abnormal_edge)
{
new_bb_inclusive:
if (head == NULL_RTX)
@@ -713,27 +702,21 @@ find_basic_blocks_1 (f)
we know isn't part of any otherwise visible control flow. */
for (note = REG_NOTES (insn); note; note = XEXP (note, 1))
- {
- if (REG_NOTE_KIND (note) == REG_LABEL)
- {
- rtx lab = XEXP (note, 0), next;
+ if (REG_NOTE_KIND (note) == REG_LABEL)
+ {
+ rtx lab = XEXP (note, 0), next;
- if (lab == eh_return_stub_label)
- ;
- else if ((next = next_nonnote_insn (lab)) != NULL
- && GET_CODE (next) == JUMP_INSN
- && (GET_CODE (PATTERN (next)) == ADDR_VEC
- || GET_CODE (PATTERN (next)) == ADDR_DIFF_VEC))
+ if (lab == eh_return_stub_label)
;
- else
- label_value_list
- = alloc_EXPR_LIST (0, XEXP (note, 0), label_value_list);
- }
- else if (REG_NOTE_KIND (note) == REG_LIBCALL)
- in_libcall++;
- else if (REG_NOTE_KIND (note) == REG_RETVAL)
- in_libcall--;
- }
+ else if ((next = next_nonnote_insn (lab)) != NULL
+ && GET_CODE (next) == JUMP_INSN
+ && (GET_CODE (PATTERN (next)) == ADDR_VEC
+ || GET_CODE (PATTERN (next)) == ADDR_DIFF_VEC))
+ ;
+ else
+ label_value_list
+ = alloc_EXPR_LIST (0, XEXP (note, 0), label_value_list);
+ }
}
}