From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 59579 invoked by alias); 26 Jun 2015 16:39:02 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Id: List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Received: (qmail 59553 invoked by uid 89); 26 Jun 2015 16:39:01 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-1.5 required=5.0 tests=AWL,BAYES_00,SPF_PASS autolearn=ham version=3.3.2 X-HELO: eu-smtp-delivery-143.mimecast.com Received: from eu-smtp-delivery-143.mimecast.com (HELO eu-smtp-delivery-143.mimecast.com) (146.101.78.143) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Fri, 26 Jun 2015 16:38:59 +0000 Received: from cam-owa1.Emea.Arm.com (fw-tnat.cambridge.arm.com [217.140.96.140]) by eu-smtp-1.mimecast.com with ESMTP id uk-mta-17-pOwxViDaRuyOvD_l5VfMIg-1 Received: from localhost ([10.1.2.79]) by cam-owa1.Emea.Arm.com with Microsoft SMTPSVC(6.0.3790.3959); Fri, 26 Jun 2015 17:38:57 +0100 From: Richard Sandiford To: Rainer Orth Mail-Followup-To: Rainer Orth ,Jeff Law , "gcc-patches\@gcc.gnu.org" , richard.sandiford@arm.com Cc: Jeff Law , "gcc-patches\@gcc.gnu.org" Subject: Re: [12/12] Simplify uses of hash_map References: <87egl2bicm.fsf@e105548-lin.cambridge.arm.com> <87twty8ob7.fsf@e105548-lin.cambridge.arm.com> <558C3091.5050607@redhat.com> <87vbeapmem.fsf@e105548-lin.cambridge.arm.com> <87lhf6phtt.fsf@e105548-lin.cambridge.arm.com> Date: Fri, 26 Jun 2015 16:45:00 -0000 In-Reply-To: <87lhf6phtt.fsf@e105548-lin.cambridge.arm.com> (Richard Sandiford's message of "Fri, 26 Jun 2015 17:14:54 +0100") Message-ID: <87bng2pgpr.fsf@e105548-lin.cambridge.arm.com> User-Agent: Gnus/5.130012 (Ma Gnus v0.12) Emacs/24.3 (gnu/linux) MIME-Version: 1.0 X-MC-Unique: pOwxViDaRuyOvD_l5VfMIg-1 Content-Type: text/plain; charset=WINDOWS-1252 Content-Transfer-Encoding: quoted-printable X-SW-Source: 2015-06/txt/msg01975.txt.bz2 Richard Sandiford writes: > Rainer Orth writes: >> Richard Sandiford writes: >> >>> Rainer Orth writes: >>>> Jeff Law writes: >>>> >>>>> On 06/23/2015 08:57 AM, Richard Sandiford wrote: >>>>>> At this point all hash_map traits know what kind of key they're >>>>>> dealing with, so we can make that a traits typedef, like it is for >>>>>> hash_table traits. Then, if we make the default hash traits for >>>>>> T be T, we can use hash_table-style traits as the first template >>>>>> parameter to hash_map, without the need for a third. That is, if >>>>>> foo_hash hashes elements of type foo_type: >>>>>> >>>>>> typedef simple_hashmap_traits foo_traits; >>>>>> hash_map x; >>>>>> >>>>>> becomes just: >>>>>> >>>>>> hash_map x; >>>>>> >>>>>> just like a hash_table of foo_types would be: >>>>>> >>>>>> hash_table y; >>>>>> >>>>>> This patch makes that simplification. >>>>>> >>>>>> >>>>>> gcc/ >>>>>> * hash-map-traits.h (simple_hashmap_traits::key_type): New typedef. >>>>>> (unbounded_int_hashmap_traits::key_type): Likewise. >>>>>> * hash-map.h (hash_map): Get the key type from the traits. >>>>>> * hash-traits.h (default_hash_traits): By default, inherit from the >>>>>> template parameter. >>>>>> * alias.c (alias_set_traits): Delete. >>>>>> (alias_set_entry_d::children): Use alias_set_hash as the first >>>>>> template parameter. >>>>>> (record_alias_subset): Update accordingly. >>>>>> * except.c (tree_hash_traits): Delete. >>>>>> (type_to_runtime_map): Use tree_hash as the first template paramete= r. >>>>>> (init_eh): Update accordingly. >>>>>> * genmatch.c (capture_id_map_hasher): Delete. >>>>>> (cid_map_t): Use nofree_string_hash as first template parameter. >>>>>> * ipa-icf.h (symbol_compare_hashmap_traits): Delete. >>>>>> * ipa-icf.c (sem_item_optimizer::subdivide_classes_by_sensitive_ref= s): >>>>>> Use symbol_compare_hash as the first template parameter in >>>>>> subdivide_hash_map. >>>>>> * mem-stats.h (mem_usage_pair::mem_alloc_hashmap_traits): Delete. >>>>>> (mem_usage_pair::mem_map_t): Use mem_location_hash as the first >>>>>> template parameter. >>>>>> * passes.c (pass_registry_hasher): Delete. >>>>>> (name_to_pass_map): Use nofree_string_hash as the first template >>>>>> parameter. >>>>>> (register_pass_name): Update accordingly. >>>>>> * sanopt.c (sanopt_tree_map_traits): Delete. >>>>>> (sanopt_tree_triplet_map_traits): Delete. >>>>>> (sanopt_ctx::asan_check_map): Use tree_operand_hash as the first >>>>>> template parameter. >>>>>> (sanopt_ctx::vptr_check_map): Use sanopt_tree_triplet_hash as >>>>>> the first template parameter. >>>>>> * sese.c (rename_map_hasher): Delete. >>>>>> (rename_map_type): Use tree_ssa_name_hash as the first template >>>>>> parameter. >>>>>> * symbol-summary.h (function_summary::summary_hashmap_traits): Dele= te. >>>>>> (function_summary::m_map): Use map_hash as the first template >>>>>> parameter. >>>>>> (function_summary::release): Update accordingly. >>>>>> * tree-if-conv.c (phi_args_hash_traits): Delete. >>>>>> (predicate_scalar_phi): Use tree_operand_hash as the first template >>>>>> parameter to phi_arg_map. >>>>>> * tree-inline.h (dependence_hasher): Delete. >>>>>> (copy_body_data::dependence_map): Use dependence_hash as the first >>>>>> template parameter. >>>>>> * tree-inline.c (remap_dependence_clique): Update accordingly. >>>>>> * tree-ssa-strlen.c (stridxlist_hash_traits): Delete. >>>>>> (decl_to_stridxlist_htab): Use tree_decl_hash as the first template >>>>>> parameter. >>>>>> (addr_stridxptr): Update accordingly. >>>>>> * value-prof.c (profile_id_traits): Delete. >>>>>> (cgraph_node_map): Use profile_id_hash as the first template >>>>>> parameter. >>>>>> (init_node_map): Update accordingly. >>>>>> * config/alpha/alpha.c (string_traits): Delete. >>>>>> (machine_function::links): Use nofree_string_hash as the first >>>>>> template parameter. >>>>>> (alpha_use_linkage, alpha_write_linkage): Update accordingly. >>>>>> * config/m32c/m32c.c (pragma_traits): Delete. >>>>>> (pragma_htab): Use nofree_string_hash as the first template paramet= er. >>>>>> (m32c_note_pragma_address): Update accordingly. >>>>>> * config/mep/mep.c (pragma_traits): Delete. >>>>>> (pragma_htab): Use nofree_string_hash as the first template paramet= er. >>>>>> (mep_note_pragma_flag): Update accordingly. >>>>>> * config/mips/mips.c (mips16_flip_traits): Delete. >>>>>> (mflip_mips16_htab): Use nofree_string_hash as the first template >>>>>> parameter. >>>>>> (mflip_mips16_use_mips16_p): Update accordingly. >>>>>> (local_alias_traits): Delete. >>>>>> (mips16_local_aliases): Use nofree_string_hash as the first template >>>>>> parameter. >>>>>> (mips16_local_alias): Update accordingly. >>>>> Phew. OK. >>>> >>>> According to a reghunt, this patch broke bootstrap (at least with g++ >>>> 4.7 as bootstrap compiler): >>> >>> Which target are you using? I just tried with a gcc 4.7 host compiler >>> on x86_64-linux-gnu and it seemed to work. >> >> I see it on i386-pc-solaris2.1[01] and sparc-sun-solaris2.1[01]. >> >> gcc 4.9 works there, though. > > OK, I can reproduce it with 4.7.2 but it seems to be fixed in 4.7.4. > Trying to find out what changed as well as find a workaround. This seems to work for me. Thanks, Richard gcc/ * hash-map.h (hash_map::traverse): Use the definition of the Key typedef rather than the typedef itself. Index: gcc/hash-map.h =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D --- gcc/hash-map.h 2015-06-25 18:17:12.360905717 +0100 +++ gcc/hash-map.h 2015-06-26 17:36:36.187837149 +0100 @@ -169,7 +169,8 @@ class GTY((user)) hash_map /* Call the call back on each pair of key and value with the passed in arg. */ =20 - template + template void traverse (Arg a) const { for (typename hash_table::iterator iter =3D m_table.begi= n (); @@ -177,7 +178,8 @@ class GTY((user)) hash_map f ((*iter).m_key, (*iter).m_value, a); } =20 - template + template void traverse (Arg a) const { for (typename hash_table::iterator iter =3D m_table.begi= n ();