summaryrefslogtreecommitdiff
path: root/gcc/tree-ssa-tail-merge.c
diff options
context:
space:
mode:
Diffstat (limited to 'gcc/tree-ssa-tail-merge.c')
-rw-r--r--gcc/tree-ssa-tail-merge.c54
1 files changed, 23 insertions, 31 deletions
diff --git a/gcc/tree-ssa-tail-merge.c b/gcc/tree-ssa-tail-merge.c
index 8d55030e071..ec644ee3541 100644
--- a/gcc/tree-ssa-tail-merge.c
+++ b/gcc/tree-ssa-tail-merge.c
@@ -193,7 +193,7 @@ along with GCC; see the file COPYING3. If not see
#include "bitmap.h"
#include "tree-ssa-alias.h"
#include "params.h"
-#include "hashtab.h"
+#include "hash-table.h"
#include "gimple-pretty-print.h"
#include "tree-ssa-sccvn.h"
#include "tree-dump.h"
@@ -368,11 +368,10 @@ same_succ_print (FILE *file, const same_succ e)
/* Prints same_succ VE to VFILE. */
-static int
-same_succ_print_traverse (void **ve, void *vfile)
+inline int
+ssa_same_succ_print_traverse (same_succ *pe, FILE *file)
{
- const same_succ e = *((const same_succ *)ve);
- FILE *file = ((FILE*)vfile);
+ const same_succ e = *pe;
same_succ_print (file, e);
return 1;
}
@@ -416,10 +415,9 @@ stmt_update_dep_bb (gimple stmt)
/* Calculates hash value for same_succ VE. */
-static hashval_t
-same_succ_hash (const void *ve)
+hashval_t
+ssa_same_succ_hash (const_same_succ e)
{
- const_same_succ e = (const_same_succ)ve;
hashval_t hashval = bitmap_hash (e->succs);
int flags;
unsigned int i;
@@ -515,11 +513,9 @@ inverse_flags (const_same_succ e1, const_same_succ e2)
/* Compares SAME_SUCCs VE1 and VE2. */
-static int
-same_succ_equal (const void *ve1, const void *ve2)
+int
+ssa_same_succ_equal (const_same_succ e1, const_same_succ e2)
{
- const_same_succ e1 = (const_same_succ)ve1;
- const_same_succ e2 = (const_same_succ)ve2;
unsigned int i, first1, first2;
gimple_stmt_iterator gsi1, gsi2;
gimple s1, s2;
@@ -590,17 +586,15 @@ same_succ_alloc (void)
/* Delete same_succ VE. */
-static void
-same_succ_delete (void *ve)
+inline void
+ssa_same_succ_delete (same_succ e)
{
- same_succ e = (same_succ)ve;
-
BITMAP_FREE (e->bbs);
BITMAP_FREE (e->succs);
BITMAP_FREE (e->inverse);
VEC_free (int, heap, e->succ_flags);
- XDELETE (ve);
+ XDELETE (e);
}
/* Reset same_succ SAME. */
@@ -616,7 +610,9 @@ same_succ_reset (same_succ same)
/* Hash table with all same_succ entries. */
-static htab_t same_succ_htab;
+static hash_table <struct same_succ_def, ssa_same_succ_hash,
+ ssa_same_succ_equal, ssa_same_succ_delete>
+ same_succ_htab;
/* Array that is used to store the edge flags for a successor. */
@@ -637,7 +633,7 @@ extern void debug_same_succ (void);
DEBUG_FUNCTION void
debug_same_succ ( void)
{
- htab_traverse (same_succ_htab, same_succ_print_traverse, stderr);
+ same_succ_htab.traverse <FILE *, ssa_same_succ_print_traverse> (stderr);
}
DEF_VEC_P (same_succ);
@@ -696,10 +692,9 @@ find_same_succ_bb (basic_block bb, same_succ *same_p)
EXECUTE_IF_SET_IN_BITMAP (same->succs, 0, j, bj)
VEC_safe_push (int, heap, same->succ_flags, same_succ_edge_flags[j]);
- same->hashval = same_succ_hash (same);
+ same->hashval = ssa_same_succ_hash (same);
- slot = (same_succ *) htab_find_slot_with_hash (same_succ_htab, same,
- same->hashval, INSERT);
+ slot = same_succ_htab.find_slot_with_hash (same, same->hashval, INSERT);
if (*slot == NULL)
{
*slot = same;
@@ -733,7 +728,7 @@ find_same_succ (void)
same = same_succ_alloc ();
}
- same_succ_delete (same);
+ ssa_same_succ_delete (same);
}
/* Initializes worklist administration. */
@@ -742,9 +737,7 @@ static void
init_worklist (void)
{
alloc_aux_for_blocks (sizeof (struct aux_bb_info));
- same_succ_htab
- = htab_create (n_basic_blocks, same_succ_hash, same_succ_equal,
- same_succ_delete);
+ same_succ_htab.create (n_basic_blocks);
same_succ_edge_flags = XCNEWVEC (int, last_basic_block);
deleted_bbs = BITMAP_ALLOC (NULL);
deleted_bb_preds = BITMAP_ALLOC (NULL);
@@ -764,8 +757,7 @@ static void
delete_worklist (void)
{
free_aux_for_blocks ();
- htab_delete (same_succ_htab);
- same_succ_htab = NULL;
+ same_succ_htab.dispose ();
XDELETEVEC (same_succ_edge_flags);
same_succ_edge_flags = NULL;
BITMAP_FREE (deleted_bbs);
@@ -795,7 +787,7 @@ same_succ_flush_bb (basic_block bb)
same_succ same = BB_SAME_SUCC (bb);
BB_SAME_SUCC (bb) = NULL;
if (bitmap_single_bit_set_p (same->bbs))
- htab_remove_elt_with_hash (same_succ_htab, same, same->hashval);
+ same_succ_htab.remove_elt_with_hash (same, same->hashval);
else
bitmap_clear_bit (same->bbs, bb->index);
}
@@ -868,7 +860,7 @@ update_worklist (void)
if (same == NULL)
same = same_succ_alloc ();
}
- same_succ_delete (same);
+ ssa_same_succ_delete (same);
bitmap_clear (deleted_bb_preds);
}
@@ -1637,7 +1629,7 @@ tail_merge_optimize (unsigned int todo)
if (dump_file && (dump_flags & TDF_DETAILS))
fprintf (dump_file, "htab collision / search: %f\n",
- htab_collisions (same_succ_htab));
+ same_succ_htab.collisions ());
if (nr_bbs_removed_total > 0)
{