diff options
Diffstat (limited to 'gcc/tree-ssa-ccp.c')
-rw-r--r-- | gcc/tree-ssa-ccp.c | 21 |
1 files changed, 14 insertions, 7 deletions
diff --git a/gcc/tree-ssa-ccp.c b/gcc/tree-ssa-ccp.c index 8e42a51d53d..4b798b70b5c 100644 --- a/gcc/tree-ssa-ccp.c +++ b/gcc/tree-ssa-ccp.c @@ -130,6 +130,7 @@ along with GCC; see the file COPYING3. If not see #include "dbgcnt.h" #include "gimple-fold.h" #include "params.h" +#include "hash-table.h" /* Possible lattice values. */ @@ -1687,11 +1688,17 @@ evaluate_stmt (gimple stmt) return val; } +typedef hash_table <gimple_statement_d, typed_pointer_hash<gimple_statement_d>, + typed_pointer_equal<gimple_statement_d>, + typed_null_remove<gimple_statement_d> > + gimple_htab; + /* Given a BUILT_IN_STACK_SAVE value SAVED_VAL, insert a clobber of VAR before each matching BUILT_IN_STACK_RESTORE. Mark visited phis in VISITED. */ static void -insert_clobber_before_stack_restore (tree saved_val, tree var, htab_t *visited) +insert_clobber_before_stack_restore (tree saved_val, tree var, + gimple_htab *visited) { gimple stmt, clobber_stmt; tree clobber; @@ -1711,10 +1718,10 @@ insert_clobber_before_stack_restore (tree saved_val, tree var, htab_t *visited) } else if (gimple_code (stmt) == GIMPLE_PHI) { - if (*visited == NULL) - *visited = htab_create (10, htab_hash_pointer, htab_eq_pointer, NULL); + if (!visited->is_created ()) + visited->create (10); - slot = (gimple *)htab_find_slot (*visited, stmt, INSERT); + slot = visited->find_slot (stmt, INSERT); if (*slot != NULL) continue; @@ -1757,7 +1764,7 @@ insert_clobbers_for_var (gimple_stmt_iterator i, tree var) { gimple stmt; tree saved_val; - htab_t visited = NULL; + gimple_htab visited; for (; !gsi_end_p (i); gsi_prev_dom_bb_nondebug (&i)) { @@ -1774,8 +1781,8 @@ insert_clobbers_for_var (gimple_stmt_iterator i, tree var) break; } - if (visited != NULL) - htab_delete (visited); + if (visited.is_created ()) + visited.dispose (); } /* Detects a __builtin_alloca_with_align with constant size argument. Declares |