From ad21dab7f7977e9741b7bdace4645ae365f45b01 Mon Sep 17 00:00:00 2001 From: Steven Bosscher Date: Fri, 23 Mar 2007 23:05:28 +0000 Subject: tracer.c (tracer): Don't take FLAGS argument. * tracer.c (tracer): Don't take FLAGS argument. Assert we are in cfglayout mode. Don't go into and out of cfglayout mode. Link the blocks in the order of the constructed traces. (rest_of_handle_tracer): Adjust call to tracer. * loop-init.c (rtl_loop_init): Assert we are in cfglayout mode. Don't go into cfglayout mode. (rtl_loop_done): Don't go out of cfglayout mode. * cfglayout.c (relink_block_chain): New function, split out from... (fixup_reorder_chain): ...here. Remove redundant checking. (cfg_layout_finalize): Don't clear the header, footer, and aux fields here, move the code to do so to relink_block_chain. Likewise for free_original_copy_tables. * rtl.h (tracer): Update prototype. * bb-reorder.c (reorder_basic_blocks): Don't take FLAGS argument. Assert we are in cfglayout mode. Don't go into and out of cfglayout mode. Use relink_block_chain to serialize the CFG according to the new basic block order. Move targetm.cannot_modify_jumps_p check from here... (gate_handle_reorder_blocks): ...to here. (duplicate_computed_gotos): Move targetm.cannot_modify_jumps_p check from here... (gate_duplicate_computed_gotos): ...to here. (rest_of_handle_reorder_blocks): Don't see if anything has changed, something always changes when going into and out of cfglayout mode. Perform an expensive cfg cleanup while going into cfglayout mode. Always update liveness information on HAVE_conditional_execution targets. Reserialize the basic blocks and go out of cfglayout mode. * reg-stack.c: Include cfglayout.h. (rest_of_handle_stack_regs): Go into and out of cfglayout mode around the call to reorder_basic_blocks. * basic-block.h (reorder_basic_blocks): Update prototype. (relink_block_chain): New prototype. * passes.c (pass_outof_cfg_layout_mode): Move after cse2. From-SVN: r123167 --- gcc/ifcvt.c | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) (limited to 'gcc/ifcvt.c') diff --git a/gcc/ifcvt.c b/gcc/ifcvt.c index 9df57bb..70d4ef4 100644 --- a/gcc/ifcvt.c +++ b/gcc/ifcvt.c @@ -2711,13 +2711,18 @@ cond_move_process_if_block (struct ce_if_block *ce_info) static int process_if_block (struct ce_if_block * ce_info) { - if (! reload_completed - && noce_process_if_block (ce_info)) - return TRUE; + /* Only perform the noce transformations before register allocation. + They could be made to run later, but this would require a lot of + work, and it doesn't seem to be worth it. */ + if (! reload_completed) + { + if (noce_process_if_block (ce_info)) + return TRUE; - if (HAVE_conditional_move - && cond_move_process_if_block (ce_info)) - return TRUE; + if (HAVE_conditional_move + && cond_move_process_if_block (ce_info)) + return TRUE; + } if (HAVE_conditional_execution && reload_completed) { -- cgit v1.1