diff options
author | bstarynk <bstarynk@138bc75d-0d04-0410-961f-82ee72b054a4> | 2010-01-08 13:20:13 +0000 |
---|---|---|
committer | bstarynk <bstarynk@138bc75d-0d04-0410-961f-82ee72b054a4> | 2010-01-08 13:20:13 +0000 |
commit | 81713f9386aaa3397ac44284a7d6f90fc4b7040e (patch) | |
tree | f10f2534b770430a68f03c63d4712a183babb994 /gcc/tree-ssa-dom.c | |
parent | 39e46e4d64364c5b3381604f6158672745e19d64 (diff) | |
download | gcc-81713f9386aaa3397ac44284a7d6f90fc4b7040e.tar.gz |
2010-01-08 Basile Starynkevitch <basile@starynkevitch.net>
MELT branch merged with trunk rev 155725
{{also coded a bit the infix parser in gcc/melt/ etc..}}
{{merged with trunk rev 155725, and minor additions}}
* gcc/melt-runtime.c: removed useless trailing spaces.
* gcc/melt/warmelt-infixsyntax.melt: added more, notably
class_infix_parser, class_infix_delimiter some delimiters and our
backtrackable getlex & peeklex functions. Still very incomplete.
* gcc/melt/warmelt-outobj.melt: added the translate_macroexpanded_list
function to ease factoring out the common translation between
infix & lisp syntaxes.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/branches/melt-branch@155734 138bc75d-0d04-0410-961f-82ee72b054a4
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 48f423bec61..bbe453963b7 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: "); |