diff options
author | Richard Guenther <rguenther@suse.de> | 2010-01-04 21:02:42 +0000 |
---|---|---|
committer | Richard Biener <rguenth@gcc.gnu.org> | 2010-01-04 21:02:42 +0000 |
commit | a7d04a5357719127b0ac3b8f139ccabf188f30b4 (patch) | |
tree | 0d4b71e06f20c74e023eb6aacd7690d252cf6d24 /gcc/tree-ssa-dom.c | |
parent | d6de356aa3f8fa23a08ca801aa63c5e9cce58a20 (diff) | |
download | gcc-a7d04a5357719127b0ac3b8f139ccabf188f30b4.zip gcc-a7d04a5357719127b0ac3b8f139ccabf188f30b4.tar.gz gcc-a7d04a5357719127b0ac3b8f139ccabf188f30b4.tar.bz2 |
tree-ssa-sccvn.c (get_or_alloc_constant_value_id): Allocate a new entry only if needed.
2010-01-04 Richard Guenther <rguenther@suse.de>
* tree-ssa-sccvn.c (get_or_alloc_constant_value_id): Allocate
a new entry only if needed.
* tree-ssa-dom.c (lookup_avail_expr): Likewise.
* tree-ssa-coalesce.c (find_coalesce_pair): Avoid one
hashtable lookup.
* tree-ssa-pre.c (sorted_array_from_bitmap_set): Pre-allocate
the result array.
(phi_translate): Handle CONSTANTs early.
From-SVN: r155633
Diffstat (limited to 'gcc/tree-ssa-dom.c')
-rw-r--r-- | gcc/tree-ssa-dom.c | 35 |
1 files changed, 15 insertions, 20 deletions
diff --git a/gcc/tree-ssa-dom.c b/gcc/tree-ssa-dom.c index 48f423b..bbe4539 100644 --- a/gcc/tree-ssa-dom.c +++ b/gcc/tree-ssa-dom.c @@ -2229,50 +2229,47 @@ lookup_avail_expr (gimple stmt, bool insert) void **slot; tree lhs; tree temp; - struct expr_hash_elt *element = XNEW (struct expr_hash_elt); + struct expr_hash_elt element; /* Get LHS of assignment or call, else NULL_TREE. */ lhs = gimple_get_lhs (stmt); - initialize_hash_element (stmt, lhs, element); + initialize_hash_element (stmt, lhs, &element); if (dump_file && (dump_flags & TDF_DETAILS)) { fprintf (dump_file, "LKUP "); - print_expr_hash_elt (dump_file, element); + print_expr_hash_elt (dump_file, &element); } /* Don't bother remembering constant assignments and copy operations. Constants and copy operations are handled by the constant/copy propagator in optimize_stmt. */ - if (element->expr.kind == EXPR_SINGLE - && (TREE_CODE (element->expr.ops.single.rhs) == SSA_NAME - || is_gimple_min_invariant (element->expr.ops.single.rhs))) - { - free (element); - return NULL_TREE; - } + if (element.expr.kind == EXPR_SINGLE + && (TREE_CODE (element.expr.ops.single.rhs) == SSA_NAME + || is_gimple_min_invariant (element.expr.ops.single.rhs))) + return NULL_TREE; /* Finally try to find the expression in the main expression hash table. */ - slot = htab_find_slot_with_hash (avail_exprs, element, element->hash, + slot = htab_find_slot_with_hash (avail_exprs, &element, element.hash, (insert ? INSERT : NO_INSERT)); if (slot == NULL) - { - free (element); - return NULL_TREE; - } + return NULL_TREE; if (*slot == NULL) { - *slot = (void *) element; + struct expr_hash_elt *element2 = XNEW (struct expr_hash_elt); + *element2 = element; + element2->stamp = element2; + *slot = (void *) element2; if (dump_file && (dump_flags & TDF_DETAILS)) { fprintf (dump_file, "2>>> "); - print_expr_hash_elt (dump_file, element); + print_expr_hash_elt (dump_file, element2); } - VEC_safe_push (expr_hash_elt_t, heap, avail_exprs_stack, element); + VEC_safe_push (expr_hash_elt_t, heap, avail_exprs_stack, element2); return NULL_TREE; } @@ -2289,8 +2286,6 @@ lookup_avail_expr (gimple stmt, bool insert) lhs = temp; } - free (element); - if (dump_file && (dump_flags & TDF_DETAILS)) { fprintf (dump_file, "FIND: "); |