aboutsummaryrefslogtreecommitdiff
path: root/gcc/passes.c
diff options
context:
space:
mode:
authorRichard Sandiford <rsandifo@redhat.com>2004-07-26 14:34:19 +0000
committerRichard Sandiford <rsandifo@gcc.gnu.org>2004-07-26 14:34:19 +0000
commit35b6b437aa03e95ab2eb6fa5acaf25e07a9b1433 (patch)
tree4287b222452a3f92e4472b74970cdf9826728da2 /gcc/passes.c
parentfa0a2ae5e38f358c9c1b1480a6c5b291ea5201bd (diff)
downloadgcc-35b6b437aa03e95ab2eb6fa5acaf25e07a9b1433.zip
gcc-35b6b437aa03e95ab2eb6fa5acaf25e07a9b1433.tar.gz
gcc-35b6b437aa03e95ab2eb6fa5acaf25e07a9b1433.tar.bz2
re PR rtl-optimization/16643 (verify_local_live_at_start ICE after crossjumping & cfgcleanup)
PR rtl-optimization/16643 * cfglayout.h (cfg_layout_initialize): Add a flags parameter. * cfglayout.c (cfg_layout_initialize): Pass it to cleanup_cfg. * basic-block.h (reorder_basic_blocks): Add a flags parameter. * cfglayout.c (reorder_basic_blocks): Pass it to cfg_layout_initialize. (partition_hot_cold_basic_blocks): Pass 0 to cfg_layout_initialize. * function.c (thread_prologue_and_epilogue_insns): Likewise. * rtl.h (tracer): Add a flags parameter. * tracer.c (tracer): Pass it to cfg_layout_initialise. * passes.c (rest_of_handle_stack_regs): Pass 0 to reorder_basic_blocks. (rest_of_handle_reorder_blocks): Update calls to tracer and reorder_basic_blocks, passing CLEANUP_UPDATE_LIFE if appropriate. (rest_of_handle_tracer): Pass 0 to tracer. (rest_of_handle_loop2): Pass 0 to cfg_layout_initialize. From-SVN: r85191
Diffstat (limited to 'gcc/passes.c')
-rw-r--r--gcc/passes.c21
1 files changed, 10 insertions, 11 deletions
diff --git a/gcc/passes.c b/gcc/passes.c
index b124b3e..c290ff30 100644
--- a/gcc/passes.c
+++ b/gcc/passes.c
@@ -549,7 +549,7 @@ rest_of_handle_stack_regs (void)
| (flag_crossjumping ? CLEANUP_CROSSJUMP : 0))
&& (flag_reorder_blocks || flag_reorder_blocks_and_partition))
{
- reorder_basic_blocks ();
+ reorder_basic_blocks (0);
cleanup_cfg (CLEANUP_EXPENSIVE | CLEANUP_POST_REGSTACK);
}
}
@@ -734,23 +734,22 @@ static void
rest_of_handle_reorder_blocks (void)
{
bool changed;
+ unsigned int liveness_flags;
+
open_dump_file (DFI_bbro, current_function_decl);
/* Last attempt to optimize CFG, as scheduling, peepholing and insn
splitting possibly introduced more crossjumping opportunities. */
- changed = cleanup_cfg (CLEANUP_EXPENSIVE
- | (!HAVE_conditional_execution
- ? CLEANUP_UPDATE_LIFE : 0));
+ liveness_flags = (!HAVE_conditional_execution ? CLEANUP_UPDATE_LIFE : 0);
+ changed = cleanup_cfg (CLEANUP_EXPENSIVE | liveness_flags);
if (flag_sched2_use_traces && flag_schedule_insns_after_reload)
- tracer ();
+ tracer (liveness_flags);
if (flag_reorder_blocks || flag_reorder_blocks_and_partition)
- reorder_basic_blocks ();
+ reorder_basic_blocks (liveness_flags);
if (flag_reorder_blocks || flag_reorder_blocks_and_partition
|| (flag_sched2_use_traces && flag_schedule_insns_after_reload))
- changed |= cleanup_cfg (CLEANUP_EXPENSIVE
- | (!HAVE_conditional_execution
- ? CLEANUP_UPDATE_LIFE : 0));
+ changed |= cleanup_cfg (CLEANUP_EXPENSIVE | liveness_flags);
/* On conditional execution targets we can not update the life cheaply, so
we deffer the updating to after both cleanups. This may lose some cases
@@ -897,7 +896,7 @@ rest_of_handle_tracer (void)
open_dump_file (DFI_tracer, current_function_decl);
if (dump_file)
dump_flow_info (dump_file);
- tracer ();
+ tracer (0);
cleanup_cfg (CLEANUP_EXPENSIVE);
reg_scan (get_insns (), max_reg_num (), 0);
close_dump_file (DFI_tracer, print_rtl_with_bb, get_insns ());
@@ -1353,7 +1352,7 @@ rest_of_handle_loop2 (void)
dump_flow_info (dump_file);
/* Initialize structures for layout changes. */
- cfg_layout_initialize ();
+ cfg_layout_initialize (0);
loops = loop_optimizer_init (dump_file);