diff options
author | Richard Sandiford <rsandifo@redhat.com> | 2004-07-26 14:34:19 +0000 |
---|---|---|
committer | Richard Sandiford <rsandifo@gcc.gnu.org> | 2004-07-26 14:34:19 +0000 |
commit | 35b6b437aa03e95ab2eb6fa5acaf25e07a9b1433 (patch) | |
tree | 4287b222452a3f92e4472b74970cdf9826728da2 /gcc/passes.c | |
parent | fa0a2ae5e38f358c9c1b1480a6c5b291ea5201bd (diff) | |
download | gcc-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.c | 21 |
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); |