This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
[patch] tree-*.[ch]: VECify referenced vars.
- From: Kazu Hirata <kazu at cs dot umass dot edu>
- To: gcc-patches at gcc dot gnu dot org
- Cc: nathan at codesourcery dot com
- Date: Fri, 06 May 2005 10:42:15 -0400 (EDT)
- Subject: [patch] tree-*.[ch]: VECify referenced vars.
Hi,
Attached is a patch to VECify referenced_vars.
I'm wondering if it's worth making changes like so.
- for (i = 0; i < num_referenced_vars; i++)
+ for (i = 0; VEC_iterate (tree, referenced_vars, i, q); i++)
{
- q = referenced_var (i);
Since my patch updates num_referenced_vars and referenced_vars like
so.
-#define num_referenced_vars VARRAY_ACTIVE_SIZE (referenced_vars)
-#define referenced_var(i) VARRAY_TREE (referenced_vars, i)
+#define num_referenced_vars VEC_length (tree, referenced_vars)
+#define referenced_var(i) VEC_index (tree, referenced_vars, i)
we don't have to change the code that uses the construct
"i < num_referenced_vars", which works just as well. But then Nathan
seems to prefer VEC_iterate. Personally, I am OK with either one.
Tested on i686-pc-linux-gnu. Thoughts?
Kazu Hirata
2005-05-06 Kazu Hirata <kazu@cs.umass.edu>
* tree-dfa.c (referenced_vars, dump_referenced_vars,
add_referenced_var): Use VEC instead of VARRAY.
* tree-flow.h (num_referenced_var, referenced_var): Likewise.
* tree-into-ssa.c (insert_phi_nodes, mark_def_site_blocks):
Likewise.
* tree-sra.c (find_candidates_for_sra): Likewsie.
* tree-ssa-alias.c (init_alias_info,
setup_pointers_and_addressables, dump_alias_info,
dump_points_to_info, add_type_alias): Likewise.
* tree-ssa.c (verify_flow_insensitive_alias_info,
init_tree_ssa, delete_tree_ssa): Likewise.
* tree-tailcall.c (suitable_for_tail_opt_p): Likewise.
Index: tree-dfa.c
===================================================================
RCS file: /cvs/gcc/gcc/gcc/tree-dfa.c,v
retrieving revision 2.53
diff -u -d -p -r2.53 tree-dfa.c
--- tree-dfa.c 3 May 2005 12:19:37 -0000 2.53
+++ tree-dfa.c 4 May 2005 06:13:02 -0000
@@ -84,7 +84,7 @@ static void add_referenced_var (tree, st
/* Global declarations. */
/* Array of all variables referenced in the function. */
-varray_type referenced_vars;
+VEC(tree,gc) *referenced_vars;
/*---------------------------------------------------------------------------
@@ -233,13 +233,13 @@ void
dump_referenced_vars (FILE *file)
{
size_t i;
+ tree var;
fprintf (file, "\nReferenced variables in %s: %u\n\n",
get_name (current_function_decl), (unsigned) num_referenced_vars);
- for (i = 0; i < num_referenced_vars; i++)
+ for (i = 0; VEC_iterate (tree, referenced_vars, i, var); i++)
{
- tree var = referenced_var (i);
fprintf (file, "Variable: ");
dump_variable (file, var);
fprintf (file, "\n");
@@ -558,7 +558,7 @@ add_referenced_var (tree var, struct wal
if (slot)
*slot = (void *) var;
v_ann->uid = num_referenced_vars;
- VARRAY_PUSH_TREE (referenced_vars, var);
+ VEC_safe_push (tree, gc, referenced_vars, var);
/* Global variables are always call-clobbered. */
if (is_global_var (var))
Index: tree-flow.h
===================================================================
RCS file: /cvs/gcc/gcc/gcc/tree-flow.h,v
retrieving revision 2.101
diff -u -d -p -r2.101 tree-flow.h
--- tree-flow.h 3 May 2005 20:18:31 -0000 2.101
+++ tree-flow.h 4 May 2005 06:13:03 -0000
@@ -406,10 +406,10 @@ static inline void set_phi_nodes (basic_
Global declarations
---------------------------------------------------------------------------*/
/* Array of all variables referenced in the function. */
-extern GTY(()) varray_type referenced_vars;
+extern GTY(()) VEC(tree,gc) *referenced_vars;
-#define num_referenced_vars VARRAY_ACTIVE_SIZE (referenced_vars)
-#define referenced_var(i) VARRAY_TREE (referenced_vars, i)
+#define num_referenced_vars VEC_length (tree, referenced_vars)
+#define referenced_var(i) VEC_index (tree, referenced_vars, i)
/* Array of all SSA_NAMEs used in the function. */
extern GTY(()) VEC(tree,gc) *ssa_names;
Index: tree-into-ssa.c
===================================================================
RCS file: /cvs/gcc/gcc/gcc/tree-into-ssa.c,v
retrieving revision 2.53
diff -u -d -p -r2.53 tree-into-ssa.c
--- tree-into-ssa.c 3 May 2005 12:19:39 -0000 2.53
+++ tree-into-ssa.c 4 May 2005 06:13:05 -0000
@@ -863,14 +863,14 @@ static void
insert_phi_nodes (bitmap *dfs)
{
unsigned i;
+ tree var;
timevar_push (TV_TREE_INSERT_PHI_NODES);
- for (i = 0; i < num_referenced_vars; i++)
+ for (i = 0; VEC_iterate (tree, referenced_vars, i, var); i++)
{
struct def_blocks_d *def_map;
bitmap idf;
- tree var = referenced_var (i);
def_map = find_def_blocks_for (var);
if (def_map == NULL)
@@ -1666,13 +1666,14 @@ mark_def_site_blocks (sbitmap interestin
size_t i;
struct dom_walk_data walk_data;
struct mark_def_sites_global_data mark_def_sites_global_data;
+ tree var;
/* Allocate memory for the DEF_BLOCKS hash table. */
- def_blocks = htab_create (VARRAY_ACTIVE_SIZE (referenced_vars),
+ def_blocks = htab_create (num_referenced_vars,
def_blocks_hash, def_blocks_eq, def_blocks_free);
- for (i = 0; i < num_referenced_vars; i++)
- set_current_def (referenced_var (i), NULL_TREE);
+ for (i = 0; VEC_iterate (tree, referenced_vars, i, var); i++)
+ set_current_def (var, NULL_TREE);
/* Setup callbacks for the generic dominator tree walker to find and
mark definition sites. */
Index: tree-sra.c
===================================================================
RCS file: /cvs/gcc/gcc/gcc/tree-sra.c,v
retrieving revision 2.59
diff -u -d -p -r2.59 tree-sra.c
--- tree-sra.c 3 May 2005 12:19:41 -0000 2.59
+++ tree-sra.c 4 May 2005 06:13:06 -0000
@@ -943,10 +943,10 @@ find_candidates_for_sra (void)
{
size_t i;
bool any_set = false;
+ tree var;
- for (i = 0; i < num_referenced_vars; i++)
+ for (i = 0; VEC_iterate (tree, referenced_vars, i, var); i++)
{
- tree var = referenced_var (i);
if (decl_can_be_decomposed_p (var))
{
bitmap_set_bit (sra_candidates, var_ann (var)->uid);
Index: tree-ssa-alias.c
===================================================================
RCS file: /cvs/gcc/gcc/gcc/tree-ssa-alias.c,v
retrieving revision 2.91
diff -u -d -p -r2.91 tree-ssa-alias.c
--- tree-ssa-alias.c 28 Apr 2005 07:58:29 -0000 2.91
+++ tree-ssa-alias.c 4 May 2005 06:13:08 -0000
@@ -505,6 +505,7 @@ init_alias_info (void)
if (aliases_computed_p)
{
unsigned i;
+ tree var;
/* Similarly, clear the set of addressable variables. In this
case, we can just clear the set because addressability is
@@ -512,9 +513,8 @@ init_alias_info (void)
bitmap_clear (addressable_vars);
/* Clear flow-insensitive alias information from each symbol. */
- for (i = 0; i < num_referenced_vars; i++)
+ for (i = 0; VEC_iterate (tree, referenced_vars, i, var); i++)
{
- tree var = referenced_var (i);
var_ann_t ann = var_ann (var);
ann->is_alias_tag = 0;
@@ -1366,13 +1366,12 @@ static void
setup_pointers_and_addressables (struct alias_info *ai)
{
size_t i, n_vars, num_addressable_vars, num_pointers;
+ tree var;
/* Size up the arrays ADDRESSABLE_VARS and POINTERS. */
num_addressable_vars = num_pointers = 0;
- for (i = 0; i < num_referenced_vars; i++)
+ for (i = 0; VEC_iterate (tree, referenced_vars, i, var); i++)
{
- tree var = referenced_var (i);
-
if (may_be_aliased (var))
num_addressable_vars++;
@@ -2412,30 +2411,28 @@ dump_alias_info (FILE *file)
size_t i;
const char *funcname
= lang_hooks.decl_printable_name (current_function_decl, 2);
+ tree var;
fprintf (file, "\nFlow-insensitive alias information for %s\n\n", funcname);
fprintf (file, "Aliased symbols\n\n");
- for (i = 0; i < num_referenced_vars; i++)
+ for (i = 0; VEC_iterate (tree, referenced_vars, i, var); i++)
{
- tree var = referenced_var (i);
if (may_be_aliased (var))
dump_variable (file, var);
}
fprintf (file, "\nDereferenced pointers\n\n");
- for (i = 0; i < num_referenced_vars; i++)
+ for (i = 0; VEC_iterate (tree, referenced_vars, i, var); i++)
{
- tree var = referenced_var (i);
var_ann_t ann = var_ann (var);
if (ann->type_mem_tag)
dump_variable (file, var);
}
fprintf (file, "\nType memory tags\n\n");
- for (i = 0; i < num_referenced_vars; i++)
+ for (i = 0; VEC_iterate (tree, referenced_vars, i, var); i++)
{
- tree var = referenced_var (i);
var_ann_t ann = var_ann (var);
if (ann->mem_tag_kind == TYPE_TAG)
dump_variable (file, var);
@@ -2460,9 +2457,8 @@ dump_alias_info (FILE *file)
}
fprintf (file, "\nName memory tags\n\n");
- for (i = 0; i < num_referenced_vars; i++)
+ for (i = 0; VEC_iterate (tree, referenced_vars, i, var); i++)
{
- tree var = referenced_var (i);
var_ann_t ann = var_ann (var);
if (ann->mem_tag_kind == NAME_TAG)
dump_variable (file, var);
@@ -2575,15 +2571,15 @@ dump_points_to_info (FILE *file)
ssa_op_iter iter;
const char *fname =
lang_hooks.decl_printable_name (current_function_decl, 2);
+ tree var;
fprintf (file, "\n\nPointed-to sets for pointers in %s\n\n", fname);
/* First dump points-to information for the default definitions of
pointer variables. This is necessary because default definitions are
not part of the code. */
- for (i = 0; i < num_referenced_vars; i++)
+ for (i = 0; VEC_iterate (tree, referenced_vars, i, var); i++)
{
- tree var = referenced_var (i);
if (POINTER_TYPE_P (TREE_TYPE (var)))
{
var_ann_t ann = var_ann (var);
@@ -2717,10 +2713,8 @@ add_type_alias (tree ptr, tree var)
whether there is another pointer Q with the same alias set as
PTR. This could be sped up by having type tags associated
with types. */
- for (i = 0; i < num_referenced_vars; i++)
+ for (i = 0; VEC_iterate (tree, referenced_vars, i, q); i++)
{
- q = referenced_var (i);
-
if (POINTER_TYPE_P (TREE_TYPE (q))
&& tag_set == get_alias_set (TREE_TYPE (TREE_TYPE (q))))
{
Index: tree-ssa.c
===================================================================
RCS file: /cvs/gcc/gcc/gcc/tree-ssa.c,v
retrieving revision 2.93
diff -u -d -p -r2.93 tree-ssa.c
--- tree-ssa.c 3 May 2005 12:19:48 -0000 2.93
+++ tree-ssa.c 4 May 2005 06:13:09 -0000
@@ -377,13 +377,12 @@ verify_flow_insensitive_alias_info (void
tree var;
bitmap visited = BITMAP_ALLOC (NULL);
- for (i = 0; i < num_referenced_vars; i++)
+ for (i = 0; VEC_iterate (tree, referenced_vars, i, var); i++)
{
size_t j;
var_ann_t ann;
varray_type may_aliases;
- var = referenced_var (i);
ann = var_ann (var);
may_aliases = ann->may_aliases;
@@ -402,11 +401,10 @@ verify_flow_insensitive_alias_info (void
}
}
- for (i = 0; i < num_referenced_vars; i++)
+ for (i = 0; VEC_iterate (tree, referenced_vars, i, var); i++)
{
var_ann_t ann;
- var = referenced_var (i);
ann = var_ann (var);
if (ann->mem_tag_kind == NOT_A_TAG
@@ -786,7 +784,7 @@ err:
void
init_tree_ssa (void)
{
- VARRAY_TREE_INIT (referenced_vars, 20, "referenced_vars");
+ referenced_vars = VEC_alloc (tree, gc, 20);
call_clobbered_vars = BITMAP_ALLOC (NULL);
addressable_vars = BITMAP_ALLOC (NULL);
init_ssanames ();
@@ -804,6 +802,7 @@ delete_tree_ssa (void)
size_t i;
basic_block bb;
block_stmt_iterator bsi;
+ tree var;
/* Release any ssa_names still in use. */
for (i = 0; i < num_ssa_names; i++)
@@ -827,16 +826,12 @@ delete_tree_ssa (void)
}
/* Remove annotations from every referenced variable. */
- if (referenced_vars)
+ for (i = 0; VEC_iterate (tree, referenced_vars, i, var); i++)
{
- for (i = 0; i < num_referenced_vars; i++)
- {
- tree var = referenced_var (i);
- ggc_free (var->common.ann);
- var->common.ann = NULL;
- }
- referenced_vars = NULL;
+ ggc_free (var->common.ann);
+ var->common.ann = NULL;
}
+ VEC_free (tree, gc, referenced_vars);
fini_ssanames ();
fini_phinodes ();
Index: tree-tailcall.c
===================================================================
RCS file: /cvs/gcc/gcc/gcc/tree-tailcall.c,v
retrieving revision 2.41
diff -u -d -p -r2.41 tree-tailcall.c
--- tree-tailcall.c 3 May 2005 12:19:50 -0000 2.41
+++ tree-tailcall.c 4 May 2005 06:13:09 -0000
@@ -132,17 +132,16 @@ static void find_tail_calls (basic_block
static bool
suitable_for_tail_opt_p (void)
{
- int i;
+ unsigned int i;
+ tree var;
if (current_function_stdarg)
return false;
/* No local variable nor structure field should be call-clobbered. We
ignore any kind of memory tag, as these are not real variables. */
- for (i = 0; i < (int) VARRAY_ACTIVE_SIZE (referenced_vars); i++)
+ for (i = 0; VEC_iterate (tree, referenced_vars, i, var); i++)
{
- tree var = VARRAY_TREE (referenced_vars, i);
-
if (!(TREE_STATIC (var) || DECL_EXTERNAL (var))
&& (var_ann (var)->mem_tag_kind == NOT_A_TAG
|| var_ann (var)->mem_tag_kind == STRUCT_FIELD)