From patchwork Tue Jul 8 03:01:56 2014 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Trevor Saunders X-Patchwork-Id: 367789 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from sourceware.org (server1.sourceware.org [209.132.180.131]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id A45B91400E9 for ; Tue, 8 Jul 2014 13:03:20 +1000 (EST) DomainKey-Signature: a=rsa-sha1; c=nofws; d=gcc.gnu.org; h=list-id :list-unsubscribe:list-archive:list-post:list-help:sender:from :to:cc:subject:date:message-id; q=dns; s=default; b=PY6OtkynYQuj IL4W+jJNLnQVdZv+thmwThQx67VIkwQFl36zyQ8MGjf//Lbz21UM/1HegFUvY0oF 0kY8wAWc4GMCW3fH+0a2vsZu+22/2ashe9+Q1ynhjSE23OEDE/QoGdIhYAzNyy82 jsk1o/kIlTuWbmTLqQihXeuCKwdgwMQ= DKIM-Signature: v=1; a=rsa-sha1; c=relaxed; d=gcc.gnu.org; h=list-id :list-unsubscribe:list-archive:list-post:list-help:sender:from :to:cc:subject:date:message-id; s=default; bh=JyAcIXjvmdRnkFJzyb 62njxSRwE=; b=HJGlCY/SltVKPYj/a8KwmNCp2YuAvhuY0DKzSyINYAFGAP3NLY EIq5oijRICgLXxjSifzDRGBpA/B/Ho3u/dEJB/8oSXm4JkJMbxUtXXMLrhUZ6N6L PTgeea141oXpXnhvkbLWiBHmHKPZ4lSGMp2+235joqXSue0Shi2jqw2ig= Received: (qmail 22916 invoked by alias); 8 Jul 2014 03:02:53 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Id: List-Unsubscribe: List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 22715 invoked by uid 89); 8 Jul 2014 03:02:50 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-2.2 required=5.0 tests=AWL, BAYES_00, RP_MATCHES_RCVD autolearn=ham version=3.3.2 X-HELO: smtp.mozilla.org Received: from mx2.corp.phx1.mozilla.com (HELO smtp.mozilla.org) (63.245.216.70) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with (AES256-GCM-SHA384 encrypted) ESMTPS; Tue, 08 Jul 2014 03:02:37 +0000 Received: from iceball.corp.tor1.mozilla.com (unknown [69.165.234.187]) (Authenticated sender: tsaunders@mozilla.com) by mx2.mail.corp.phx1.mozilla.com (Postfix) with ESMTPSA id CD413F236C; Mon, 7 Jul 2014 20:02:34 -0700 (PDT) From: tsaunders@mozilla.com To: gcc-patches@gcc.gnu.org Cc: Trevor Saunders Subject: [PATCH] convert some hash_table to hash_map Date: Mon, 7 Jul 2014 23:01:56 -0400 Message-Id: <1404788516-11795-1-git-send-email-tsaunders@mozilla.com> X-IsSubscribed: yes From: Trevor Saunders Hi, just $subject bootstrapped + regtested on x86_64-unknown-linux-gnu, ok? Trev gcc/ * graphite-htab.h: Use hash_map instead of hash_table. * graphite-clast-to-gimple.c: Adjust. * passes.c: Use hash_map instead of hash_table. * sese.c: Likewise. * sese.h: Remove now unused code. diff --git a/gcc/graphite-clast-to-gimple.c b/gcc/graphite-clast-to-gimple.c index 71507a0..296b893 100644 --- a/gcc/graphite-clast-to-gimple.c +++ b/gcc/graphite-clast-to-gimple.c @@ -1012,34 +1012,16 @@ build_iv_mapping (vec iv_map, struct clast_user_stmt *user_stmt, mpz_clear (bound_two); } -/* Construct bb_pbb_def with BB and PBB. */ - -static bb_pbb_def * -new_bb_pbb_def (basic_block bb, poly_bb_p pbb) -{ - bb_pbb_def *bb_pbb_p; - - bb_pbb_p = XNEW (bb_pbb_def); - bb_pbb_p->bb = bb; - bb_pbb_p->pbb = pbb; - - return bb_pbb_p; -} - /* Mark BB with it's relevant PBB via hashing table BB_PBB_MAPPING. */ static void mark_bb_with_pbb (poly_bb_p pbb, basic_block bb, bb_pbb_htab_type *bb_pbb_mapping) { - bb_pbb_def tmp; - bb_pbb_def **x; - - tmp.bb = bb; - x = bb_pbb_mapping->find_slot (&tmp, INSERT); - - if (x && !*x) - *x = new_bb_pbb_def (bb, pbb); + bool existed; + poly_bb_p &e = bb_pbb_mapping->get_or_insert (bb, &existed); + if (!existed) + e = pbb; } /* Find BB's related poly_bb_p in hash table BB_PBB_MAPPING. */ @@ -1047,14 +1029,9 @@ mark_bb_with_pbb (poly_bb_p pbb, basic_block bb, poly_bb_p find_pbb_via_hash (bb_pbb_htab_type *bb_pbb_mapping, basic_block bb) { - bb_pbb_def tmp; - bb_pbb_def **slot; - - tmp.bb = bb; - slot = bb_pbb_mapping->find_slot (&tmp, NO_INSERT); - - if (slot && *slot) - return ((bb_pbb_def *) *slot)->pbb; + poly_bb_p *pbb = bb_pbb_mapping->get (bb); + if (pbb) + return *pbb; return NULL; } diff --git a/gcc/graphite-htab.h b/gcc/graphite-htab.h index 69fd05a..b1fd81e 100644 --- a/gcc/graphite-htab.h +++ b/gcc/graphite-htab.h @@ -21,43 +21,33 @@ along with GCC; see the file COPYING3. If not see #ifndef GCC_GRAPHITE_HTAB_H #define GCC_GRAPHITE_HTAB_H -#include "hash-table.h" - -/* Stores BB's related PBB. */ - -struct bb_pbb_def -{ - basic_block bb; - poly_bb_p pbb; -}; +#include "hash-map.h" /* Hashtable helpers. */ -struct bb_pbb_hasher : typed_free_remove +struct bb_pbb_hasher : default_hashmap_traits { - typedef bb_pbb_def value_type; - typedef bb_pbb_def compare_type; - static inline hashval_t hash (const value_type *); - static inline bool equal (const value_type *, const compare_type *); + static inline hashval_t hash (const basic_block); + static inline bool equal_keys (const basic_block, const basic_block); }; -/* Hash function for data base element BB_PBB. */ +/* Hash function. */ inline hashval_t -bb_pbb_hasher::hash (const value_type *bb_pbb) +bb_pbb_hasher::hash (const basic_block bb) { - return (hashval_t)(bb_pbb->bb->index); + return (hashval_t)(bb->index); } /* Compare data base element PB1 and PB2. */ inline bool -bb_pbb_hasher::equal (const value_type *bp1, const compare_type *bp2) +bb_pbb_hasher::equal_keys (const basic_block a, const basic_block b) { - return (bp1->bb->index == bp2->bb->index); + return (a->index == b->index); } -typedef hash_table bb_pbb_htab_type; +typedef hash_map bb_pbb_htab_type; poly_bb_p find_pbb_via_hash (bb_pbb_htab_type *, basic_block); bool loop_is_parallel_p (loop_p, bb_pbb_htab_type *, int); diff --git a/gcc/passes.c b/gcc/passes.c index 91b644e..0533687 100644 --- a/gcc/passes.c +++ b/gcc/passes.c @@ -84,6 +84,7 @@ along with GCC; see the file COPYING3. If not see #include "pass_manager.h" #include "tree-ssa-live.h" /* For remove_unused_locals. */ #include "tree-cfgcleanup.h" +#include "hash-map.h" using namespace gcc; @@ -687,64 +688,47 @@ pass_manager::register_dump_files (opt_pass *pass) while (pass); } -struct pass_registry -{ - const char* unique_name; - opt_pass *pass; -}; - /* Helper for pass_registry hash table. */ -struct pass_registry_hasher : typed_noop_remove +struct pass_registry_hasher : default_hashmap_traits { - typedef pass_registry value_type; - typedef pass_registry compare_type; - static inline hashval_t hash (const value_type *); - static inline bool equal (const value_type *, const compare_type *); + static inline hashval_t hash (const char *); + static inline bool equal_keys (const char *, const char *); }; /* Pass registry hash function. */ inline hashval_t -pass_registry_hasher::hash (const value_type *s) +pass_registry_hasher::hash (const char *name) { - return htab_hash_string (s->unique_name); + return htab_hash_string (name); } /* Hash equal function */ inline bool -pass_registry_hasher::equal (const value_type *s1, const compare_type *s2) +pass_registry_hasher::equal_keys (const char *s1, const char *s2) { - return !strcmp (s1->unique_name, s2->unique_name); + return !strcmp (s1, s2); } -static hash_table *name_to_pass_map; +static hash_map + *name_to_pass_map; /* Register PASS with NAME. */ static void register_pass_name (opt_pass *pass, const char *name) { - struct pass_registry **slot; - struct pass_registry pr; - if (!name_to_pass_map) - name_to_pass_map = new hash_table (256); - - pr.unique_name = name; - slot = name_to_pass_map->find_slot (&pr, INSERT); - if (!*slot) - { - struct pass_registry *new_pr; + name_to_pass_map + = new hash_map (256); - new_pr = XCNEW (struct pass_registry); - new_pr->unique_name = xstrdup (name); - new_pr->pass = pass; - *slot = new_pr; - } - else + if (name_to_pass_map->get (name)) return; /* Ignore plugin passes. */ + + const char *unique_name = xstrdup (name); + name_to_pass_map->put (unique_name, pass); } /* Map from pass id to canonicalized pass name. */ @@ -754,15 +738,13 @@ static vec pass_tab = vNULL; /* Callback function for traversing NAME_TO_PASS_MAP. */ -int -passes_pass_traverse (pass_registry **p, void *data ATTRIBUTE_UNUSED) +bool +passes_pass_traverse (const char *const &name, opt_pass *const &pass, void *) { - opt_pass *pass = (*p)->pass; - gcc_assert (pass->static_pass_number > 0); gcc_assert (pass_tab.exists ()); - pass_tab[pass->static_pass_number] = (*p)->unique_name; + pass_tab[pass->static_pass_number] = name; return 1; } @@ -864,15 +846,11 @@ pass_manager::dump_passes () const static opt_pass * get_pass_by_name (const char *name) { - struct pass_registry **slot, pr; - - pr.unique_name = name; - slot = name_to_pass_map->find_slot (&pr, NO_INSERT); - - if (!slot || !*slot) - return NULL; + opt_pass **p = name_to_pass_map->get (name); + if (p) + return *p; - return (*slot)->pass; + return NULL; } diff --git a/gcc/sese.c b/gcc/sese.c index 8191cb9..735248c 100644 --- a/gcc/sese.c +++ b/gcc/sese.c @@ -22,7 +22,7 @@ along with GCC; see the file COPYING3. If not see #include "config.h" #include "system.h" #include "coretypes.h" -#include "hash-table.h" +#include "hash-map.h" #include "tree.h" #include "tree-pretty-print.h" #include "basic-block.h" @@ -53,56 +53,37 @@ along with GCC; see the file COPYING3. If not see #include "sese.h" #include "tree-ssa-propagate.h" -/* Print to stderr the element ELT. */ +/* Helper function for debug_rename_map. */ -static void -debug_rename_elt (rename_map_elt elt) +bool +debug_rename_map_1 (tree_node *const &old_name, tree_node *const &expr, + void *) { fprintf (stderr, "("); - print_generic_expr (stderr, elt->old_name, 0); + print_generic_expr (stderr, old_name, 0); fprintf (stderr, ", "); - print_generic_expr (stderr, elt->expr, 0); + print_generic_expr (stderr, expr, 0); fprintf (stderr, ")\n"); -} - -/* Helper function for debug_rename_map. */ - -int -debug_rename_map_1 (rename_map_elt_s **slot, void *s ATTRIBUTE_UNUSED) -{ - struct rename_map_elt_s *entry = *slot; - debug_rename_elt (entry); - return 1; + return true; } /* Hashtable helpers. */ -struct rename_map_hasher : typed_free_remove +struct rename_map_hasher : default_hashmap_traits { - typedef rename_map_elt_s value_type; - typedef rename_map_elt_s compare_type; - static inline hashval_t hash (const value_type *); - static inline bool equal (const value_type *, const compare_type *); + static inline hashval_t hash (tree); }; /* Computes a hash function for database element ELT. */ inline hashval_t -rename_map_hasher::hash (const value_type *elt) +rename_map_hasher::hash (tree old_name) { - return SSA_NAME_VERSION (elt->old_name); + return SSA_NAME_VERSION (old_name); } -/* Compares database elements E1 and E2. */ - -inline bool -rename_map_hasher::equal (const value_type *elt1, const compare_type *elt2) -{ - return (elt1->old_name == elt2->old_name); -} - -typedef hash_table rename_map_type; +typedef hash_map rename_map_type; /* Print to stderr all the elements of RENAME_MAP. */ @@ -112,26 +93,6 @@ debug_rename_map (rename_map_type *rename_map) { rename_map->traverse (NULL); } - -/* Computes a hash function for database element ELT. */ - -hashval_t -rename_map_elt_info (const void *elt) -{ - return SSA_NAME_VERSION (((const struct rename_map_elt_s *) elt)->old_name); -} - -/* Compares database elements E1 and E2. */ - -int -eq_rename_map_elts (const void *e1, const void *e2) -{ - const struct rename_map_elt_s *elt1 = (const struct rename_map_elt_s *) e1; - const struct rename_map_elt_s *elt2 = (const struct rename_map_elt_s *) e2; - - return (elt1->old_name == elt2->old_name); -} - /* Record LOOP as occurring in REGION. */ @@ -418,15 +379,10 @@ get_false_edge_from_guard_bb (basic_block bb) static tree get_rename (rename_map_type *rename_map, tree old_name) { - struct rename_map_elt_s tmp; - rename_map_elt_s **slot; - gcc_assert (TREE_CODE (old_name) == SSA_NAME); - tmp.old_name = old_name; - slot = rename_map->find_slot (&tmp, NO_INSERT); - - if (slot && *slot) - return (*slot)->expr; + tree *expr = rename_map->get (old_name); + if (expr) + return *expr; return NULL_TREE; } @@ -436,21 +392,10 @@ get_rename (rename_map_type *rename_map, tree old_name) static void set_rename (rename_map_type *rename_map, tree old_name, tree expr) { - struct rename_map_elt_s tmp; - rename_map_elt_s **slot; - if (old_name == expr) return; - tmp.old_name = old_name; - slot = rename_map->find_slot (&tmp, INSERT); - - if (!slot) - return; - - free (*slot); - - *slot = new_rename_map_elt (old_name, expr); + rename_map->put (old_name, expr); } /* Renames the scalar uses of the statement COPY, using the diff --git a/gcc/sese.h b/gcc/sese.h index af919f8..e2a6d45 100644 --- a/gcc/sese.h +++ b/gcc/sese.h @@ -249,31 +249,6 @@ if_region_get_condition_block (ifsese if_region) return if_region_entry (if_region)->dest; } -/* Structure containing the mapping between the old names and the new - names used after block copy in the new loop context. */ -typedef struct rename_map_elt_s -{ - tree old_name, expr; -} *rename_map_elt; - - -extern hashval_t rename_map_elt_info (const void *); -extern int eq_rename_map_elts (const void *, const void *); - -/* Constructs a new SCEV_INFO_STR structure for VAR and INSTANTIATED_BELOW. */ - -static inline rename_map_elt -new_rename_map_elt (tree old_name, tree expr) -{ - rename_map_elt res; - - res = XNEW (struct rename_map_elt_s); - res->old_name = old_name; - res->expr = expr; - - return res; -} - /* Free and compute again all the dominators information. */ static inline void