Commit e4dbabfe by Trevor Saunders Committed by Trevor Saunders

make avail_stores a vec<rtx_insn *>

gcc/ChangeLog:

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

	* print-rtl.c (print_rtx_insn_vec): New function.
	* print-rtl.h: New prototype.
	* 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.

From-SVN: r235394
parent 5d911caf
2016-04-24 Trevor Saunders <tbsaunde+gcc@tbsaunde.org> 2016-04-24 Trevor Saunders <tbsaunde+gcc@tbsaunde.org>
* print-rtl.c (print_rtx_insn_vec): New function.
* print-rtl.h: New prototype.
* 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.
2016-04-24 Trevor Saunders <tbsaunde+gcc@tbsaunde.org>
* reorg.c (try_merge_delay_insns): Make merged_insns a vector. * reorg.c (try_merge_delay_insns): Make merged_insns a vector.
2016-04-24 Trevor Saunders <tbsaunde+gcc@tbsaunde.org> 2016-04-24 Trevor Saunders <tbsaunde+gcc@tbsaunde.org>
......
...@@ -870,6 +870,24 @@ print_simple_rtl (FILE *outf, const_rtx x) ...@@ -870,6 +870,24 @@ print_simple_rtl (FILE *outf, const_rtx x)
flag_simple = 0; flag_simple = 0;
} }
/* Print the elements of VEC to FILE. */
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 #ifndef GENERATOR_FILE
/* The functions below try to print RTL in a form resembling assembler /* The functions below try to print RTL in a form resembling assembler
mnemonics. Because this form is more concise than the "traditional" form mnemonics. Because this form is more concise than the "traditional" form
......
...@@ -23,6 +23,7 @@ along with GCC; see the file COPYING3. If not see ...@@ -23,6 +23,7 @@ along with GCC; see the file COPYING3. If not see
#ifdef BUFSIZ #ifdef BUFSIZ
extern void print_rtl (FILE *, const_rtx); extern void print_rtl (FILE *, const_rtx);
#endif #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_value_slim (FILE *, const_rtx, int);
extern void dump_insn_slim (FILE *, const rtx_insn *); extern void dump_insn_slim (FILE *, const rtx_insn *);
......
...@@ -35,6 +35,7 @@ along with GCC; see the file COPYING3. If not see ...@@ -35,6 +35,7 @@ along with GCC; see the file COPYING3. If not see
#include "tree-pass.h" #include "tree-pass.h"
#include "dbgcnt.h" #include "dbgcnt.h"
#include "rtl-iter.h" #include "rtl-iter.h"
#include "print-rtl.h"
/* This pass implements downward store motion. /* This pass implements downward store motion.
As of May 1, 2009, the pass is not enabled by default on any target, As of May 1, 2009, the pass is not enabled by default on any target,
...@@ -67,7 +68,7 @@ struct st_expr ...@@ -67,7 +68,7 @@ struct st_expr
/* INSN list of stores that are locally anticipatable. */ /* INSN list of stores that are locally anticipatable. */
rtx_insn_list *antic_stores; rtx_insn_list *antic_stores;
/* INSN list of stores that are locally available. */ /* INSN list of stores that are locally available. */
rtx_insn_list *avail_stores; vec<rtx_insn *> avail_stores;
/* Next in the list. */ /* Next in the list. */
struct st_expr * next; struct st_expr * next;
/* Store ID in the dataflow bitmaps. */ /* Store ID in the dataflow bitmaps. */
...@@ -148,7 +149,7 @@ st_expr_entry (rtx x) ...@@ -148,7 +149,7 @@ st_expr_entry (rtx x)
ptr->pattern = x; ptr->pattern = x;
ptr->pattern_regs = NULL_RTX; ptr->pattern_regs = NULL_RTX;
ptr->antic_stores = NULL; ptr->antic_stores = NULL;
ptr->avail_stores = NULL; ptr->avail_stores.create (0);
ptr->reaching_reg = NULL_RTX; ptr->reaching_reg = NULL_RTX;
ptr->index = 0; ptr->index = 0;
ptr->hash_index = hash; ptr->hash_index = hash;
...@@ -164,7 +165,7 @@ static void ...@@ -164,7 +165,7 @@ static void
free_st_expr_entry (struct st_expr * ptr) free_st_expr_entry (struct st_expr * ptr)
{ {
free_INSN_LIST_list (& ptr->antic_stores); free_INSN_LIST_list (& ptr->antic_stores);
free_INSN_LIST_list (& ptr->avail_stores); ptr->avail_stores.release ();
free (ptr); free (ptr);
} }
...@@ -240,10 +241,7 @@ print_store_motion_mems (FILE * file) ...@@ -240,10 +241,7 @@ print_store_motion_mems (FILE * file)
fprintf (file, "\n AVAIL stores : "); fprintf (file, "\n AVAIL stores : ");
if (ptr->avail_stores) print_rtx_insn_vec (file, ptr->avail_stores);
print_rtl (file, ptr->avail_stores);
else
fprintf (file, "(nil)");
fprintf (file, "\n\n"); fprintf (file, "\n\n");
} }
...@@ -591,11 +589,11 @@ find_moveable_store (rtx_insn *insn, int *regs_set_before, int *regs_set_after) ...@@ -591,11 +589,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 it successfully before; if we failed before, do not bother to check
until we reach the insn that caused us to fail. */ until we reach the insn that caused us to fail. */
check_available = 0; check_available = 0;
if (!ptr->avail_stores) if (ptr->avail_stores.is_empty ())
check_available = 1; check_available = 1;
else else
{ {
rtx_insn *tmp = ptr->avail_stores->insn (); rtx_insn *tmp = ptr->avail_stores.last ();
if (BLOCK_FOR_INSN (tmp) != bb) if (BLOCK_FOR_INSN (tmp) != bb)
check_available = 1; check_available = 1;
} }
...@@ -619,7 +617,7 @@ find_moveable_store (rtx_insn *insn, int *regs_set_before, int *regs_set_after) ...@@ -619,7 +617,7 @@ find_moveable_store (rtx_insn *insn, int *regs_set_before, int *regs_set_after)
&LAST_AVAIL_CHECK_FAILURE (ptr)); &LAST_AVAIL_CHECK_FAILURE (ptr));
} }
if (!check_available) if (!check_available)
ptr->avail_stores = alloc_INSN_LIST (insn, ptr->avail_stores); ptr->avail_stores.safe_push (insn);
} }
/* Find available and anticipatable stores. */ /* Find available and anticipatable stores. */
...@@ -697,7 +695,7 @@ compute_store_table (void) ...@@ -697,7 +695,7 @@ compute_store_table (void)
ptr != NULL; ptr != NULL;
ptr = *prev_next_ptr_ptr) ptr = *prev_next_ptr_ptr)
{ {
if (! ptr->avail_stores) if (ptr->avail_stores.is_empty ())
{ {
*prev_next_ptr_ptr = ptr->next; *prev_next_ptr_ptr = ptr->next;
store_motion_mems_table->remove_elt_with_hash (ptr, ptr->hash_index); store_motion_mems_table->remove_elt_with_hash (ptr, ptr->hash_index);
...@@ -981,9 +979,10 @@ delete_store (struct st_expr * expr, basic_block bb) ...@@ -981,9 +979,10 @@ delete_store (struct st_expr * expr, basic_block bb)
reg = expr->reaching_reg; 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) if (BLOCK_FOR_INSN (del) == bb)
{ {
/* We know there is only one since we deleted redundant /* We know there is only one since we deleted redundant
...@@ -1018,9 +1017,10 @@ build_store_vectors (void) ...@@ -1018,9 +1017,10 @@ build_store_vectors (void)
for (ptr = first_st_expr (); ptr != NULL; ptr = next_st_expr (ptr)) 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); bb = BLOCK_FOR_INSN (insn);
/* If we've already seen an available expression in this block, /* If we've already seen an available expression in this block,
...@@ -1032,7 +1032,7 @@ build_store_vectors (void) ...@@ -1032,7 +1032,7 @@ build_store_vectors (void)
rtx r = gen_reg_rtx_and_attrs (ptr->pattern); rtx r = gen_reg_rtx_and_attrs (ptr->pattern);
if (dump_file) if (dump_file)
fprintf (dump_file, "Removing redundant store:\n"); fprintf (dump_file, "Removing redundant store:\n");
replace_store_insn (r, st->insn (), bb, ptr); replace_store_insn (r, insn, bb, ptr);
continue; continue;
} }
bitmap_set_bit (st_avloc[bb->index], ptr->index); bitmap_set_bit (st_avloc[bb->index], ptr->index);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment