Commit 0a4fe58f by Jan Hubicka Committed by Jan Hubicka

PR gcov/profile/28480

	PR gcov/profile/28480
	* tree-cfg.c (change_bb_for_stmt): New function.
	(tree_merge_blocks, tree_split_blocks): Use it.

From-SVN: r115873
parent 1ec481b1
2006-08-02 Jan Hubicka <jh@suse.cz>
PR gcov/profile/28480
* tree-cfg.c (change_bb_for_stmt): New function.
(tree_merge_blocks, tree_split_blocks): Use it.
2006-08-01 Volker Reichelt <reichelt@igpm.rwth-aachen.de> 2006-08-01 Volker Reichelt <reichelt@igpm.rwth-aachen.de>
PR c++/28250 PR c++/28250
......
...@@ -112,6 +112,7 @@ static inline bool stmt_starts_bb_p (tree, tree); ...@@ -112,6 +112,7 @@ static inline bool stmt_starts_bb_p (tree, tree);
static int tree_verify_flow_info (void); static int tree_verify_flow_info (void);
static void tree_make_forwarder_block (edge); static void tree_make_forwarder_block (edge);
static void tree_cfg2vcg (FILE *); static void tree_cfg2vcg (FILE *);
static inline void change_bb_for_stmt (tree t, basic_block bb);
/* Flowgraph optimization and cleanup. */ /* Flowgraph optimization and cleanup. */
static void tree_merge_blocks (basic_block, basic_block); static void tree_merge_blocks (basic_block, basic_block);
...@@ -1386,7 +1387,7 @@ tree_merge_blocks (basic_block a, basic_block b) ...@@ -1386,7 +1387,7 @@ tree_merge_blocks (basic_block a, basic_block b)
} }
else else
{ {
set_bb_for_stmt (bsi_stmt (bsi), a); change_bb_for_stmt (bsi_stmt (bsi), a);
bsi_next (&bsi); bsi_next (&bsi);
} }
} }
...@@ -2778,6 +2779,20 @@ set_bb_for_stmt (tree t, basic_block bb) ...@@ -2778,6 +2779,20 @@ set_bb_for_stmt (tree t, basic_block bb)
} }
} }
/* Faster version of set_bb_for_stmt that assume that statement is being moved
from one basic block to another.
For BB splitting we can run into quadratic case, so performance is quite
important and knowing that the tables are big enought, change_bb_for_stmt
can inline as leaf function. */
static inline void
change_bb_for_stmt (tree t, basic_block bb)
{
get_stmt_ann (t)->bb = bb;
if (TREE_CODE (t) == LABEL_EXPR)
VEC_replace (basic_block, label_to_block_map,
LABEL_DECL_UID (LABEL_EXPR_LABEL (t)), bb);
}
/* Finds iterator for STMT. */ /* Finds iterator for STMT. */
extern block_stmt_iterator extern block_stmt_iterator
...@@ -4203,7 +4218,7 @@ tree_split_block (basic_block bb, void *stmt) ...@@ -4203,7 +4218,7 @@ tree_split_block (basic_block bb, void *stmt)
new_bb->stmt_list = tsi_split_statement_list_before (&bsi.tsi); new_bb->stmt_list = tsi_split_statement_list_before (&bsi.tsi);
for (tsi_tgt = tsi_start (new_bb->stmt_list); for (tsi_tgt = tsi_start (new_bb->stmt_list);
!tsi_end_p (tsi_tgt); tsi_next (&tsi_tgt)) !tsi_end_p (tsi_tgt); tsi_next (&tsi_tgt))
set_bb_for_stmt (tsi_stmt (tsi_tgt), new_bb); change_bb_for_stmt (tsi_stmt (tsi_tgt), new_bb);
return new_bb; return new_bb;
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment