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
This commit is contained in:
Jan Hubicka 2006-08-02 11:34:34 +02:00 committed by Jan Hubicka
parent 1ec481b18c
commit 0a4fe58f40
2 changed files with 23 additions and 2 deletions

View file

@ -1,3 +1,9 @@
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>
PR c++/28250

View file

@ -112,6 +112,7 @@ static inline bool stmt_starts_bb_p (tree, tree);
static int tree_verify_flow_info (void);
static void tree_make_forwarder_block (edge);
static void tree_cfg2vcg (FILE *);
static inline void change_bb_for_stmt (tree t, basic_block bb);
/* Flowgraph optimization and cleanup. */
static void tree_merge_blocks (basic_block, basic_block);
@ -1386,7 +1387,7 @@ tree_merge_blocks (basic_block a, basic_block b)
}
else
{
set_bb_for_stmt (bsi_stmt (bsi), a);
change_bb_for_stmt (bsi_stmt (bsi), a);
bsi_next (&bsi);
}
}
@ -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. */
extern block_stmt_iterator
@ -4203,7 +4218,7 @@ tree_split_block (basic_block bb, void *stmt)
new_bb->stmt_list = tsi_split_statement_list_before (&bsi.tsi);
for (tsi_tgt = tsi_start (new_bb->stmt_list);
!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;
}