aboutsummaryrefslogtreecommitdiff
path: root/gcc/tree-outof-ssa.c
diff options
context:
space:
mode:
authorTrevor Saunders <tbsaunde+gcc@tbsaunde.org>2016-07-26 10:44:25 +0000
committerTrevor Saunders <tbsaunde@gcc.gnu.org>2016-07-26 10:44:25 +0000
commit61801db927998bb09c0c5c267869d3bf895d551a (patch)
tree9451504159b3c1b06c6fc8018482b12686923ac5 /gcc/tree-outof-ssa.c
parentc8b1ebd997bf119a89f38d47e4d63153de3d7e66 (diff)
downloadgcc-61801db927998bb09c0c5c267869d3bf895d551a.zip
gcc-61801db927998bb09c0c5c267869d3bf895d551a.tar.gz
gcc-61801db927998bb09c0c5c267869d3bf895d551a.tar.bz2
add a constructor to elim_graph
gcc/ChangeLog: 2016-07-26 Trevor Saunders <tbsaunde+gcc@tbsaunde.org> * tree-outof-ssa.c (struct elim_graph): Change type of members to auto_vec and auto_sbitmap. (elim_graph::elim_graph): New constructor. (delete_elim_graph): Remove. (expand_phi_nodes): Adjust. From-SVN: r238750
Diffstat (limited to 'gcc/tree-outof-ssa.c')
-rw-r--r--gcc/tree-outof-ssa.c64
1 files changed, 16 insertions, 48 deletions
diff --git a/gcc/tree-outof-ssa.c b/gcc/tree-outof-ssa.c
index 5047788..be57ce4 100644
--- a/gcc/tree-outof-ssa.c
+++ b/gcc/tree-outof-ssa.c
@@ -128,23 +128,25 @@ ssa_is_replaceable_p (gimple *stmt)
struct elim_graph
{
+ elim_graph (var_map map);
+
/* Size of the elimination vectors. */
int size;
/* List of nodes in the elimination graph. */
- vec<int> nodes;
+ auto_vec<int> nodes;
/* The predecessor and successor edge list. */
- vec<int> edge_list;
+ auto_vec<int> edge_list;
/* Source locus on each edge */
- vec<source_location> edge_locus;
+ auto_vec<source_location> edge_locus;
/* Visited vector. */
- sbitmap visited;
+ auto_sbitmap visited;
/* Stack for visited nodes. */
- vec<int> stack;
+ auto_vec<int> stack;
/* The variable partition map. */
var_map map;
@@ -153,11 +155,11 @@ struct elim_graph
edge e;
/* List of constant copies to emit. These are pushed on in pairs. */
- vec<int> const_dests;
- vec<tree> const_copies;
+ auto_vec<int> const_dests;
+ auto_vec<tree> const_copies;
/* Source locations for any constant copies. */
- vec<source_location> copy_locus;
+ auto_vec<source_location> copy_locus;
};
@@ -392,25 +394,12 @@ insert_part_to_rtx_on_edge (edge e, rtx dest, int src, source_location locus)
}
-/* Create an elimination graph with SIZE nodes and associated data
- structures. */
+/* Create an elimination graph for map. */
-static elim_graph *
-new_elim_graph (int size)
+elim_graph::elim_graph (var_map map) :
+ nodes (30), edge_list (20), edge_locus (10), visited (map->num_partitions),
+ stack (30), map (map), const_dests (20), const_copies (20), copy_locus (10)
{
- elim_graph *g = (elim_graph *) xmalloc (sizeof (struct elim_graph));
-
- g->nodes.create (30);
- g->const_dests.create (20);
- g->const_copies.create (20);
- g->copy_locus.create (10);
- g->edge_list.create (20);
- g->edge_locus.create (10);
- g->stack.create (30);
-
- g->visited = sbitmap_alloc (size);
-
- return g;
}
@@ -425,24 +414,6 @@ clear_elim_graph (elim_graph *g)
}
-/* Delete elimination graph G. */
-
-static inline void
-delete_elim_graph (elim_graph *g)
-{
- sbitmap_free (g->visited);
- g->stack.release ();
- g->edge_list.release ();
- g->const_copies.release ();
- g->const_dests.release ();
- g->nodes.release ();
- g->copy_locus.release ();
- g->edge_locus.release ();
-
- free (g);
-}
-
-
/* Return the number of nodes in graph G. */
static inline int
@@ -925,8 +896,7 @@ void
expand_phi_nodes (struct ssaexpand *sa)
{
basic_block bb;
- elim_graph *g = new_elim_graph (sa->map->num_partitions);
- g->map = sa->map;
+ elim_graph g (sa->map);
FOR_BB_BETWEEN (bb, ENTRY_BLOCK_PTR_FOR_FN (cfun)->next_bb,
EXIT_BLOCK_PTR_FOR_FN (cfun), next_bb)
@@ -935,7 +905,7 @@ expand_phi_nodes (struct ssaexpand *sa)
edge e;
edge_iterator ei;
FOR_EACH_EDGE (e, ei, bb->preds)
- eliminate_phi (e, g);
+ eliminate_phi (e, &g);
set_phi_nodes (bb, NULL);
/* We can't redirect EH edges in RTL land, so we need to do this
here. Redirection happens only when splitting is necessary,
@@ -961,8 +931,6 @@ expand_phi_nodes (struct ssaexpand *sa)
ei_next (&ei);
}
}
-
- delete_elim_graph (g);
}