diff options
author | dberlin <dberlin@138bc75d-0d04-0410-961f-82ee72b054a4> | 2005-06-30 22:18:42 +0000 |
---|---|---|
committer | dberlin <dberlin@138bc75d-0d04-0410-961f-82ee72b054a4> | 2005-06-30 22:18:42 +0000 |
commit | a55dc2cd86f718c1ad76ce7d418c9a8a44b2440b (patch) | |
tree | 93a9e5ca3a3ce97f70134506548b6bda75edd769 /gcc/tree-complex.c | |
parent | eb8c35b0e5b145fd1af8ec1337194ecc967ad753 (diff) | |
download | gcc-a55dc2cd86f718c1ad76ce7d418c9a8a44b2440b.tar.gz |
2005-06-29 Daniel Berlin <dberlin@dberlin.org>
* tree-complex.c (complex_variable_components): Now a hashtable.
(cvc_lookup): Ditto.
(cvc_insert): Ditto.
(create_components): Use referenced var iterator.
Initialize hashtable. Use cvc_insert/lookup.
(extract_components): Use cvc_insert/lookup.
(update_complex_components): Ditto.
(update_complex_components_on_edge): Ditto.
* tree-dfa.c (referenced_vars): Now a hashtable.
(dump_referenced_vars): Use iterator.
(referenced_var_lookup): New function.
(referenced_var_insert): Ditto.
(add_referenced_var): Use referenced_var_insert.
(mark_new_vars_to_rename): Use DECL_UID.
* tree-flow-inline.h (first_htab_element): New function.
(end_htab_p): Ditto.
(next_htab_element): Ditto.
(first_referenced_var): Ditto.
(end_referenced_vars_p): Ditto.
(next_referenced_var): Ditto.
(is_call_clobbered): Use DECL_UID.
(mark_call_clobbered): Ditto.
(clear_call_clobbered): Ditto.
(mark_non_addressable): Ditto.
* tree-flow.h (htab_iterator): New struct.
(FOR_EACH_HTAB_ELEMENT): New macro.
(struct int_tree_map): New struct.
(int_tree_map_hash): Prototype.
(int_tree_map_eq): Ditto.
(referenced_var_iterator): Ditto.
(FOR_EACH_REFERENCED_VAR): New macro.
(referenced_vars): Now a hashtable.
* tree-into-ssa.c (symbol_marked_for_renaming): Use DECL_UID.
(add_new_name_mapping): Ditto.
(mark_def_sites): Ditto.
(insert_phi_nodes): Use referenced_var iterator.
(mark_def_site_blocks): Ditto.
(mark_sym_for_renaming): Use DECL_UID.
* tree-sra.c (is_sra_candidate_decl): Use DECL_UID.
(lookup_element): Ditto.
(find_candidates_for_sra): Use referenced_vars iterator.
Use DECL_UID.
* tree-ssa-alias.c (NUM_REFERENCES): New macro.
(NUM_REFERENCES_CLEAR): Ditto.
(NUM_REFERENCES_INC): Ditto.
(NUM_REFERENCES_SET): Ditto.
(alias_obstack): New bitmap obstack.
(struct alias_map_d): Use bitmap, not sbitmap.
(struct alias_info): Remove num_references.
(init_alias_info): Use referenced_var iterator.
Initialize bitmap obstack.
(delete_alias_info): Use referenced_var iterator.
Free bitmap obstack.
(compute_points_to_and_addr_escape): Use DECL_UID.
Use new NUM_REFERENCES macros.
(compute_flow_sensitive_aliasing): may_aliases is now a bitmap.
Use new NUM_REFERENCES macros.
(group_aliases_into): Update prototype to use bitmap.
(setup_pointers_and_addressables): Use referenced_vars iterator.
Use DECL_UID. Use new NUM_REFERENCES macros.
(add_pointed_to_var): Use DECL_UID.
(dump_alias_info): Use referenced_var iterator.
(add_type_alias): Ditto.
(used_portions): Now a hashtable.
(used_part_map_eq): New function.
(used_part_map_hash): Ditto.
(free_used_part_map): Ditto.
(up_lookup): Ditto.
(up_insert): Ditto.
(get_or_create_used_part_for): Use up_lookup.
(create_overlap_variables_for): Ditto.
(find_used_portions): Use up_insert.
Use DECL_UID.
(create_structure_vars): Init used_portions hashtable, use
referenced_vars iterator.
* tree-ssa-live.c (create_ssa_var_map): sbitmaps became bitmaps.
Use DECL_UID.
* tree-ssa-loop-im.c (gather_mem_refs_stmt): Use DECL_UID.
* tree-ssa-operands.c (get_asm_expr_operands): Ditto.
(note_addressable): Ditto.
* tree-ssa-structalias.c (set_uids_in_ptset): Ditto.
* tree-ssa.c (verify_flow_insensitive_alias_info): Use
referenced_var iterator.
Use DECL_UID.
(delete_tree_ssa): Ditto.
(int_tree_map_eq): New function.
(int_tree_map_hash): Ditto.
* tree-stdarg.c (find_va_list_reference): Use DECL_UID.
(va_list_ptr_read): Ditto.
(va_list_counter_struct_op): Ditto.
(va_list_ptr_write): Ditto.
(check_va_list_escapes): Ditto.
(check_all_va_list_escapes): Ditto.
(execute_optimize_stdarg): Ditto.
* tree-tailcall.c (suitable_for_tail_opt_p): Used referenced_var
iterator.
2005-06-30 Daniel Berlin <dberlin@dberlin.org>
* hashtab.h (HTAB_DELETED_ENTRY): New macro.
(HTAB_EMPTY_ENTRY): New macro.
2005-06-30 Daniel Berlin <dberlin@dberlin.org>
* hashtab.c (EMPTY_ENTRY): Moved and renamed.
(DELETED_ENTRY): Ditto.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@101480 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/tree-complex.c')
-rw-r--r-- | gcc/tree-complex.c | 67 |
1 files changed, 49 insertions, 18 deletions
diff --git a/gcc/tree-complex.c b/gcc/tree-complex.c index 8be916ab94a..e32dd237be8 100644 --- a/gcc/tree-complex.c +++ b/gcc/tree-complex.c @@ -52,8 +52,37 @@ DEF_VEC_ALLOC_I(complex_lattice_t, heap); static VEC(complex_lattice_t, heap) *complex_lattice_values; -/* For each complex variable, a pair of variables for the components. */ -static VEC(tree, heap) *complex_variable_components; +/* For each complex variable, a pair of variables for the components exists in + the hashtable. */ +static htab_t complex_variable_components; + +/* Lookup UID in the complex_variable_components hashtable and return the + associated tree. */ +static tree +cvc_lookup (unsigned int uid) +{ + struct int_tree_map *h, in; + in.uid = uid; + h = htab_find_with_hash (complex_variable_components, &in, uid); + gcc_assert (h); + return h->to; +} + +/* Insert the pair UID, TO into the complex_variable_components hashtable. */ + +static void +cvc_insert (unsigned int uid, tree to) +{ + struct int_tree_map *h; + void **loc; + + h = xmalloc (sizeof (struct int_tree_map)); + h->uid = uid; + h->to = to; + loc = htab_find_slot_with_hash (complex_variable_components, h, + uid, INSERT); + *(struct int_tree_map **) loc = h; +} /* Return true if T is not a zero constant. In the case of real values, @@ -355,18 +384,19 @@ complex_visit_phi (tree phi) static void create_components (void) { - size_t k, n; + size_t n; + tree var; + referenced_var_iterator rvi; n = num_referenced_vars; if (n == 0) return; - complex_variable_components = VEC_alloc (tree, heap, 2*n); - VEC_safe_grow (tree, heap, complex_variable_components, 2*n); + complex_variable_components = htab_create (10, int_tree_map_hash, + int_tree_map_eq, free); - for (k = 0; k < n; ++k) + FOR_EACH_REFERENCED_VAR (var, rvi) { - tree var = referenced_var (k); tree r = NULL, i = NULL; if (var != NULL @@ -409,8 +439,8 @@ create_components (void) } } - VEC_replace (tree, complex_variable_components, 2*k, r); - VEC_replace (tree, complex_variable_components, 2*k + 1, i); + cvc_insert (2 * DECL_UID (var), r); + cvc_insert (2 * DECL_UID (var) + 1, i); } } @@ -464,8 +494,7 @@ extract_component (block_stmt_iterator *bsi, tree t, bool imagpart_p, } } - return VEC_index (tree, complex_variable_components, - var_ann (SSA_NAME_VAR (t))->uid * 2 + imagpart_p); + return cvc_lookup (DECL_UID (SSA_NAME_VAR (t)) * 2 + imagpart_p); } default: @@ -478,16 +507,16 @@ extract_component (block_stmt_iterator *bsi, tree t, bool imagpart_p, static void update_complex_components (block_stmt_iterator *bsi, tree stmt, tree r, tree i) { - unsigned int uid = var_ann (SSA_NAME_VAR (TREE_OPERAND (stmt, 0)))->uid; + unsigned int uid = DECL_UID (SSA_NAME_VAR (TREE_OPERAND (stmt, 0))); tree v, x; - v = VEC_index (tree, complex_variable_components, 2*uid); + v = cvc_lookup (2*uid); x = build2 (MODIFY_EXPR, TREE_TYPE (v), v, r); SET_EXPR_LOCUS (x, EXPR_LOCUS (stmt)); TREE_BLOCK (x) = TREE_BLOCK (stmt); bsi_insert_after (bsi, x, BSI_NEW_STMT); - v = VEC_index (tree, complex_variable_components, 2*uid + 1); + v = cvc_lookup (2*uid + 1); x = build2 (MODIFY_EXPR, TREE_TYPE (v), v, i); SET_EXPR_LOCUS (x, EXPR_LOCUS (stmt)); TREE_BLOCK (x) = TREE_BLOCK (stmt); @@ -497,10 +526,10 @@ update_complex_components (block_stmt_iterator *bsi, tree stmt, tree r, tree i) static void update_complex_components_on_edge (edge e, tree stmt, tree lhs, tree r, tree i) { - unsigned int uid = var_ann (SSA_NAME_VAR (lhs))->uid; + unsigned int uid = DECL_UID (SSA_NAME_VAR (lhs)); tree v, x; - v = VEC_index (tree, complex_variable_components, 2*uid); + v = cvc_lookup (2*uid); x = build2 (MODIFY_EXPR, TREE_TYPE (v), v, r); if (stmt) { @@ -509,7 +538,7 @@ update_complex_components_on_edge (edge e, tree stmt, tree lhs, tree r, tree i) } bsi_insert_on_edge (e, x); - v = VEC_index (tree, complex_variable_components, 2*uid + 1); + v = cvc_lookup (2*uid + 1); x = build2 (MODIFY_EXPR, TREE_TYPE (v), v, i); if (stmt) { @@ -1406,7 +1435,9 @@ tree_lower_complex (void) bsi_commit_edge_inserts (); - VEC_free (tree, heap, complex_variable_components); + if (complex_variable_components) + htab_delete (complex_variable_components); + VEC_free (complex_lattice_t, heap, complex_lattice_values); } |