This is the mail archive of the
mailing list for the GCC project.
Re: [patch] Hash table changes from cxx-conversion branch
- From: Richard Biener <richard dot guenther at gmail dot com>
- To: Lawrence Crowl <crowl at googlers dot com>
- Cc: gcc-patches List <gcc-patches at gcc dot gnu dot org>, Diego Novillo <dnovillo at google dot com>
- Date: Thu, 25 Apr 2013 13:16:28 +0200
- Subject: Re: [patch] Hash table changes from cxx-conversion branch
- References: <CAGqM8fZAysjqkCgxbTMeDsXEvoZ-4DdyhzxadopZksLP9n6m9Q at mail dot gmail dot com> <CAFiYyc1ev9=DN3mhXwvz-3PC4wneXBrQs3Q+CMXv-SjCMjxe7A at mail dot gmail dot com> <CAGqM8fZC_DG2u17WD=tnnQq3nJ3MtAyJzUBU5+4D4WME2Sh-rQ at mail dot gmail dot com> <CAGqM8faF5XThzBAchmmxCiLUMXoh193=FB6SLCqpffqgx326kg at mail dot gmail dot com>
On Wed, Apr 24, 2013 at 9:58 PM, Lawrence Crowl <firstname.lastname@example.org> wrote:
> On 4/24/13, Lawrence Crowl <email@example.com> wrote:
>> Updated hash table patch. This patch does not include the config part,
>> and does not include the entries already approved.
>> The patch is attached due to size.
> Trying again. Patch attached compressed. Introductory text below.
> This patch is a consolodation of the hash_table patches to the
> cxx-conversion branch for files not under gcc/config.
> Update various hash tables from htab_t to hash_table.
> Modify types and calls to match.
> * tree-parloops.c'reduction
> * tree-parloops.c'name_to_copy
> Fold reduction_info_hash and reduction_info_eq into new struct
> reduction_hasher. Fold name_to_copy_elt_eq and name_to_copy_elt_hash
> into new struct name_to_copy_hasher.
> * var-tracking.c'emit_note_data_def.vars
> * var-tracking.c'shared_hash_def.htab
> * var-tracking.c'changed_variables
> Fold variable_htab_hash, variable_htab_eq, variable_htab_free
> into new struct variable_hasher.
> Add typedef variable_table_type.
> Add typedef variable_iterator_type.
> * trans-mem.c'tm_log
> Fold tm_log_hash, tm_log_eq, tm_log_free into new struct log_entry_hasher.
> * trans-mem.c'tm_memopt_value_numbers
> Fold tm_memop_hash, tm_memop_eq into new struct tm_memop_hasher.
> * tree-ssa-strlen.c'decl_to_stridxlist_htab
> Fold decl_to_stridxlist_hash into new struct stridxlist_hasher.
> * tree-ssa-loop-ivopts.c'ivopts_data::inv_expr_tab
> Fold htab_inv_expr_hash and htab_inv_expr_eq into new struct
> * tree-ssa-uncprop.c'equiv
> Equiv renamed to val_ssa_equiv because of name ambiguity with local variables.
> Fold equiv_hash, equiv_eq and equiv_free into new struct val_ssa_equiv_hasher.
> Renamed variables equiv_hash_elt to an_equiv_elt because of name ambiguity
> with struct type. Changed equiv_hash_elt_p to an_equiv_elt_p to match.
> * tree-ssa-phiopt.c'seen_ssa_names
> Fold name_to_bb_hash and name_to_bb_eq into new struct ssa_names_hasher.
> * tree-ssa-structalias.c'pointer_equiv_class_table
> * tree-ssa-structalias.c'location_equiv_class_table
> Fold equiv_class_label_hash and equiv_class_label_eq into new
> struct equiv_class_hasher.
> * tree-ssa-structalias.c'shared_bitmap_table
> Fold shared_bitmap_hash and shared_bitmap_eq into new struct
> * tree-ssa-live.c'var_map_base_init::tree_to_index
> New struct tree_int_map_hasher.
> * tree-sra.c'candidates
> Fold uid_decl_map_hash and uid_decl_map_eq into new struct
> uid_decl_hasher. This change moves the definitions from tree-ssa.c
> into tree-sra.c and removes the declarations from tree-flow.h
> Remove stale declaration of removed TB_parent_eq.
> Fix template parameter for base class to match value_type.
> Use gimplify_hasher::hash rather than gimple_tree_hash in the
> assertion check.
> Change return values to match return type. (I.e. no conversions.)
> * graphite-clast-to-gimple.c'ivs_params::newivs_index
> * graphite-clast-to-gimple.c'ivs_params::params_index
> * graphite-clast-to-gimple.c'print_generated_program::params_index
> * graphite-clast-to-gimple.c'gloog::newivs_index
> * graphite-clast-to-gimple.c'gloog::params_index
> * graphite.c graphite_transform_loops::bb_pbb_mapping
> * sese.c copy_bb_and_scalar_dependences::rename_map
> Move hash table declarations to a new graphite-htab.h, because they
> are used in few places.
> Remove unused:
> htab_t scop::original_pddrs
> Remove unused:
> * gimplify.c'gimplify_ctx::temp_htab
> Move struct gimple_temp_hash_elt and struct gimplify_ctx to a new
> gimplify-ctx.h, because they are used few places.
> * cselib.c'cselib_hash_table
> * gcse.c'pre_ldst_table
> * gimple-ssa-strength-reduction.c'base_cand_map
> * haifa-sched.c'delay_htab
> * haifa-sched.c'delay_htab_i2
> * ira-color.c'allocno_hard_regs_htab
> * ira-costs.c'cost_classes_htab
> * loop-invariant.c'merge_identical_invariants::eq
> * loop-iv.c'bivs
> * loop-unroll.c'opt_info::insns_to_split
> * loop-unroll.c'opt_info::insns_with_var_to_expand
> * passes.c'name_to_pass_map
> * plugin.c'event_tab
> * postreload-gcse.c'expr_table
> * store-motion.c'store_motion_mems_table
> * tree-cfg.c'discriminator_per_locus
> * tree-scalar-evolution.c'resolve_mixers::cache
> * tree-ssa-dom.c'avail_exprs
> Remove unused:
> dse.c bitmap clear_alias_sets
> dse.c bitmap disqualified_clear_alias_sets
> dse.c alloc_pool clear_alias_mode_pool
> dse.c dse_step2_spill
> dse.c dse_step5_spill
> graphds.h htab_t graph::indices
> * attribs.c'scoped_attributes::attribute_hash
> * bitmap.c'bitmap_desc_hash
> * dwarf2cfi.c'trace_index
> * dwarf2out.c'break_out_includes::cu_hash_table
> * dwarf2out.c'copy_decls_for_unworthy_types::decl_table
> * dwarf2out.c'optimize_external_refs::map
> * dwarf2out.c'output_comp_unit::extern_map
> * dwarf2out.c'output_comdat_type_unit::extern_map
> * dwarf2out.c'output_macinfo::macinfo_htab
> * dwarf2out.c'optimize_location_lists::htab
> * dwarf2out.c'dwarf2out_finish::comdat_type_table
> * except.c'ehspec_hash_type
> * except.c'assign_filter_values::ttypes
> * except.c'assign_filter_values::ehspec
> * except.c'sjlj_assign_call_site_values::ar_hash
> * except.c'convert_to_eh_region_ranges::ar_hash
> * trans-mem.c'tm_new_mem_hash
> * tree-browser.c'TB_up_ht
> * tree-eh.c'finally_tree
> Move the declaration of hash_table <alloc_pool_hasher> alloc_pool_hash
> in alloc-pool.c to after the method definitions for its parameter
> * ggc-common.c'loc_hash
> * ggc-common.c'ptr_hash
> Add a new hash_table method elements_with_deleted to meet the needs of
> Correct many methods with parameter types compare_type to the correct
> value_type. (Correct code was unlikely to notice the change, but
> incorrect code will.)
> * tree-complex.c'complex_variable_components
> * tree-parloops.c'eliminate_local_variables_stmt::decl_address
> * tree-parloops.c'separate_decls_in_region::decl_copies
> Move hash table declarations to a new tree-hasher.h, to resolve
> compilation dependences and because they are used in few places.
> * lto-streamer.h'output_block::string_hash_table
> * lto-streamer-in.c'file_name_hash_table
> * lto-streamer.c'tree_htab
> The struct string_slot moves from data-streamer.h to lto-streamer.h to
> resolve compilation dependences.
> Tested on x86_64.
Please send context diffs - the following is an especially awkward example:
-/* Structure for passing some other parameters to function
- emit_note_insn_var_location. */
-typedef struct emit_note_data_def
+/* Return true if a decl_or_value DV is a DECL or NULL. */
+static inline bool
+dv_is_decl_p (decl_or_value dv)
- /* The instruction which the note will be emitted before/after. */
- rtx insn;
+ return !dv || (int) TREE_CODE ((tree) dv) != (int) VALUE;
The changes to the following files are ok (just in case I will not finish review
due to time constraints):
I'll leave the var-tracking.c changes to respective maintainers, maybe
it's a good
idea to send that heavy reorg separately.
-debug_rename_map_1 (void **slot, void *s ATTRIBUTE_UNUSED)
+debug_rename_map_1 (rename_map_elt_s **slot, void *s ATTRIBUTE_UNUSED)
-debug_rename_map (htab_t rename_map)
+debug_rename_map (rename_map_type rename_map)
- htab_traverse (rename_map, debug_rename_map_1, NULL);
+ rename_map.traverse <void *, debug_rename_map_1> (NULL);
aww ... one reason why I dislike template function arguments ;)
Functors are so much nicer.
gcc/tree-hasher.h -- I'd expected tree_int, int_tree and uid_decl
hashers to be here btw
Thus, the patch is ok apart from the var-tracking.c bits which I defer to
Btw, a hint on future such re-orgs - smaller patches are easily reviewed
when going through mail - large ones such as this are queued somewhere
for eventual review (that happens for me). So I suggest to submit independent
bits independently and you get a high chance of getting very quick approvals.
> Lawrence Crowlgcc/tree-eh.c