Commit 1292ec0c by Jan Hubicka Committed by Jeff Law

cfglayout.c (scope_to_insns_initialize): Call set_block_levels.

        * cfglayout.c (scope_to_insns_initialize): Call set_block_levels.
        (scope_to_insns_finalize): Do not call set_block_levels; handle
        sequences.
        (choose_inner_scope): New.
        * rtl.h (choose_inner_scope): Declare.

From-SVN: r54868
parent 0f8e3849
2002-06-20 Jan Hubicka <jh@suse.cz>
* cfglayout.c (scope_to_insns_initialize): Call set_block_levels.
(scope_to_insns_finalize): Do not call set_block_levels; handle
sequences.
(choose_inner_scope): New.
* rtl.h (choose_inner_scope): Declare.
2002-06-20 John David Anglin <dave@hiauly1.hia.nrc.ca> 2002-06-20 John David Anglin <dave@hiauly1.hia.nrc.ca>
* pa-protos.h (pa_asm_output_mi_thunk): Change third argument to * pa-protos.h (pa_asm_output_mi_thunk): Change third argument to
......
...@@ -241,6 +241,10 @@ scope_to_insns_initialize () ...@@ -241,6 +241,10 @@ scope_to_insns_initialize ()
} }
} }
} }
/* Tag the blocks with a depth number so that change_scope can find
the common parent easily. */
set_block_levels (DECL_INITIAL (cfun->decl), 0);
} }
/* For each lexical block, set BLOCK_NUMBER to the depth at which it is /* For each lexical block, set BLOCK_NUMBER to the depth at which it is
...@@ -259,6 +263,20 @@ set_block_levels (block, level) ...@@ -259,6 +263,20 @@ set_block_levels (block, level)
} }
} }
/* Return sope resulting from combination of S1 and S2. */
tree
choose_inner_scope (s1, s2)
tree s1, s2;
{
if (!s1)
return s2;
if (!s2)
return s1;
if (BLOCK_NUMBER (s1) > BLOCK_NUMBER (s2))
return s1;
return s2;
}
/* Emit lexical block notes needed to change scope from S1 to S2. */ /* Emit lexical block notes needed to change scope from S1 to S2. */
static void static void
...@@ -315,10 +333,6 @@ scope_to_insns_finalize () ...@@ -315,10 +333,6 @@ scope_to_insns_finalize ()
tree cur_block = DECL_INITIAL (cfun->decl); tree cur_block = DECL_INITIAL (cfun->decl);
rtx insn, note; rtx insn, note;
/* Tag the blocks with a depth number so that change_scope can find
the common parent easily. */
set_block_levels (cur_block, 0);
insn = get_insns (); insn = get_insns ();
if (!active_insn_p (insn)) if (!active_insn_p (insn))
insn = next_active_insn (insn); insn = next_active_insn (insn);
...@@ -327,6 +341,18 @@ scope_to_insns_finalize () ...@@ -327,6 +341,18 @@ scope_to_insns_finalize ()
tree this_block; tree this_block;
this_block = INSN_SCOPE (insn); this_block = INSN_SCOPE (insn);
/* For sequences compute scope resulting from merging all scopes
of instructions nested inside. */
if (GET_CODE (PATTERN (insn)) == SEQUENCE)
{
int i;
rtx body = PATTERN (insn);
this_block = NULL;
for (i = 0; i < XVECLEN (body, 0); i++)
this_block = choose_inner_scope (this_block,
INSN_SCOPE (XVECEXP (body, 0, i)));
}
if (! this_block) if (! this_block)
continue; continue;
......
...@@ -1414,6 +1414,9 @@ extern rtx next_label PARAMS ((rtx)); ...@@ -1414,6 +1414,9 @@ extern rtx next_label PARAMS ((rtx));
extern rtx next_cc0_user PARAMS ((rtx)); extern rtx next_cc0_user PARAMS ((rtx));
extern rtx prev_cc0_setter PARAMS ((rtx)); extern rtx prev_cc0_setter PARAMS ((rtx));
/* In cfglayout.c */
extern tree choose_inner_scope PARAMS ((tree, tree));
/* In jump.c */ /* In jump.c */
extern rtx next_nondeleted_insn PARAMS ((rtx)); extern rtx next_nondeleted_insn PARAMS ((rtx));
extern enum rtx_code reverse_condition PARAMS ((enum rtx_code)); extern enum rtx_code reverse_condition PARAMS ((enum rtx_code));
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment