Re: [PATCH 3/6] add ctor to topo_info

2016-07-25 Thread Richard Biener
On Sun, Jul 24, 2016 at 1:44 PM,   wrote:
> From: Trevor Saunders 
>
> gcc/ChangeLog:
>
> 2016-07-24  Trevor Saunders  
>
> * tree-ssa-structalias.c (struct topo_info): Add constructor,
> and change types of members to auto_vec and auto_sbitmap.
> (init_topo_info): Remove.
> (topo_info::topo_info): New constructor.
> (solve_graph): Adjust.
> ---
>  gcc/tree-ssa-structalias.c | 31 ---
>  1 file changed, 8 insertions(+), 23 deletions(-)
>
> diff --git a/gcc/tree-ssa-structalias.c b/gcc/tree-ssa-structalias.c
> index 5e3c7d0..94d81ed1 100644
> --- a/gcc/tree-ssa-structalias.c
> +++ b/gcc/tree-ssa-structalias.c
> @@ -1536,36 +1536,21 @@ unify_nodes (constraint_graph_t graph, unsigned int 
> to, unsigned int from,
>
>  struct topo_info
>  {
> +  topo_info ();
> +
>/* sbitmap of visited nodes.  */
> -  sbitmap visited;
> +  auto_sbitmap visited;
>/* Array that stores the topological order of the graph, *in
>   reverse*.  */
> -  vec topo_order;
> +  auto_vec topo_order;
>  };
>
>
>  /* Initialize and return a topological info structure.  */
>
> -static struct topo_info *
> -init_topo_info (void)
> -{
> -  size_t size = graph->size;
> -  struct topo_info *ti = XNEW (struct topo_info);
> -  ti->visited = sbitmap_alloc (size);
> -  bitmap_clear (ti->visited);
> -  ti->topo_order.create (1);
> -  return ti;
> -}
> -
> -
> -/* Free the topological sort info pointed to by TI.  */
> -
> -static void
> -free_topo_info (struct topo_info *ti)
> +topo_info::topo_info () : visited (graph->size), topo_order (1)
>  {
> -  sbitmap_free (ti->visited);
> -  ti->topo_order.release ();
> -  free (ti);
> +  bitmap_clear (visited);
>  }
>
>  /* Visit the graph in topological order, and store the order in the
> @@ -2679,7 +2664,7 @@ solve_graph (constraint_graph_t graph)
>while (!bitmap_empty_p (changed))
>  {
>unsigned int i;
> -  struct topo_info *ti = init_topo_info ();
> +  topo_info *ti = new topo_info ();

I think it would be better to save the repeated allocations and instead just
clear the bitmap and the vector here.  Your patch makes this more
difficult.

Richard.

>stats.iterations++;
>
>bitmap_obstack_initialize (_obstack);
> @@ -2797,7 +2782,7 @@ solve_graph (constraint_graph_t graph)
> }
> }
> }
> -  free_topo_info (ti);
> +  delete ti;
>bitmap_obstack_release (_obstack);
>  }
>
> --
> 2.9.0
>


[PATCH 3/6] add ctor to topo_info

2016-07-24 Thread tbsaunde+gcc
From: Trevor Saunders 

gcc/ChangeLog:

2016-07-24  Trevor Saunders  

* tree-ssa-structalias.c (struct topo_info): Add constructor,
and change types of members to auto_vec and auto_sbitmap.
(init_topo_info): Remove.
(topo_info::topo_info): New constructor.
(solve_graph): Adjust.
---
 gcc/tree-ssa-structalias.c | 31 ---
 1 file changed, 8 insertions(+), 23 deletions(-)

diff --git a/gcc/tree-ssa-structalias.c b/gcc/tree-ssa-structalias.c
index 5e3c7d0..94d81ed1 100644
--- a/gcc/tree-ssa-structalias.c
+++ b/gcc/tree-ssa-structalias.c
@@ -1536,36 +1536,21 @@ unify_nodes (constraint_graph_t graph, unsigned int to, 
unsigned int from,
 
 struct topo_info
 {
+  topo_info ();
+
   /* sbitmap of visited nodes.  */
-  sbitmap visited;
+  auto_sbitmap visited;
   /* Array that stores the topological order of the graph, *in
  reverse*.  */
-  vec topo_order;
+  auto_vec topo_order;
 };
 
 
 /* Initialize and return a topological info structure.  */
 
-static struct topo_info *
-init_topo_info (void)
-{
-  size_t size = graph->size;
-  struct topo_info *ti = XNEW (struct topo_info);
-  ti->visited = sbitmap_alloc (size);
-  bitmap_clear (ti->visited);
-  ti->topo_order.create (1);
-  return ti;
-}
-
-
-/* Free the topological sort info pointed to by TI.  */
-
-static void
-free_topo_info (struct topo_info *ti)
+topo_info::topo_info () : visited (graph->size), topo_order (1)
 {
-  sbitmap_free (ti->visited);
-  ti->topo_order.release ();
-  free (ti);
+  bitmap_clear (visited);
 }
 
 /* Visit the graph in topological order, and store the order in the
@@ -2679,7 +2664,7 @@ solve_graph (constraint_graph_t graph)
   while (!bitmap_empty_p (changed))
 {
   unsigned int i;
-  struct topo_info *ti = init_topo_info ();
+  topo_info *ti = new topo_info ();
   stats.iterations++;
 
   bitmap_obstack_initialize (_obstack);
@@ -2797,7 +2782,7 @@ solve_graph (constraint_graph_t graph)
}
}
}
-  free_topo_info (ti);
+  delete ti;
   bitmap_obstack_release (_obstack);
 }
 
-- 
2.9.0