From 7114321ee4f521ea9fbdd08a4c23b361181f3658 Mon Sep 17 00:00:00 2001 From: Nathan Froyd Date: Thu, 24 Mar 2011 23:37:02 +0000 Subject: [PATCH] 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 --- gcc/ChangeLog | 8 +++++++ gcc/function.c | 59 ++++++++++++++++++++++++++++---------------------- gcc/passes.c | 2 +- 3 files changed, 42 insertions(+), 27 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 599a2732393..85c45b61cb8 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,11 @@ +2011-03-24 Nathan Froyd + + * 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 * dojump.c (do_jump_by_parts_greater_rtx): Optimize in specific cases. diff --git a/gcc/function.c b/gcc/function.c index a1ea482acad..49404c873ff 100644 --- a/gcc/function.c +++ b/gcc/function.c @@ -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 */ diff --git a/gcc/passes.c b/gcc/passes.c index 42a323981f7..3353557ec3c 100644 --- a/gcc/passes.c +++ b/gcc/passes.c @@ -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); -- 2.30.2