* [PATCH][2/n] referenced-vars TLC
@ 2012-05-21 14:59 Richard Guenther
0 siblings, 0 replies; only message in thread
From: Richard Guenther @ 2012-05-21 14:59 UTC (permalink / raw)
To: gcc-patches
This makes add_referenced_var take a struct function argument to
eventually avoid a push/pop_cfun around some of its callers (in
some further patch). It also avoids a redundant hashtable
lookup on var insertion.
Bootstrap & regtest running on x86_64-unknown-linux-gnu.
Richard.
2012-05-21 Richard Guenther <rguenther@suse.de>
* tree-flow.h (add_referenced_var_1): Declare.
(add_referenced_var): Define.
* tree-dfa.c (referenced_var_check_and_insert): Avoid one hash
lookup.
(add_referenced_var): Rename to ...
(add_referenced_var_1): ... this. Take struct function argument.
Index: gcc/tree-flow.h
===================================================================
--- gcc/tree-flow.h (revision 187719)
+++ gcc/tree-flow.h (working copy)
@@ -491,7 +491,8 @@ extern void debug_referenced_vars (void)
extern void dump_referenced_vars (FILE *);
extern void dump_variable (FILE *, tree);
extern void debug_variable (tree);
-extern bool add_referenced_var (tree);
+extern bool add_referenced_var_1 (tree, struct function *);
+#define add_referenced_var(v) add_referenced_var_1 ((v), cfun)
extern void remove_referenced_var (tree);
extern tree make_rename_temp (tree, const char *);
extern void set_default_def (tree, tree);
Index: gcc/tree-dfa.c
===================================================================
--- gcc/tree-dfa.c (revision 187719)
+++ gcc/tree-dfa.c (working copy)
@@ -503,24 +503,23 @@ referenced_var_lookup (struct function *
Return true if it required insertion. */
static bool
-referenced_var_check_and_insert (tree to)
+referenced_var_check_and_insert (tree to, struct function *fn)
{
- tree h, *loc;
+ tree *loc;
struct tree_decl_minimal in;
unsigned int uid = DECL_UID (to);
in.uid = uid;
- h = (tree) htab_find_with_hash (gimple_referenced_vars (cfun), &in, uid);
- if (h)
+ loc = (tree *) htab_find_slot_with_hash (gimple_referenced_vars (fn),
+ &in, uid, INSERT);
+ if (*loc)
{
/* DECL_UID has already been entered in the table. Verify that it is
the same entry as TO. See PR 27793. */
- gcc_assert (h == to);
+ gcc_assert (*loc == to);
return false;
}
- loc = (tree *) htab_find_slot_with_hash (gimple_referenced_vars (cfun),
- &in, uid, INSERT);
*loc = to;
return true;
}
@@ -575,7 +574,7 @@ set_default_def (tree var, tree def)
/* Add VAR to the list of referenced variables if it isn't already there. */
bool
-add_referenced_var (tree var)
+add_referenced_var_1 (tree var, struct function *fn)
{
gcc_checking_assert (TREE_CODE (var) == VAR_DECL
|| TREE_CODE (var) == PARM_DECL
@@ -585,7 +584,7 @@ add_referenced_var (tree var)
create_var_ann (var);
/* Insert VAR into the referenced_vars hash table if it isn't present. */
- if (referenced_var_check_and_insert (var))
+ if (referenced_var_check_and_insert (var, fn))
return true;
return false;
^ permalink raw reply [flat|nested] only message in thread
only message in thread, other threads:[~2012-05-21 14:59 UTC | newest]
Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2012-05-21 14:59 [PATCH][2/n] referenced-vars TLC Richard Guenther
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).