diff mbox

[02/18] make avail_stores a vec<rtx_insn *>

Message ID 1461133342-10794-3-git-send-email-tbsaunde+gcc@tbsaunde.org
State New
Headers show

Commit Message

tbsaunde+gcc@tbsaunde.org April 20, 2016, 6:22 a.m. UTC
From: Trevor Saunders <tbsaunde+gcc@tbsaunde.org>

gcc/ChangeLog:

2016-04-19  Trevor Saunders  <tbsaunde+gcc@tbsaunde.org>

	* print-rtl.c (print_rtx_insn_vec): New function.
	* print-rtl.h: New prototype.
	* rtl.h: Likewise.
	* store-motion.c (struct st_expr): Make avail_stores a vector.
	(st_expr_entry): Adjust.
	(free_st_expr_entry): Likewise.
	(print_store_motion_mems): Likewise.
	(find_moveable_store): Likewise.
	(compute_store_table): Likewise.
	(delete_store): Likewise.
	(build_store_vectors): Likewise.
---
 gcc/print-rtl.c    | 15 +++++++++++++++
 gcc/print-rtl.h    |  1 +
 gcc/rtl.h          |  1 +
 gcc/store-motion.c | 31 +++++++++++++++----------------
 4 files changed, 32 insertions(+), 16 deletions(-)

Comments

Segher Boessenkool April 20, 2016, 11:32 a.m. UTC | #1
On Wed, Apr 20, 2016 at 02:22:06AM -0400, tbsaunde+gcc@tbsaunde.org wrote:
> +void
> +print_rtx_insn_vec (FILE *file, const vec<rtx_insn *> &vec)
> +{
> +  fputc('{', file);
> +
> +  unsigned int len = vec.length ();
> +  for (unsigned int i = 0; i < len; i++)
> +    {
> +      print_rtl (file, vec[i]);
> +      if (i < (len - 1))

Useless parens.

> +	fputs (", ", file);
> +    }
> +  fputc ('}', file);
> +}

OCD wants a blank line before that closing brace print, just like the
one after the opening one, heh.

> @@ -697,7 +694,7 @@ compute_store_table (void)
>         ptr != NULL;
>         ptr = *prev_next_ptr_ptr)
>      {
> -      if (! ptr->avail_stores)
> +      if ( ptr->avail_stores.is_empty ())

Stray space char.


Segher
Jeff Law April 22, 2016, 5:19 a.m. UTC | #2
On 04/20/2016 12:22 AM, tbsaunde+gcc@tbsaunde.org wrote:
> From: Trevor Saunders <tbsaunde+gcc@tbsaunde.org>
>
> gcc/ChangeLog:
>
> 2016-04-19  Trevor Saunders  <tbsaunde+gcc@tbsaunde.org>
>
> 	* print-rtl.c (print_rtx_insn_vec): New function.
> 	* print-rtl.h: New prototype.
> 	* rtl.h: Likewise.
> 	* store-motion.c (struct st_expr): Make avail_stores a vector.
> 	(st_expr_entry): Adjust.
> 	(free_st_expr_entry): Likewise.
> 	(print_store_motion_mems): Likewise.
> 	(find_moveable_store): Likewise.
> 	(compute_store_table): Likewise.
> 	(delete_store): Likewise.
> 	(build_store_vectors): Likewise.
> ---
>   gcc/print-rtl.c    | 15 +++++++++++++++
>   gcc/print-rtl.h    |  1 +
>   gcc/rtl.h          |  1 +
>   gcc/store-motion.c | 31 +++++++++++++++----------------
>   4 files changed, 32 insertions(+), 16 deletions(-)
>
> diff --git a/gcc/print-rtl.c b/gcc/print-rtl.c
> index 85d9b8d..cf4922f 100644
> --- a/gcc/print-rtl.c
> +++ b/gcc/print-rtl.c
> @@ -870,6 +870,21 @@ print_simple_rtl (FILE *outf, const_rtx x)
>     flag_simple = 0;
>   }
>
> +void
> +print_rtx_insn_vec (FILE *file, const vec<rtx_insn *> &vec)
Function comment.

> index 8267252..167c090 100644
> --- a/gcc/rtl.h
> +++ b/gcc/rtl.h
> @@ -3572,6 +3572,7 @@ extern void print_simple_rtl (FILE *, const_rtx);
>   extern int print_rtl_single (FILE *, const_rtx);
>   extern int print_rtl_single_with_indent (FILE *, const_rtx, int);
>   extern void print_inline_rtx (FILE *, const_rtx, int);
> +extern void print_rtx_insn_vec (FILE *file, const vec<rtx_insn *> &vec);
Why a prototype in rtl.h rather than including print-rtl wherever it was 
needed?


OK with the nits pointed out by Segher fixed and those pointed out above 
fixed.

jeff
Richard Sandiford April 26, 2016, 6:34 p.m. UTC | #3
Another style nit on top of the ones already posted, sorry:

tbsaunde+gcc@tbsaunde.org writes:
> +void
> +print_rtx_insn_vec (FILE *file, const vec<rtx_insn *> &vec)
> +{
> +  fputc('{', file);

missing space before '('.

Richard
diff mbox

Patch

diff --git a/gcc/print-rtl.c b/gcc/print-rtl.c
index 85d9b8d..cf4922f 100644
--- a/gcc/print-rtl.c
+++ b/gcc/print-rtl.c
@@ -870,6 +870,21 @@  print_simple_rtl (FILE *outf, const_rtx x)
   flag_simple = 0;
 }
 
+void
+print_rtx_insn_vec (FILE *file, const vec<rtx_insn *> &vec)
+{
+  fputc('{', file);
+
+  unsigned int len = vec.length ();
+  for (unsigned int i = 0; i < len; i++)
+    {
+      print_rtl (file, vec[i]);
+      if (i < (len - 1))
+	fputs (", ", file);
+    }
+  fputc ('}', file);
+}
+
 #ifndef GENERATOR_FILE
 /* The functions below  try to print RTL in a form resembling assembler
    mnemonics.  Because this form is more concise than the "traditional" form
diff --git a/gcc/print-rtl.h b/gcc/print-rtl.h
index 28b4626..e585a63 100644
--- a/gcc/print-rtl.h
+++ b/gcc/print-rtl.h
@@ -23,6 +23,7 @@  along with GCC; see the file COPYING3.  If not see
 #ifdef BUFSIZ
 extern void print_rtl (FILE *, const_rtx);
 #endif
+extern void print_rtx_insn_vec (FILE *file, const vec<rtx_insn *> &vec);
 
 extern void dump_value_slim (FILE *, const_rtx, int);
 extern void dump_insn_slim (FILE *, const rtx_insn *);
diff --git a/gcc/rtl.h b/gcc/rtl.h
index 8267252..167c090 100644
--- a/gcc/rtl.h
+++ b/gcc/rtl.h
@@ -3572,6 +3572,7 @@  extern void print_simple_rtl (FILE *, const_rtx);
 extern int print_rtl_single (FILE *, const_rtx);
 extern int print_rtl_single_with_indent (FILE *, const_rtx, int);
 extern void print_inline_rtx (FILE *, const_rtx, int);
+extern void print_rtx_insn_vec (FILE *file, const vec<rtx_insn *> &vec);
 
 /* In stmt.c */
 extern void expand_null_return (void);
diff --git a/gcc/store-motion.c b/gcc/store-motion.c
index fffdffc..6646065 100644
--- a/gcc/store-motion.c
+++ b/gcc/store-motion.c
@@ -67,7 +67,7 @@  struct st_expr
   /* INSN list of stores that are locally anticipatable.  */
   rtx_insn_list *antic_stores;
   /* INSN list of stores that are locally available.  */
-  rtx_insn_list *avail_stores;
+  vec<rtx_insn *> avail_stores;
   /* Next in the list.  */
   struct st_expr * next;
   /* Store ID in the dataflow bitmaps.  */
@@ -148,7 +148,7 @@  st_expr_entry (rtx x)
   ptr->pattern      = x;
   ptr->pattern_regs = NULL_RTX;
   ptr->antic_stores = NULL;
-  ptr->avail_stores = NULL;
+  ptr->avail_stores.create (0);
   ptr->reaching_reg = NULL_RTX;
   ptr->index        = 0;
   ptr->hash_index   = hash;
@@ -164,7 +164,7 @@  static void
 free_st_expr_entry (struct st_expr * ptr)
 {
   free_INSN_LIST_list (& ptr->antic_stores);
-  free_INSN_LIST_list (& ptr->avail_stores);
+   ptr->avail_stores.release ();
 
   free (ptr);
 }
@@ -240,10 +240,7 @@  print_store_motion_mems (FILE * file)
 
       fprintf (file, "\n	 AVAIL stores : ");
 
-      if (ptr->avail_stores)
-	print_rtl (file, ptr->avail_stores);
-      else
-	fprintf (file, "(nil)");
+	print_rtx_insn_vec (file, ptr->avail_stores);
 
       fprintf (file, "\n\n");
     }
@@ -591,11 +588,11 @@  find_moveable_store (rtx_insn *insn, int *regs_set_before, int *regs_set_after)
      it successfully before; if we failed before, do not bother to check
      until we reach the insn that caused us to fail.  */
   check_available = 0;
-  if (!ptr->avail_stores)
+  if (ptr->avail_stores.is_empty ())
     check_available = 1;
   else
     {
-      rtx_insn *tmp = ptr->avail_stores->insn ();
+      rtx_insn *tmp = ptr->avail_stores.last ();
       if (BLOCK_FOR_INSN (tmp) != bb)
 	check_available = 1;
     }
@@ -619,7 +616,7 @@  find_moveable_store (rtx_insn *insn, int *regs_set_before, int *regs_set_after)
 					      &LAST_AVAIL_CHECK_FAILURE (ptr));
     }
   if (!check_available)
-    ptr->avail_stores = alloc_INSN_LIST (insn, ptr->avail_stores);
+    ptr->avail_stores.safe_push (insn);
 }
 
 /* Find available and anticipatable stores.  */
@@ -697,7 +694,7 @@  compute_store_table (void)
        ptr != NULL;
        ptr = *prev_next_ptr_ptr)
     {
-      if (! ptr->avail_stores)
+      if ( ptr->avail_stores.is_empty ())
 	{
 	  *prev_next_ptr_ptr = ptr->next;
 	  store_motion_mems_table->remove_elt_with_hash (ptr, ptr->hash_index);
@@ -981,9 +978,10 @@  delete_store (struct st_expr * expr, basic_block bb)
 
   reg = expr->reaching_reg;
 
-  for (rtx_insn_list *i = expr->avail_stores; i; i = i->next ())
+  unsigned int len = expr->avail_stores.length ();
+  for (unsigned int i = len - 1; i < len; i--)
     {
-      rtx_insn *del = i->insn ();
+      rtx_insn *del = expr->avail_stores[i];
       if (BLOCK_FOR_INSN (del) == bb)
 	{
 	  /* We know there is only one since we deleted redundant
@@ -1018,9 +1016,10 @@  build_store_vectors (void)
 
   for (ptr = first_st_expr (); ptr != NULL; ptr = next_st_expr (ptr))
     {
-      for (st = ptr->avail_stores; st != NULL; st = st->next ())
+      unsigned int len = ptr->avail_stores.length ();
+      for (unsigned int i = len - 1; i < len; i--)
 	{
-	  insn = st->insn ();
+	  insn = ptr->avail_stores[i];
 	  bb = BLOCK_FOR_INSN (insn);
 
 	  /* If we've already seen an available expression in this block,
@@ -1032,7 +1031,7 @@  build_store_vectors (void)
 	      rtx r = gen_reg_rtx_and_attrs (ptr->pattern);
 	      if (dump_file)
 		fprintf (dump_file, "Removing redundant store:\n");
-	      replace_store_insn (r, st->insn (), bb, ptr);
+	      replace_store_insn (r, insn, bb, ptr);
 	      continue;
 	    }
 	  bitmap_set_bit (st_avloc[bb->index], ptr->index);