function.c (instantiate_virtual_regs): Use FOR_EACH_BB and FOR_BB_INSNS_SAFE to iterate through insns.
* function.c (instantiate_virtual_regs): Use FOR_EACH_BB and FOR_BB_INSNS_SAFE to iterate through insns. Re-indent. (pass_instantiate_virtual_regs): Require PROP_cfglayout. * passes.c (init_optimization_passes): Move pass_instantiate_virtual_regs after pass_into_cfg_layout_mode. From-SVN: r171426
This commit is contained in:
parent
c867956724
commit
7114321ee4
3 changed files with 42 additions and 27 deletions
|
@ -1,3 +1,11 @@
|
|||
2011-03-24 Nathan Froyd <froydnj@codesourcery.com>
|
||||
|
||||
* function.c (instantiate_virtual_regs): Use FOR_EACH_BB and
|
||||
FOR_BB_INSNS_SAFE to iterate through insns. Re-indent.
|
||||
(pass_instantiate_virtual_regs): Require PROP_cfglayout.
|
||||
* passes.c (init_optimization_passes): Move
|
||||
pass_instantiate_virtual_regs after pass_into_cfg_layout_mode.
|
||||
|
||||
2011-03-24 Eric Botcazou <ebotcazou@adacore.com>
|
||||
|
||||
* dojump.c (do_jump_by_parts_greater_rtx): Optimize in specific cases.
|
||||
|
|
|
@ -1883,7 +1883,7 @@ instantiate_decls (tree fndecl)
|
|||
static unsigned int
|
||||
instantiate_virtual_regs (void)
|
||||
{
|
||||
rtx insn;
|
||||
basic_block bb;
|
||||
|
||||
/* Compute the offsets to use for this function. */
|
||||
in_arg_offset = FIRST_PARM_OFFSET (current_function_decl);
|
||||
|
@ -1901,33 +1901,40 @@ instantiate_virtual_regs (void)
|
|||
|
||||
/* Scan through all the insns, instantiating every virtual register still
|
||||
present. */
|
||||
for (insn = get_insns (); insn; insn = NEXT_INSN (insn))
|
||||
if (INSN_P (insn))
|
||||
{
|
||||
/* These patterns in the instruction stream can never be recognized.
|
||||
Fortunately, they shouldn't contain virtual registers either. */
|
||||
if (GET_CODE (PATTERN (insn)) == USE
|
||||
|| GET_CODE (PATTERN (insn)) == CLOBBER
|
||||
|| GET_CODE (PATTERN (insn)) == ADDR_VEC
|
||||
|| GET_CODE (PATTERN (insn)) == ADDR_DIFF_VEC
|
||||
|| GET_CODE (PATTERN (insn)) == ASM_INPUT)
|
||||
continue;
|
||||
else if (DEBUG_INSN_P (insn))
|
||||
for_each_rtx (&INSN_VAR_LOCATION (insn),
|
||||
instantiate_virtual_regs_in_rtx, NULL);
|
||||
else
|
||||
instantiate_virtual_regs_in_insn (insn);
|
||||
FOR_EACH_BB (bb)
|
||||
{
|
||||
rtx insn, curr;
|
||||
|
||||
if (INSN_DELETED_P (insn))
|
||||
continue;
|
||||
FOR_BB_INSNS_SAFE (bb, insn, curr)
|
||||
{
|
||||
if (INSN_P (insn))
|
||||
{
|
||||
/* These patterns in the instruction stream can never be recognized.
|
||||
Fortunately, they shouldn't contain virtual registers either. */
|
||||
if (GET_CODE (PATTERN (insn)) == USE
|
||||
|| GET_CODE (PATTERN (insn)) == CLOBBER
|
||||
|| GET_CODE (PATTERN (insn)) == ADDR_VEC
|
||||
|| GET_CODE (PATTERN (insn)) == ADDR_DIFF_VEC
|
||||
|| GET_CODE (PATTERN (insn)) == ASM_INPUT)
|
||||
continue;
|
||||
else if (DEBUG_INSN_P (insn))
|
||||
for_each_rtx (&INSN_VAR_LOCATION (insn),
|
||||
instantiate_virtual_regs_in_rtx, NULL);
|
||||
else
|
||||
instantiate_virtual_regs_in_insn (insn);
|
||||
|
||||
for_each_rtx (®_NOTES (insn), instantiate_virtual_regs_in_rtx, NULL);
|
||||
if (INSN_DELETED_P (insn))
|
||||
continue;
|
||||
|
||||
/* Instantiate any virtual registers in CALL_INSN_FUNCTION_USAGE. */
|
||||
if (CALL_P (insn))
|
||||
for_each_rtx (&CALL_INSN_FUNCTION_USAGE (insn),
|
||||
instantiate_virtual_regs_in_rtx, NULL);
|
||||
}
|
||||
for_each_rtx (®_NOTES (insn), instantiate_virtual_regs_in_rtx, NULL);
|
||||
|
||||
/* Instantiate any virtual registers in CALL_INSN_FUNCTION_USAGE. */
|
||||
if (CALL_P (insn))
|
||||
for_each_rtx (&CALL_INSN_FUNCTION_USAGE (insn),
|
||||
instantiate_virtual_regs_in_rtx, NULL);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* Instantiate the virtual registers in the DECLs for debugging purposes. */
|
||||
instantiate_decls (current_function_decl);
|
||||
|
@ -1963,7 +1970,7 @@ struct rtl_opt_pass pass_instantiate_virtual_regs =
|
|||
NULL, /* next */
|
||||
0, /* static_pass_number */
|
||||
TV_NONE, /* tv_id */
|
||||
0, /* properties_required */
|
||||
PROP_cfglayout, /* properties_required */
|
||||
0, /* properties_provided */
|
||||
0, /* properties_destroyed */
|
||||
0, /* todo_flags_start */
|
||||
|
|
|
@ -956,8 +956,8 @@ init_optimization_passes (void)
|
|||
NEXT_PASS (pass_rtl_eh);
|
||||
NEXT_PASS (pass_initial_value_sets);
|
||||
NEXT_PASS (pass_unshare_all_rtl);
|
||||
NEXT_PASS (pass_instantiate_virtual_regs);
|
||||
NEXT_PASS (pass_into_cfg_layout_mode);
|
||||
NEXT_PASS (pass_instantiate_virtual_regs);
|
||||
NEXT_PASS (pass_jump2);
|
||||
NEXT_PASS (pass_lower_subreg);
|
||||
NEXT_PASS (pass_df_initialize_opt);
|
||||
|
|
Loading…
Add table
Reference in a new issue