From dacb3cda3208dca940e007cc6b9d259bdede193b Mon Sep 17 00:00:00 2001 From: Steven Bosscher Date: Mon, 12 Mar 2007 19:38:06 +0000 Subject: [PATCH] tree-pass.h (pass_into_cfg_layout_mode, [...]): Declare. * tree-pass.h (pass_into_cfg_layout_mode, pass_outof_cfg_layout_mode): Declare. * cfglayout.c (into_cfg_layout_mode, outof_cfg_layout_mode, pass_into_cfg_layout_mode, pass_outof_cfg_layout_mode): New. * passes.c (pass_into_cfg_layout_mode): Schedule before jump2. (pass_outof_cfg_layout_mode): Schedule after pass_rtl_ifcvt. From-SVN: r122858 --- gcc/ChangeLog | 9 +++++++++ gcc/cfglayout.c | 54 +++++++++++++++++++++++++++++++++++++++++++++++++ gcc/passes.c | 2 ++ gcc/tree-pass.h | 3 +++ 4 files changed, 68 insertions(+) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 17fadea8814e..a9abd65661c9 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,12 @@ +2007-03-12 Steven Bosscher + + * tree-pass.h (pass_into_cfg_layout_mode, + pass_outof_cfg_layout_mode): Declare. + * cfglayout.c (into_cfg_layout_mode, outof_cfg_layout_mode, + pass_into_cfg_layout_mode, pass_outof_cfg_layout_mode): New. + * passes.c (pass_into_cfg_layout_mode): Schedule before jump2. + (pass_outof_cfg_layout_mode): Schedule after pass_rtl_ifcvt. + 2007-03-12 Seongbae Park * c-decl.c (warn_variable_length_array): New function. diff --git a/gcc/cfglayout.c b/gcc/cfglayout.c index bbdd7a25b414..545cc5d77fcd 100644 --- a/gcc/cfglayout.c +++ b/gcc/cfglayout.c @@ -347,6 +347,60 @@ struct tree_opt_pass pass_insn_locators_initialize = 0 /* letter */ }; +static unsigned int +into_cfg_layout_mode (void) +{ + cfg_layout_initialize (0); + return 0; +} + +static unsigned int +outof_cfg_layout_mode (void) +{ + basic_block bb; + + FOR_EACH_BB (bb) + if (bb->next_bb != EXIT_BLOCK_PTR) + bb->aux = bb->next_bb; + + cfg_layout_finalize (); + + return 0; +} + +struct tree_opt_pass pass_into_cfg_layout_mode = +{ + "into_cfglayout", /* name */ + NULL, /* gate */ + into_cfg_layout_mode, /* execute */ + NULL, /* sub */ + NULL, /* next */ + 0, /* static_pass_number */ + 0, /* tv_id */ + 0, /* properties_required */ + 0, /* properties_provided */ + 0, /* properties_destroyed */ + 0, /* todo_flags_start */ + TODO_dump_func, /* todo_flags_finish */ + 0 /* letter */ +}; + +struct tree_opt_pass pass_outof_cfg_layout_mode = +{ + "outof_cfglayout", /* name */ + NULL, /* gate */ + outof_cfg_layout_mode, /* execute */ + NULL, /* sub */ + NULL, /* next */ + 0, /* static_pass_number */ + 0, /* tv_id */ + 0, /* properties_required */ + 0, /* properties_provided */ + 0, /* properties_destroyed */ + 0, /* todo_flags_start */ + TODO_dump_func, /* todo_flags_finish */ + 0 /* letter */ +}; /* For each lexical block, set BLOCK_NUMBER to the depth at which it is found in the block tree. */ diff --git a/gcc/passes.c b/gcc/passes.c index 28bda4441e6c..b93cc6c262f9 100644 --- a/gcc/passes.c +++ b/gcc/passes.c @@ -658,6 +658,7 @@ init_optimization_passes (void) 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_jump2); NEXT_PASS (pass_lower_subreg); NEXT_PASS (pass_cse); @@ -665,6 +666,7 @@ init_optimization_passes (void) NEXT_PASS (pass_gcse); NEXT_PASS (pass_jump_bypass); NEXT_PASS (pass_rtl_ifcvt); + NEXT_PASS (pass_outof_cfg_layout_mode); NEXT_PASS (pass_tracer); /* Perform loop optimizations. It might be better to do them a bit sooner, but we want the profile feedback to work more diff --git a/gcc/tree-pass.h b/gcc/tree-pass.h index 6d4f70748062..ed4fb470dfe8 100644 --- a/gcc/tree-pass.h +++ b/gcc/tree-pass.h @@ -344,6 +344,9 @@ extern struct tree_opt_pass pass_profiling; extern struct tree_opt_pass pass_rtl_ifcvt; extern struct tree_opt_pass pass_tracer; +extern struct tree_opt_pass pass_into_cfg_layout_mode; +extern struct tree_opt_pass pass_outof_cfg_layout_mode; + extern struct tree_opt_pass pass_loop2; extern struct tree_opt_pass pass_rtl_loop_init; extern struct tree_opt_pass pass_rtl_move_loop_invariants;