Commit c4d281b2 by Richard Biener Committed by Richard Biener

cfghooks.h (create_basic_block): Replace with two overloads for RTL and GIMPLE.

2015-04-21  Richard Biener  <rguenther@suse.de>

	* cfghooks.h (create_basic_block): Replace with two overloads
	for RTL and GIMPLE.
	(split_block): Likewise.
	* cfghooks.c (split_block): Rename to ...
	(split_block_1): ... this.
	(split_block): Add two type-safe overloads for RTL and GIMPLE.
	(split_block_after_labels): Call split_block_1.
	(create_basic_block): Rename to ...
	(create_basic_block_1): ... this.
	(create_basic_block): Add two type-safe overloads for RTL and GIMPLE.
	(create_empty_bb): Call create_basic_block_1.
	* cfgrtl.c (fixup_fallthru_exit_predecessor): Use
	split_block_after_labels.
	* omp-low.c (expand_parallel_call): Likewise.
	(expand_omp_target): Likewise.
	(simd_clone_adjust): Likewise.
	* tree-chkp.c (chkp_get_entry_block): Likewise.
	* cgraphunit.c (init_lowered_empty_function): Use the GIMPLE
	create_basic_block overload.
	(cgraph_node::expand_thunk): Likewise.
	* tree-cfg.c (make_blocks): Likewise.
	(handle_abnormal_edges): Likewise.
	* tree-inline.c (copy_bb): Likewise.

From-SVN: r222264
parent 8409e468
2015-04-21 Richard Biener <rguenther@suse.de>
* cfghooks.h (create_basic_block): Replace with two overloads
for RTL and GIMPLE.
(split_block): Likewise.
* cfghooks.c (split_block): Rename to ...
(split_block_1): ... this.
(split_block): Add two type-safe overloads for RTL and GIMPLE.
(split_block_after_labels): Call split_block_1.
(create_basic_block): Rename to ...
(create_basic_block_1): ... this.
(create_basic_block): Add two type-safe overloads for RTL and GIMPLE.
(create_empty_bb): Call create_basic_block_1.
* cfgrtl.c (fixup_fallthru_exit_predecessor): Use
split_block_after_labels.
* omp-low.c (expand_parallel_call): Likewise.
(expand_omp_target): Likewise.
(simd_clone_adjust): Likewise.
* tree-chkp.c (chkp_get_entry_block): Likewise.
* cgraphunit.c (init_lowered_empty_function): Use the GIMPLE
create_basic_block overload.
(cgraph_node::expand_thunk): Likewise.
* tree-cfg.c (make_blocks): Likewise.
(handle_abnormal_edges): Likewise.
* tree-inline.c (copy_bb): Likewise.
2015-04-21 Kyrylo Tkachov <kyrylo.tkachov@arm.com> 2015-04-21 Kyrylo Tkachov <kyrylo.tkachov@arm.com>
* config/aarch64/aarch64.md (*<NLOGICAL:optab>_one_cmplsidi3_ze): * config/aarch64/aarch64.md (*<NLOGICAL:optab>_one_cmplsidi3_ze):
......
...@@ -505,8 +505,8 @@ redirect_edge_and_branch_force (edge e, basic_block dest) ...@@ -505,8 +505,8 @@ redirect_edge_and_branch_force (edge e, basic_block dest)
the labels). If I is NULL, splits just after labels. The newly created edge the labels). If I is NULL, splits just after labels. The newly created edge
is returned. The new basic block is created just after the old one. */ is returned. The new basic block is created just after the old one. */
edge static edge
split_block (basic_block bb, void *i) split_block_1 (basic_block bb, void *i)
{ {
basic_block new_bb; basic_block new_bb;
edge res; edge res;
...@@ -550,12 +550,24 @@ split_block (basic_block bb, void *i) ...@@ -550,12 +550,24 @@ split_block (basic_block bb, void *i)
return res; return res;
} }
edge
split_block (basic_block bb, gimple i)
{
return split_block_1 (bb, i);
}
edge
split_block (basic_block bb, rtx i)
{
return split_block_1 (bb, i);
}
/* Splits block BB just after labels. The newly created edge is returned. */ /* Splits block BB just after labels. The newly created edge is returned. */
edge edge
split_block_after_labels (basic_block bb) split_block_after_labels (basic_block bb)
{ {
return split_block (bb, NULL); return split_block_1 (bb, NULL);
} }
/* Moves block BB immediately after block AFTER. Returns false if the /* Moves block BB immediately after block AFTER. Returns false if the
...@@ -696,8 +708,8 @@ split_edge (edge e) ...@@ -696,8 +708,8 @@ split_edge (edge e)
HEAD and END are the first and the last statement belonging HEAD and END are the first and the last statement belonging
to the block. If both are NULL, an empty block is created. */ to the block. If both are NULL, an empty block is created. */
basic_block static basic_block
create_basic_block (void *head, void *end, basic_block after) create_basic_block_1 (void *head, void *end, basic_block after)
{ {
basic_block ret; basic_block ret;
...@@ -714,12 +726,25 @@ create_basic_block (void *head, void *end, basic_block after) ...@@ -714,12 +726,25 @@ create_basic_block (void *head, void *end, basic_block after)
return ret; return ret;
} }
basic_block
create_basic_block (gimple_seq seq, basic_block after)
{
return create_basic_block_1 (seq, NULL, after);
}
basic_block
create_basic_block (rtx head, rtx end, basic_block after)
{
return create_basic_block_1 (head, end, after);
}
/* Creates an empty basic block just after basic block AFTER. */ /* Creates an empty basic block just after basic block AFTER. */
basic_block basic_block
create_empty_bb (basic_block after) create_empty_bb (basic_block after)
{ {
return create_basic_block (NULL, NULL, after); return create_basic_block_1 (NULL, NULL, after);
} }
/* Checks whether we may merge blocks BB1 and BB2. */ /* Checks whether we may merge blocks BB1 and BB2. */
......
...@@ -196,12 +196,14 @@ extern edge redirect_edge_succ_nodup (edge, basic_block); ...@@ -196,12 +196,14 @@ extern edge redirect_edge_succ_nodup (edge, basic_block);
extern bool can_remove_branch_p (const_edge); extern bool can_remove_branch_p (const_edge);
extern void remove_branch (edge); extern void remove_branch (edge);
extern void remove_edge (edge); extern void remove_edge (edge);
extern edge split_block (basic_block, void *); extern edge split_block (basic_block, rtx);
extern edge split_block (basic_block, gimple);
extern edge split_block_after_labels (basic_block); extern edge split_block_after_labels (basic_block);
extern bool move_block_after (basic_block, basic_block); extern bool move_block_after (basic_block, basic_block);
extern void delete_basic_block (basic_block); extern void delete_basic_block (basic_block);
extern basic_block split_edge (edge); extern basic_block split_edge (edge);
extern basic_block create_basic_block (void *, void *, basic_block); extern basic_block create_basic_block (rtx, rtx, basic_block);
extern basic_block create_basic_block (gimple_seq, basic_block);
extern basic_block create_empty_bb (basic_block); extern basic_block create_empty_bb (basic_block);
extern bool can_merge_blocks_p (basic_block, basic_block); extern bool can_merge_blocks_p (basic_block, basic_block);
extern void merge_blocks (basic_block, basic_block); extern void merge_blocks (basic_block, basic_block);
......
...@@ -4047,7 +4047,7 @@ fixup_fallthru_exit_predecessor (void) ...@@ -4047,7 +4047,7 @@ fixup_fallthru_exit_predecessor (void)
edge, we have to split that block. */ edge, we have to split that block. */
if (c == bb) if (c == bb)
{ {
bb = split_block (bb, NULL)->dest; bb = split_block_after_labels (bb)->dest;
bb->aux = c->aux; bb->aux = c->aux;
c->aux = bb; c->aux = bb;
BB_FOOTER (bb) = BB_FOOTER (c); BB_FOOTER (bb) = BB_FOOTER (c);
......
...@@ -1373,7 +1373,7 @@ init_lowered_empty_function (tree decl, bool in_ssa, gcov_type count) ...@@ -1373,7 +1373,7 @@ init_lowered_empty_function (tree decl, bool in_ssa, gcov_type count)
ENTRY_BLOCK_PTR_FOR_FN (cfun)->frequency = REG_BR_PROB_BASE; ENTRY_BLOCK_PTR_FOR_FN (cfun)->frequency = REG_BR_PROB_BASE;
EXIT_BLOCK_PTR_FOR_FN (cfun)->count = count; EXIT_BLOCK_PTR_FOR_FN (cfun)->count = count;
EXIT_BLOCK_PTR_FOR_FN (cfun)->frequency = REG_BR_PROB_BASE; EXIT_BLOCK_PTR_FOR_FN (cfun)->frequency = REG_BR_PROB_BASE;
bb = create_basic_block (NULL, (void *) 0, ENTRY_BLOCK_PTR_FOR_FN (cfun)); bb = create_basic_block (NULL, ENTRY_BLOCK_PTR_FOR_FN (cfun));
bb->count = count; bb->count = count;
bb->frequency = BB_FREQ_MAX; bb->frequency = BB_FREQ_MAX;
e = make_edge (ENTRY_BLOCK_PTR_FOR_FN (cfun), bb, EDGE_FALLTHRU); e = make_edge (ENTRY_BLOCK_PTR_FOR_FN (cfun), bb, EDGE_FALLTHRU);
...@@ -1726,13 +1726,13 @@ cgraph_node::expand_thunk (bool output_asm_thunks, bool force_gimple_thunk) ...@@ -1726,13 +1726,13 @@ cgraph_node::expand_thunk (bool output_asm_thunks, bool force_gimple_thunk)
protect against NULL. We know there will be an protect against NULL. We know there will be an
adjustment, because that's why we're emitting a adjustment, because that's why we're emitting a
thunk. */ thunk. */
then_bb = create_basic_block (NULL, (void *) 0, bb); then_bb = create_basic_block (NULL, bb);
then_bb->count = count - count / 16; then_bb->count = count - count / 16;
then_bb->frequency = BB_FREQ_MAX - BB_FREQ_MAX / 16; then_bb->frequency = BB_FREQ_MAX - BB_FREQ_MAX / 16;
return_bb = create_basic_block (NULL, (void *) 0, then_bb); return_bb = create_basic_block (NULL, then_bb);
return_bb->count = count; return_bb->count = count;
return_bb->frequency = BB_FREQ_MAX; return_bb->frequency = BB_FREQ_MAX;
else_bb = create_basic_block (NULL, (void *) 0, else_bb); else_bb = create_basic_block (NULL, else_bb);
then_bb->count = count / 16; then_bb->count = count / 16;
then_bb->frequency = BB_FREQ_MAX / 16; then_bb->frequency = BB_FREQ_MAX / 16;
add_bb_to_loop (then_bb, bb->loop_father); add_bb_to_loop (then_bb, bb->loop_father);
......
...@@ -4937,7 +4937,7 @@ expand_parallel_call (struct omp_region *region, basic_block bb, ...@@ -4937,7 +4937,7 @@ expand_parallel_call (struct omp_region *region, basic_block bb,
tmp_join = tmp_var; tmp_join = tmp_var;
} }
e = split_block (bb, NULL); e = split_block_after_labels (bb);
cond_bb = e->src; cond_bb = e->src;
bb = e->dest; bb = e->dest;
remove_edge (e); remove_edge (e);
...@@ -9052,7 +9052,7 @@ expand_omp_target (struct omp_region *region) ...@@ -9052,7 +9052,7 @@ expand_omp_target (struct omp_region *region)
tmp_var = create_tmp_var (TREE_TYPE (device)); tmp_var = create_tmp_var (TREE_TYPE (device));
if (offloaded) if (offloaded)
e = split_block (new_bb, NULL); e = split_block_after_labels (new_bb);
else else
{ {
gsi = gsi_last_bb (new_bb); gsi = gsi_last_bb (new_bb);
...@@ -13339,7 +13339,7 @@ simd_clone_adjust (struct cgraph_node *node) ...@@ -13339,7 +13339,7 @@ simd_clone_adjust (struct cgraph_node *node)
e = split_block (incr_bb, gsi_stmt (gsi)); e = split_block (incr_bb, gsi_stmt (gsi));
basic_block latch_bb = e->dest; basic_block latch_bb = e->dest;
basic_block new_exit_bb; basic_block new_exit_bb;
new_exit_bb = split_block (latch_bb, NULL)->dest; new_exit_bb = split_block_after_labels (latch_bb)->dest;
loop->latch = latch_bb; loop->latch = latch_bb;
redirect_edge_succ (FALLTHRU_EDGE (latch_bb), body_bb); redirect_edge_succ (FALLTHRU_EDGE (latch_bb), body_bb);
......
...@@ -542,7 +542,7 @@ make_blocks_1 (gimple_seq seq, basic_block bb) ...@@ -542,7 +542,7 @@ make_blocks_1 (gimple_seq seq, basic_block bb)
{ {
if (!first_stmt_of_seq) if (!first_stmt_of_seq)
gsi_split_seq_before (&i, &seq); gsi_split_seq_before (&i, &seq);
bb = create_basic_block (seq, NULL, bb); bb = create_basic_block (seq, bb);
start_new_block = false; start_new_block = false;
} }
...@@ -748,7 +748,7 @@ handle_abnormal_edges (basic_block *dispatcher_bbs, ...@@ -748,7 +748,7 @@ handle_abnormal_edges (basic_block *dispatcher_bbs,
} }
/* Create the dispatcher bb. */ /* Create the dispatcher bb. */
*dispatcher = create_basic_block (NULL, NULL, for_bb); *dispatcher = create_basic_block (NULL, for_bb);
if (computed_goto) if (computed_goto)
{ {
/* Factor computed gotos into a common computed goto site. Also /* Factor computed gotos into a common computed goto site. Also
......
...@@ -1071,7 +1071,8 @@ static basic_block ...@@ -1071,7 +1071,8 @@ static basic_block
chkp_get_entry_block (void) chkp_get_entry_block (void)
{ {
if (!entry_block) if (!entry_block)
entry_block = split_block (ENTRY_BLOCK_PTR_FOR_FN (cfun), NULL)->dest; entry_block
= split_block_after_labels (ENTRY_BLOCK_PTR_FOR_FN (cfun))->dest;
return entry_block; return entry_block;
} }
......
...@@ -1761,8 +1761,7 @@ copy_bb (copy_body_data *id, basic_block bb, int frequency_scale, ...@@ -1761,8 +1761,7 @@ copy_bb (copy_body_data *id, basic_block bb, int frequency_scale,
/* create_basic_block() will append every new block to /* create_basic_block() will append every new block to
basic_block_info automatically. */ basic_block_info automatically. */
copy_basic_block = create_basic_block (NULL, (void *) 0, copy_basic_block = create_basic_block (NULL, (basic_block) prev->aux);
(basic_block) prev->aux);
copy_basic_block->count = apply_scale (bb->count, count_scale); copy_basic_block->count = apply_scale (bb->count, count_scale);
/* We are going to rebuild frequencies from scratch. These values /* We are going to rebuild frequencies from scratch. These values
......
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