From c4d281b29a03c1e7637936434a04e9a419f22c00 Mon Sep 17 00:00:00 2001 From: Richard Biener Date: Tue, 21 Apr 2015 11:40:46 +0000 Subject: [PATCH] cfghooks.h (create_basic_block): Replace with two overloads for RTL and GIMPLE. 2015-04-21 Richard Biener * 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 --- gcc/ChangeLog | 26 ++++++++++++++++++++++++++ gcc/cfghooks.c | 37 +++++++++++++++++++++++++++++++------ gcc/cfghooks.h | 6 ++++-- gcc/cfgrtl.c | 2 +- gcc/cgraphunit.c | 8 ++++---- gcc/omp-low.c | 6 +++--- gcc/tree-cfg.c | 4 ++-- gcc/tree-chkp.c | 3 ++- gcc/tree-inline.c | 3 +-- 9 files changed, 74 insertions(+), 21 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 2a982b1bd7f..6970232d8d1 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,29 @@ +2015-04-21 Richard Biener + + * 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 * config/aarch64/aarch64.md (*_one_cmplsidi3_ze): diff --git a/gcc/cfghooks.c b/gcc/cfghooks.c index abeab8cf1a5..fc23edbd882 100644 --- a/gcc/cfghooks.c +++ b/gcc/cfghooks.c @@ -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 is returned. The new basic block is created just after the old one. */ -edge -split_block (basic_block bb, void *i) +static edge +split_block_1 (basic_block bb, void *i) { basic_block new_bb; edge res; @@ -550,12 +550,24 @@ split_block (basic_block bb, void *i) 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. */ edge 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 @@ -696,8 +708,8 @@ split_edge (edge e) HEAD and END are the first and the last statement belonging to the block. If both are NULL, an empty block is created. */ -basic_block -create_basic_block (void *head, void *end, basic_block after) +static basic_block +create_basic_block_1 (void *head, void *end, basic_block after) { basic_block ret; @@ -714,12 +726,25 @@ create_basic_block (void *head, void *end, basic_block after) 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. */ basic_block 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. */ diff --git a/gcc/cfghooks.h b/gcc/cfghooks.h index 4a1340e392c..a8fbe5d8d30 100644 --- a/gcc/cfghooks.h +++ b/gcc/cfghooks.h @@ -196,12 +196,14 @@ extern edge redirect_edge_succ_nodup (edge, basic_block); extern bool can_remove_branch_p (const_edge); extern void remove_branch (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 bool move_block_after (basic_block, basic_block); extern void delete_basic_block (basic_block); 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 bool can_merge_blocks_p (basic_block, basic_block); extern void merge_blocks (basic_block, basic_block); diff --git a/gcc/cfgrtl.c b/gcc/cfgrtl.c index 46fd9588da5..633c7626de6 100644 --- a/gcc/cfgrtl.c +++ b/gcc/cfgrtl.c @@ -4047,7 +4047,7 @@ fixup_fallthru_exit_predecessor (void) edge, we have to split that block. */ if (c == bb) { - bb = split_block (bb, NULL)->dest; + bb = split_block_after_labels (bb)->dest; bb->aux = c->aux; c->aux = bb; BB_FOOTER (bb) = BB_FOOTER (c); diff --git a/gcc/cgraphunit.c b/gcc/cgraphunit.c index 2315ba84bb7..0a50f61a384 100644 --- a/gcc/cgraphunit.c +++ b/gcc/cgraphunit.c @@ -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; EXIT_BLOCK_PTR_FOR_FN (cfun)->count = count; 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->frequency = BB_FREQ_MAX; 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) protect against NULL. We know there will be an adjustment, because that's why we're emitting a 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->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->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->frequency = BB_FREQ_MAX / 16; add_bb_to_loop (then_bb, bb->loop_father); diff --git a/gcc/omp-low.c b/gcc/omp-low.c index 835ff71391f..34e2e5c9ef1 100644 --- a/gcc/omp-low.c +++ b/gcc/omp-low.c @@ -4937,7 +4937,7 @@ expand_parallel_call (struct omp_region *region, basic_block bb, tmp_join = tmp_var; } - e = split_block (bb, NULL); + e = split_block_after_labels (bb); cond_bb = e->src; bb = e->dest; remove_edge (e); @@ -9052,7 +9052,7 @@ expand_omp_target (struct omp_region *region) tmp_var = create_tmp_var (TREE_TYPE (device)); if (offloaded) - e = split_block (new_bb, NULL); + e = split_block_after_labels (new_bb); else { gsi = gsi_last_bb (new_bb); @@ -13339,7 +13339,7 @@ simd_clone_adjust (struct cgraph_node *node) e = split_block (incr_bb, gsi_stmt (gsi)); basic_block latch_bb = e->dest; 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; redirect_edge_succ (FALLTHRU_EDGE (latch_bb), body_bb); diff --git a/gcc/tree-cfg.c b/gcc/tree-cfg.c index 492962957f3..988ab2af91b 100644 --- a/gcc/tree-cfg.c +++ b/gcc/tree-cfg.c @@ -542,7 +542,7 @@ make_blocks_1 (gimple_seq seq, basic_block bb) { if (!first_stmt_of_seq) gsi_split_seq_before (&i, &seq); - bb = create_basic_block (seq, NULL, bb); + bb = create_basic_block (seq, bb); start_new_block = false; } @@ -748,7 +748,7 @@ handle_abnormal_edges (basic_block *dispatcher_bbs, } /* Create the dispatcher bb. */ - *dispatcher = create_basic_block (NULL, NULL, for_bb); + *dispatcher = create_basic_block (NULL, for_bb); if (computed_goto) { /* Factor computed gotos into a common computed goto site. Also diff --git a/gcc/tree-chkp.c b/gcc/tree-chkp.c index ebb9a836e5e..288470bbe57 100644 --- a/gcc/tree-chkp.c +++ b/gcc/tree-chkp.c @@ -1071,7 +1071,8 @@ static basic_block chkp_get_entry_block (void) { 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; } diff --git a/gcc/tree-inline.c b/gcc/tree-inline.c index 42ddb9f47ed..71d75d9df51 100644 --- a/gcc/tree-inline.c +++ b/gcc/tree-inline.c @@ -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 basic_block_info automatically. */ - copy_basic_block = create_basic_block (NULL, (void *) 0, - (basic_block) prev->aux); + copy_basic_block = create_basic_block (NULL, (basic_block) prev->aux); copy_basic_block->count = apply_scale (bb->count, count_scale); /* We are going to rebuild frequencies from scratch. These values -- 2.30.2