diff options
author | Trevor Saunders <tbsaunde+gcc@tbsaunde.org> | 2016-07-26 10:44:08 +0000 |
---|---|---|
committer | Trevor Saunders <tbsaunde@gcc.gnu.org> | 2016-07-26 10:44:08 +0000 |
commit | 7ba9e72de95e7eece69bfff744df14b866280f9d (patch) | |
tree | ff74117885135e87c9fc9ad721f0180a6471bafc /gcc/modulo-sched.c | |
parent | 62e2078514e307bc1b9fecff29977a5476fc7c45 (diff) | |
download | gcc-7ba9e72de95e7eece69bfff744df14b866280f9d.zip gcc-7ba9e72de95e7eece69bfff744df14b866280f9d.tar.gz gcc-7ba9e72de95e7eece69bfff744df14b866280f9d.tar.bz2 |
use auto_sbitmap in various places
gcc/ChangeLog:
2016-07-26 Trevor Saunders <tbsaunde+gcc@tbsaunde.org>
* bt-load.c (compute_out): Use auto_sbitmap class.
(link_btr_uses): Likewise.
* cfganal.c (mark_dfs_back_edges): Likewise.
(post_order_compute): Likewise.
(inverted_post_order_compute): Likewise.
(pre_and_rev_post_order_compute_fn): Likewise.
(single_pred_before_succ_order): Likewise.
* cfgexpand.c (pass_expand::execute): Likewise.
* cfgloop.c (verify_loop_structure): Likewise.
* cfgloopmanip.c (fix_bb_placements): Likewise.
(remove_path): Likewise.
(update_dominators_in_loop): Likewise.
* cfgrtl.c (break_superblocks): Likewise.
* ddg.c (check_sccs): Likewise.
(create_ddg_all_sccs): Likewise.
* df-core.c (df_worklist_dataflow): Likewise.
* dse.c (dse_step3): Likewise.
* except.c (eh_region_outermost): Likewise.
* function.c (thread_prologue_and_epilogue_insns): Likewise.
* gcse.c (prune_expressions): Likewise.
(prune_insertions_deletions): Likewise.
* gimple-ssa-backprop.c (backprop::~backprop): Likewise.
* graph.c (draw_cfg_nodes_no_loops): Likewise.
* ira-lives.c (remove_some_program_points_and_update_live_ranges): Likewise.
* lcm.c (compute_earliest): Likewise.
(compute_farthest): Likewise.
* loop-unroll.c (unroll_loop_constant_iterations): Likewise.
(unroll_loop_runtime_iterations): Likewise.
(unroll_loop_stupid): Likewise.
* lower-subreg.c (decompose_multiword_subregs): Likewise.
* lra-lives.c: Likewise.
* lra.c (lra): Likewise.
* modulo-sched.c (schedule_reg_moves): Likewise.
(optimize_sc): Likewise.
(get_sched_window): Likewise.
(sms_schedule_by_order): Likewise.
(check_nodes_order): Likewise.
(order_nodes_of_sccs): Likewise.
(order_nodes_in_scc): Likewise.
* recog.c (split_all_insns): Likewise.
* regcprop.c (pass_cprop_hardreg::execute): Likewise.
* reload1.c (reload): Likewise.
* sched-rgn.c (haifa_find_rgns): Likewise.
(split_edges): Likewise.
(compute_trg_info): Likewise.
* sel-sched.c (init_seqno): Likewise.
* store-motion.c (remove_reachable_equiv_notes): Likewise.
* tree-into-ssa.c (update_ssa): Likewise.
* tree-ssa-live.c (live_worklist): Likewise.
* tree-ssa-loop-im.c (fill_always_executed_in): Likewise.
* tree-ssa-loop-ivcanon.c (try_unroll_loop_completely):
* Likewise.
(try_peel_loop): Likewise.
* tree-ssa-loop-manip.c (tree_transform_and_unroll_loop):
* Likewise.
* tree-ssa-pre.c (compute_antic): Likewise.
* tree-ssa-reassoc.c (undistribute_ops_list): Likewise.
* tree-stdarg.c (reachable_at_most_once): Likewise.
* tree-vect-slp.c (vect_attempt_slp_rearrange_stmts): Likewise.
* var-tracking.c (vt_find_locations): Likewise.
From-SVN: r238748
Diffstat (limited to 'gcc/modulo-sched.c')
-rw-r--r-- | gcc/modulo-sched.c | 78 |
1 files changed, 24 insertions, 54 deletions
diff --git a/gcc/modulo-sched.c b/gcc/modulo-sched.c index 5dde66c..6e87a6f 100644 --- a/gcc/modulo-sched.c +++ b/gcc/modulo-sched.c @@ -682,7 +682,6 @@ schedule_reg_moves (partial_schedule_ptr ps) rtx prev_reg, old_reg; int first_move; int distances[2]; - sbitmap must_follow; sbitmap distance1_uses; rtx set = single_set (u->insn); @@ -792,12 +791,11 @@ schedule_reg_moves (partial_schedule_ptr ps) } } - must_follow = sbitmap_alloc (first_move + nreg_moves); + auto_sbitmap must_follow (first_move + nreg_moves); for (i_reg_move = 0; i_reg_move < nreg_moves; i_reg_move++) if (!schedule_reg_move (ps, first_move + i_reg_move, distance1_uses, must_follow)) break; - sbitmap_free (must_follow); if (distance1_uses) sbitmap_free (distance1_uses); if (i_reg_move < nreg_moves) @@ -927,7 +925,6 @@ static bool optimize_sc (partial_schedule_ptr ps, ddg_ptr g) { int amount = PS_MIN_CYCLE (ps); - sbitmap sched_nodes = sbitmap_alloc (g->num_nodes); int start, end, step; int ii = ps->ii; bool ok = false; @@ -944,8 +941,7 @@ optimize_sc (partial_schedule_ptr ps, ddg_ptr g) if (dump_file) fprintf (dump_file, "SMS SC already optimized.\n"); - ok = false; - goto clear; + return false; } if (dump_file) @@ -967,11 +963,9 @@ optimize_sc (partial_schedule_ptr ps, ddg_ptr g) } if (SMODULO (SCHED_TIME (g->closing_branch->cuid), ii) == ii - 1) - { - ok = true; - goto clear; - } + return true; + auto_sbitmap sched_nodes (g->num_nodes); bitmap_ones (sched_nodes); /* Calculate the new placement of the branch. It should be in row @@ -984,7 +978,7 @@ optimize_sc (partial_schedule_ptr ps, ddg_ptr g) int branch_cycle = SCHED_TIME (g->closing_branch->cuid); int row = SMODULO (branch_cycle, ps->ii); int num_splits = 0; - sbitmap must_precede, must_follow, tmp_precede, tmp_follow; + sbitmap tmp_precede, tmp_follow; int min_cycle, c; if (dump_file) @@ -1000,11 +994,10 @@ optimize_sc (partial_schedule_ptr ps, ddg_ptr g) gcc_assert (c >= start); if (c >= end) { - ok = false; if (dump_file) fprintf (dump_file, "SMS failed to schedule branch at cycle: %d\n", c); - goto clear; + return false; } } else @@ -1017,13 +1010,12 @@ optimize_sc (partial_schedule_ptr ps, ddg_ptr g) if (dump_file) fprintf (dump_file, "SMS failed to schedule branch at cycle: %d\n", c); - ok = false; - goto clear; + return false; } } - must_precede = sbitmap_alloc (g->num_nodes); - must_follow = sbitmap_alloc (g->num_nodes); + auto_sbitmap must_precede (g->num_nodes); + auto_sbitmap must_follow (g->num_nodes); /* Try to schedule the branch is it's new cycle. */ calculate_must_precede_follow (g->closing_branch, start, end, @@ -1083,13 +1075,8 @@ optimize_sc (partial_schedule_ptr ps, ddg_ptr g) /* This might have been added to a new first stage. */ if (PS_MIN_CYCLE (ps) < min_cycle) reset_sched_times (ps, 0); - - free (must_precede); - free (must_follow); } -clear: - free (sched_nodes); return ok; } @@ -1866,8 +1853,8 @@ get_sched_window (partial_schedule_ptr ps, ddg_node_ptr u_node, int start, step, end; int early_start, late_start; ddg_edge_ptr e; - sbitmap psp = sbitmap_alloc (ps->g->num_nodes); - sbitmap pss = sbitmap_alloc (ps->g->num_nodes); + auto_sbitmap psp (ps->g->num_nodes); + auto_sbitmap pss (ps->g->num_nodes); sbitmap u_node_preds = NODE_PREDECESSORS (u_node); sbitmap u_node_succs = NODE_SUCCESSORS (u_node); int psp_not_empty; @@ -1996,8 +1983,6 @@ get_sched_window (partial_schedule_ptr ps, ddg_node_ptr u_node, *start_p = start; *step_p = step; *end_p = end; - sbitmap_free (psp); - sbitmap_free (pss); if ((start >= end && step == 1) || (start <= end && step == -1)) { @@ -2146,10 +2131,10 @@ sms_schedule_by_order (ddg_ptr g, int mii, int maxii, int *nodes_order) int flush_and_start_over = true; int num_nodes = g->num_nodes; int start, end, step; /* Place together into one struct? */ - sbitmap sched_nodes = sbitmap_alloc (num_nodes); - sbitmap must_precede = sbitmap_alloc (num_nodes); - sbitmap must_follow = sbitmap_alloc (num_nodes); - sbitmap tobe_scheduled = sbitmap_alloc (num_nodes); + auto_sbitmap sched_nodes (num_nodes); + auto_sbitmap must_precede (num_nodes); + auto_sbitmap must_follow (num_nodes); + auto_sbitmap tobe_scheduled (num_nodes); partial_schedule_ptr ps = create_partial_schedule (ii, g, DFA_HISTORY); @@ -2260,11 +2245,6 @@ sms_schedule_by_order (ddg_ptr g, int mii, int maxii, int *nodes_order) else gcc_assert (bitmap_equal_p (tobe_scheduled, sched_nodes)); - sbitmap_free (sched_nodes); - sbitmap_free (must_precede); - sbitmap_free (must_follow); - sbitmap_free (tobe_scheduled); - return ps; } @@ -2474,7 +2454,7 @@ static void check_nodes_order (int *node_order, int num_nodes) { int i; - sbitmap tmp = sbitmap_alloc (num_nodes); + auto_sbitmap tmp (num_nodes); bitmap_clear (tmp); @@ -2494,8 +2474,6 @@ check_nodes_order (int *node_order, int num_nodes) if (dump_file) fprintf (dump_file, "\n"); - - sbitmap_free (tmp); } /* Order the nodes of G for scheduling and pass the result in @@ -2539,10 +2517,10 @@ order_nodes_of_sccs (ddg_all_sccs_ptr all_sccs, int * node_order) int i, pos = 0; ddg_ptr g = all_sccs->ddg; int num_nodes = g->num_nodes; - sbitmap prev_sccs = sbitmap_alloc (num_nodes); - sbitmap on_path = sbitmap_alloc (num_nodes); - sbitmap tmp = sbitmap_alloc (num_nodes); - sbitmap ones = sbitmap_alloc (num_nodes); + auto_sbitmap prev_sccs (num_nodes); + auto_sbitmap on_path (num_nodes); + auto_sbitmap tmp (num_nodes); + auto_sbitmap ones (num_nodes); bitmap_clear (prev_sccs); bitmap_ones (ones); @@ -2575,10 +2553,6 @@ order_nodes_of_sccs (ddg_all_sccs_ptr all_sccs, int * node_order) bitmap_and_compl (tmp, ones, prev_sccs); pos = order_nodes_in_scc (g, prev_sccs, tmp, node_order, pos); } - sbitmap_free (prev_sccs); - sbitmap_free (on_path); - sbitmap_free (tmp); - sbitmap_free (ones); } /* MII is needed if we consider backarcs (that do not close recursive cycles). */ @@ -2739,11 +2713,11 @@ order_nodes_in_scc (ddg_ptr g, sbitmap nodes_ordered, sbitmap scc, { enum sms_direction dir; int num_nodes = g->num_nodes; - sbitmap workset = sbitmap_alloc (num_nodes); - sbitmap tmp = sbitmap_alloc (num_nodes); + auto_sbitmap workset (num_nodes); + auto_sbitmap tmp (num_nodes); sbitmap zero_bitmap = sbitmap_alloc (num_nodes); - sbitmap predecessors = sbitmap_alloc (num_nodes); - sbitmap successors = sbitmap_alloc (num_nodes); + auto_sbitmap predecessors (num_nodes); + auto_sbitmap successors (num_nodes); bitmap_clear (predecessors); find_predecessors (predecessors, g, nodes_ordered); @@ -2823,11 +2797,7 @@ order_nodes_in_scc (ddg_ptr g, sbitmap nodes_ordered, sbitmap scc, bitmap_and (workset, successors, scc); } } - sbitmap_free (tmp); - sbitmap_free (workset); sbitmap_free (zero_bitmap); - sbitmap_free (predecessors); - sbitmap_free (successors); return pos; } |