From 2c41c19d5dfc3de0c0b149dc0846c08422c5dded Mon Sep 17 00:00:00 2001 From: Richard Biener Date: Thu, 2 May 2013 13:59:38 +0000 Subject: [PATCH] graphds.h (struct graph): Add obstack member. 2013-05-02 Richard Biener * graphds.h (struct graph): Add obstack member. * graphds.c (new_graph): Initialize obstack and allocate vertices from it. (add_edge): Allocate edge from the obstack. (free_graph): Free the obstack instead of all edges and vertices. From-SVN: r198539 --- gcc/ChangeLog | 9 +++++++++ gcc/graphds.c | 22 +++++----------------- gcc/graphds.h | 6 +++--- 3 files changed, 17 insertions(+), 20 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 023c6b924b4..cf3c3e375af 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,12 @@ +2013-05-02 Richard Biener + + * graphds.h (struct graph): Add obstack member. + * graphds.c (new_graph): Initialize obstack and allocate + vertices from it. + (add_edge): Allocate edge from the obstack. + (free_graph): Free the obstack instead of all edges and + vertices. + 2013-05-02 Teresa Johnson * loop-unswitch.c (unswitch_loop): Use helper routines with rounding diff --git a/gcc/graphds.c b/gcc/graphds.c index 3d64d8988cd..d009c1375c2 100644 --- a/gcc/graphds.c +++ b/gcc/graphds.c @@ -58,8 +58,10 @@ new_graph (int n_vertices) { struct graph *g = XNEW (struct graph); + gcc_obstack_init (&g->ob); g->n_vertices = n_vertices; - g->vertices = XCNEWVEC (struct vertex, n_vertices); + g->vertices = XOBNEWVEC (&g->ob, struct vertex, n_vertices); + memset (g->vertices, 0, sizeof (struct vertex) * n_vertices); return g; } @@ -69,10 +71,9 @@ new_graph (int n_vertices) struct graph_edge * add_edge (struct graph *g, int f, int t) { - struct graph_edge *e = XNEW (struct graph_edge); + struct graph_edge *e = XOBNEW (&g->ob, struct graph_edge); struct vertex *vf = &g->vertices[f], *vt = &g->vertices[t]; - e->src = f; e->dest = t; @@ -324,20 +325,7 @@ for_each_edge (struct graph *g, graphds_edge_callback callback) void free_graph (struct graph *g) { - struct graph_edge *e, *n; - struct vertex *v; - int i; - - for (i = 0; i < g->n_vertices; i++) - { - v = &g->vertices[i]; - for (e = v->succ; e; e = n) - { - n = e->succ_next; - free (e); - } - } - free (g->vertices); + obstack_free (&g->ob, NULL); free (g); } diff --git a/gcc/graphds.h b/gcc/graphds.h index f6d9c36bfa6..d9de5ae38e1 100644 --- a/gcc/graphds.h +++ b/gcc/graphds.h @@ -43,9 +43,9 @@ struct vertex struct graph { - int n_vertices; /* Number of vertices. */ - struct vertex *vertices; - /* The vertices. */ + int n_vertices; /* Number of vertices. */ + struct vertex *vertices; /* The vertices. */ + struct obstack ob; /* Obstack for vertex and edge allocation. */ }; struct graph *new_graph (int); -- 2.30.2