From c5cbcccf9019f6ed28209f903245cce9cfc73e40 Mon Sep 17 00:00:00 2001 From: Zdenek Dvorak Date: Fri, 11 Mar 2005 10:05:12 +0100 Subject: basic-block.h (single_succ_p, [...]): New inline functions. * basic-block.h (single_succ_p, single_pred_p, single_succ_edge, single_pred_edge, single_succ, single_pred): New inline functions. * bb-reorder.c (rotate_loop, find_traces_1_round, add_labels_and_missing_jumps, fix_up_fall_thru_edges, duplicate_computed_gotos): Use the single_succ/pred functions. * cfganal.c (forwarder_block_p): Ditto. * cfgbuild.c (compute_outgoing_frequencies): Ditto. * cfgcleanup.c (try_simplify_condjump, try_forward_edges, outgoing_edges_match, try_crossjump_to_edge, try_optimize_cfg, merge_seq_blocks): Ditto. * cfghooks.c (split_edge, tidy_fallthru_edges): Ditto. * cfglayout.c (fixup_reorder_chain): Ditto. * cfgloop.c (mark_single_exit_loops, update_latch_info, canonicalize_loop_headers, verify_loop_structure): Ditto. * cfgloopmanip.c (remove_path, unloop, loop_delete_branch_edge, mfb_update_loops, create_preheader, force_single_succ_latches, create_loop_notes): Ditto. * cfgrtl.c (rtl_can_merge_blocks, try_redirect_by_replacing_jump, force_nonfallthru_and_redirect, rtl_tidy_fallthru_edge, commit_one_edge_insertion, purge_dead_edges, cfg_layout_can_merge_blocks_p): Ditto. * except.c (sjlj_emit_function_enter): Ditto. * flow.c (init_propagate_block_info): Ditto. * function.c (thread_prologue_and_epilogue_insns): Ditto. * gcse.c (find_implicit_sets, bypass_conditional_jumps, insert_insn_end_bb): Ditto. * ifcvt.c (merge_if_block, find_if_block, find_if_case_1, find_if_case_2): Ditto. * lambda-code.c (perfect_nestify): Ditto. * lcm.c (optimize_mode_switching): Ditto. * loop-doloop.c (doloop_modify): Ditto. * loop-init.c (loop_optimizer_init): Ditto. * loop-iv.c (simplify_using_initial_values): Ditto. * loop-unroll.c (unroll_loop_runtime_iterations): Ditto. * loop-unswitch.c (unswitch_loop): Ditto. * modulo-sched.c (generate_prolog_epilog): Ditto. * predict.c (combine_predictions_for_insn, estimate_probability, tree_estimate_probability, last_basic_block_p, estimate_bb_frequencies): Ditto. * profile.c (branch_prob): Ditto. * regrename.c (copyprop_hardreg_forward): Ditto. * sched-rgn.c (is_cfg_nonregular, find_rgns, update_live): Ditto. * tracer.c (layout_superblocks): Ditto. * tree-cfg.c (tree_can_merge_blocks_p, tree_merge_blocks, cfg_remove_useless_stmts_bb, cleanup_control_flow, cleanup_control_expr_graph, disband_implicit_edges, tree_find_edge_insert_loc, bsi_commit_edge_inserts, tree_verify_flow_info, tree_make_forwarder_block, tree_forwarder_block_p, remove_forwarder_block, remove_forwarder_block_with_phi, merge_phi_nodes): Ditto. * tree-if-conv.c (tree_if_conversion): Ditto. * tree-mudflap.c (mf_build_check_statement_for): Ditto. * tree-ssa-dce.c (remove_dead_stmt): Ditto. * tree-ssa-dom.c (dom_opt_finalize_block): Ditto. * tree-ssa-loop-ch.c (should_duplicate_loop_header_p, copy_loop_headers): Ditto. * tree-ssa-loop-im.c (loop_commit_inserts): Ditto. * tree-ssa-loop-ivopts.c (compute_phi_arg_on_exit): Ditto. * tree-ssa-loop-manip.c (split_loop_exit_edge, ip_normal_pos, lv_adjust_loop_entry_edge, tree_ssa_loop_version): Ditto. * tree-ssa-loop-niter.c (simplify_using_initial_conditions): Ditto. * tree-ssa-loop-unswitch.c (simplify_using_entry_checks): Ditto. * tree-ssa-phiopt.c (tree_ssa_phiopt, value_replacement): Ditto. * tree-ssa-pre.c (compute_antic_aux, insert_aux, init_pre): Ditto. * tree-ssa-threadupdate.c (redirect_edges): Ditto. * tree-tailcall.c (independent_of_stmt_p, find_tail_calls, eliminate_tail_call, tree_optimize_tail_calls_1): Ditto. * tree-vect-analyze.c (vect_analyze_loop_form): Ditto. * tree-vect-transform.c (vect_update_ivs_after_vectorizer): Ditto. * tree-vectorizer.c (slpeel_update_phi_nodes_for_guard, slpeel_add_loop_guard): Ditto. From-SVN: r96292 --- gcc/bb-reorder.c | 37 ++++++++++++++++++------------------- 1 file changed, 18 insertions(+), 19 deletions(-) (limited to 'gcc/bb-reorder.c') diff --git a/gcc/bb-reorder.c b/gcc/bb-reorder.c index 0bc2f91..a94c9e4 100644 --- a/gcc/bb-reorder.c +++ b/gcc/bb-reorder.c @@ -385,18 +385,16 @@ rotate_loop (edge back_edge, struct trace *trace, int trace_n) prev_bb->rbi->next = best_bb->rbi->next; /* Try to get rid of uncond jump to cond jump. */ - if (EDGE_COUNT (prev_bb->succs) == 1) + if (single_succ_p (prev_bb)) { - basic_block header = EDGE_SUCC (prev_bb, 0)->dest; + basic_block header = single_succ (prev_bb); /* Duplicate HEADER if it is a small block containing cond jump in the end. */ if (any_condjump_p (BB_END (header)) && copy_bb_p (header, 0) && !find_reg_note (BB_END (header), REG_CROSSING_JUMP, NULL_RTX)) - { - copy_bb (header, EDGE_SUCC (prev_bb, 0), prev_bb, trace_n); - } + copy_bb (header, single_succ_edge (prev_bb), prev_bb, trace_n); } } } @@ -655,7 +653,7 @@ find_traces_1_round (int branch_th, int exec_th, gcov_type count_th, { /* The loop has less than 4 iterations. */ - if (EDGE_COUNT (bb->succs) == 1 + if (single_succ_p (bb) && copy_bb_p (best_edge->dest, !optimize_size)) { bb = copy_bb (best_edge->dest, best_edge, bb, @@ -695,12 +693,13 @@ find_traces_1_round (int branch_th, int exec_th, gcov_type count_th, && (e->flags & EDGE_CAN_FALLTHRU) && !(e->flags & EDGE_COMPLEX) && !e->dest->rbi->visited - && EDGE_COUNT (e->dest->preds) == 1 + && single_pred_p (e->dest) && !(e->flags & EDGE_CROSSING) - && EDGE_COUNT (e->dest->succs) == 1 - && (EDGE_SUCC (e->dest, 0)->flags & EDGE_CAN_FALLTHRU) - && !(EDGE_SUCC (e->dest, 0)->flags & EDGE_COMPLEX) - && EDGE_SUCC (e->dest, 0)->dest == best_edge->dest + && single_succ_p (e->dest) == 1 + && (single_succ_edge (e->dest)->flags + & EDGE_CAN_FALLTHRU) + && !(single_succ_edge (e->dest)->flags & EDGE_COMPLEX) + && single_succ (e->dest) == best_edge->dest && 2 * e->dest->frequency >= EDGE_FREQUENCY (best_edge)) { best_edge = e; @@ -1391,7 +1390,7 @@ add_labels_and_missing_jumps (edge *crossing_edges, int n_crossing_edges) /* bb just falls through. */ { /* make sure there's only one successor */ - gcc_assert (EDGE_COUNT (src->succs) == 1); + gcc_assert (single_succ_p (src)); /* Find label in dest block. */ label = block_label (dest); @@ -1533,7 +1532,7 @@ fix_up_fall_thru_edges (void) partition as bb it's falling through from. */ BB_COPY_PARTITION (new_bb, cur_bb); - EDGE_SUCC (new_bb, 0)->flags |= EDGE_CROSSING; + single_succ_edge (new_bb)->flags |= EDGE_CROSSING; } /* Add barrier after new jump */ @@ -2085,17 +2084,17 @@ duplicate_computed_gotos (void) /* BB must have one outgoing edge. That edge must not lead to the exit block or the next block. The destination must have more than one predecessor. */ - if (EDGE_COUNT(bb->succs) != 1 - || EDGE_SUCC(bb,0)->dest == EXIT_BLOCK_PTR - || EDGE_SUCC(bb,0)->dest == bb->next_bb - || EDGE_COUNT(EDGE_SUCC(bb,0)->dest->preds) <= 1) + if (!single_succ_p (bb) + || single_succ (bb) == EXIT_BLOCK_PTR + || single_succ (bb) == bb->next_bb + || single_pred_p (single_succ (bb))) continue; /* The successor block has to be a duplication candidate. */ - if (!bitmap_bit_p (candidates, EDGE_SUCC(bb,0)->dest->index)) + if (!bitmap_bit_p (candidates, single_succ (bb)->index)) continue; - new_bb = duplicate_block (EDGE_SUCC(bb,0)->dest, EDGE_SUCC(bb,0)); + new_bb = duplicate_block (single_succ (bb), single_succ_edge (bb)); new_bb->rbi->next = bb->rbi->next; bb->rbi->next = new_bb; new_bb->rbi->visited = 1; -- cgit v1.1