===================================================================
@@ -3762,6 +3762,7 @@ GTFILES = $(CPP_ID_DATA_H) $(srcdir)/input.h $(src
$(srcdir)/tree-iterator.c $(srcdir)/gimplify.c \
$(srcdir)/tree-chrec.h \
$(srcdir)/tree-scalar-evolution.c \
+ $(srcdir)/tree-threadsafe-analyze.c \
$(srcdir)/tree-ssa-operands.h \
$(srcdir)/tree-profile.c $(srcdir)/tree-nested.c \
$(srcdir)/varpool.c \
===================================================================
@@ -239,11 +239,11 @@ static struct pointer_map_t *lock_locus_map;
/* Each entry maps a lock to its canonicalized expression (see
get_canonical_lock_expr()). */
-static htab_t lock_expr_tab;
+static GTY((param_is (union tree_node))) htab_t lock_expr_tab = NULL;
/* Each entry is a gimple call statement. Calls to the same function with
symbolically identical arguments will hash to the same entry. */
-static htab_t gimple_call_tab;
+static htab_t gimple_call_tab = NULL;
/* Each entry maps a trylock call expr to its trylock_info. */
static struct pointer_map_t *trylock_info_map;
@@ -517,11 +517,8 @@ destroy_acquired_after_set (const void * ARG_UNUSE
void
clean_up_threadsafe_analysis (void)
{
- if (lock_expr_tab)
- {
- htab_delete (lock_expr_tab);
- lock_expr_tab = NULL;
- }
+ /* lock_expr_tab is garbage collected. */
+ lock_expr_tab = NULL;
/* Free the lock acquired_after map and the sets */
if (lock_acquired_after_map)
@@ -989,7 +984,7 @@ get_canonical_lock_expr (tree lock, tree base_obj,
in the lock_expr_tab. If so, grab and return it. Otherwise, insert the
new lock expr to the map. */
if (lock_expr_tab == NULL)
- lock_expr_tab = htab_create (10, lock_expr_hash, lock_expr_eq, NULL);
+ lock_expr_tab = htab_create_ggc (10, lock_expr_hash, lock_expr_eq, NULL);
canon_lock = (tree) htab_find_with_hash (lock_expr_tab, lock, hash);
if (canon_lock)
@@ -3560,6 +3555,7 @@ execute_threadsafe_analyze (void)
pointer_map_traverse (trylock_info_map, delete_trylock_info, NULL);
pointer_map_destroy (trylock_info_map);
htab_delete (gimple_call_tab);
+ gimple_call_tab = NULL;
/* The flag that controls the warning of mismatched lock acquire/release
could be turned off when we see an unlock primitive with an unsupported
@@ -3596,3 +3592,5 @@ struct gimple_opt_pass pass_threadsafe_analyze =
TODO_dump_func /* todo_flags_finish */
}
};
+
+#include "gt-tree-threadsafe-analyze.h"