Index: gcc/gcc/bb-reorder.c |
diff --git a/gcc/gcc/bb-reorder.c b/gcc/gcc/bb-reorder.c |
index b636c1e3a1dfeffd9e15bda33f433d83977f942e..5f7230f9bcf23b6dc134dfbaa09dd2cb61b59415 100644 |
--- a/gcc/gcc/bb-reorder.c |
+++ b/gcc/gcc/bb-reorder.c |
@@ -1,5 +1,5 @@ |
/* Basic block reordering routines for the GNU compiler. |
- Copyright (C) 2000, 2002, 2003, 2004, 2005, 2006, 2007, 2008 |
+ Copyright (C) 2000, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2010 |
Free Software Foundation, Inc. |
This file is part of GCC. |
@@ -86,10 +86,6 @@ |
#include "tree-pass.h" |
#include "df.h" |
-#ifndef HAVE_conditional_execution |
-#define HAVE_conditional_execution 0 |
-#endif |
- |
/* The number of rounds. In most cases there will only be 4 rounds, but |
when partitioning hot and cold basic blocks into separate sections of |
the .o file there will be an extra round.*/ |
@@ -1378,7 +1374,7 @@ fix_up_fall_thru_edges (void) |
edge_iterator ei; |
/* Find EDGE_CAN_FALLTHRU edge. */ |
- FOR_EACH_EDGE (e, ei, cur_bb->succs) |
+ FOR_EACH_EDGE (e, ei, cur_bb->succs) |
if (e->flags & EDGE_CAN_FALLTHRU) |
{ |
fall_thru = e; |
@@ -1420,7 +1416,7 @@ fix_up_fall_thru_edges (void) |
fall_thru_label = block_label (fall_thru->dest); |
- if (old_jump && fall_thru_label) |
+ if (old_jump && JUMP_P (old_jump) && fall_thru_label) |
invert_worked = invert_jump (old_jump, |
fall_thru_label,0); |
if (invert_worked) |
@@ -1442,7 +1438,7 @@ fix_up_fall_thru_edges (void) |
/* This is the case where both edges out of the basic |
block are crossing edges. Here we will fix up the |
fall through edge. The jump edge will be taken care |
- of later. The EDGE_CROSSING flag of fall_thru edge |
+ of later. The EDGE_CROSSING flag of fall_thru edge |
is unset before the call to force_nonfallthru |
function because if a new basic-block is created |
this edge remains in the current section boundary |
@@ -1985,7 +1981,9 @@ gate_duplicate_computed_gotos (void) |
{ |
if (targetm.cannot_modify_jumps_p ()) |
return false; |
- return (optimize > 0 && flag_expensive_optimizations); |
+ return (optimize > 0 |
+ && flag_expensive_optimizations |
+ && ! optimize_function_for_size_p (cfun)); |
} |
@@ -2076,9 +2074,6 @@ duplicate_computed_gotos (void) |
|| single_pred_p (single_succ (bb))) |
continue; |
- if (!optimize_bb_for_size_p (bb)) |
- continue; |
- |
/* The successor block has to be a duplication candidate. */ |
if (!bitmap_bit_p (candidates, single_succ (bb)->index)) |
continue; |
@@ -2177,7 +2172,6 @@ struct rtl_opt_pass pass_duplicate_computed_gotos = |
static void |
partition_hot_cold_basic_blocks (void) |
{ |
- basic_block cur_bb; |
edge *crossing_edges; |
int n_crossing_edges; |
int max_edges = 2 * last_basic_block; |
@@ -2187,13 +2181,6 @@ partition_hot_cold_basic_blocks (void) |
crossing_edges = XCNEWVEC (edge, max_edges); |
- cfg_layout_initialize (0); |
- |
- FOR_EACH_BB (cur_bb) |
- if (cur_bb->index >= NUM_FIXED_BLOCKS |
- && cur_bb->next_bb->index >= NUM_FIXED_BLOCKS) |
- cur_bb->aux = cur_bb->next_bb; |
- |
find_rarely_executed_basic_blocks_and_crossing_edges (&crossing_edges, |
&n_crossing_edges, |
&max_edges); |
@@ -2202,8 +2189,6 @@ partition_hot_cold_basic_blocks (void) |
fix_edges_for_rarely_executed_code (crossing_edges, n_crossing_edges); |
free (crossing_edges); |
- |
- cfg_layout_finalize (); |
} |
static bool |
@@ -2300,12 +2285,10 @@ struct rtl_opt_pass pass_partition_blocks = |
NULL, /* next */ |
0, /* static_pass_number */ |
TV_REORDER_BLOCKS, /* tv_id */ |
- 0, /* properties_required */ |
+ PROP_cfglayout, /* properties_required */ |
0, /* properties_provided */ |
0, /* properties_destroyed */ |
0, /* todo_flags_start */ |
TODO_dump_func | TODO_verify_rtl_sharing/* todo_flags_finish */ |
} |
}; |
- |
- |