diff options
author | Richard Biener <rguenther@suse.de> | 2015-10-01 07:54:26 +0000 |
---|---|---|
committer | Richard Biener <rguenth@gcc.gnu.org> | 2015-10-01 07:54:26 +0000 |
commit | 34050b6bee181a12099a9bc31a4d25469573bc6d (patch) | |
tree | 84b464b97cc715dd2e30f73f4fc420d296b60500 /gcc/tree-ssa-pre.c | |
parent | e01c66ca3083cf998d7e2f568ff6227f86727499 (diff) | |
download | gcc-34050b6bee181a12099a9bc31a4d25469573bc6d.zip gcc-34050b6bee181a12099a9bc31a4d25469573bc6d.tar.gz gcc-34050b6bee181a12099a9bc31a4d25469573bc6d.tar.bz2 |
gimple-match.h (mprts_hook): Declare.
2015-10-01 Richard Biener <rguenther@suse.de>
* gimple-match.h (mprts_hook): Declare.
* gimple-match.head.c (mprts_hook): Define.
(maybe_push_res_to_seq): Use new hook.
* gimple-fold.c (gimple_fold_stmt_to_constant_1): Likewise.
* tree-ssa-sccvn.h (vn_ssa_aux::expr): Change to a gimple_seq.
(vn_ssa_aux::has_constants): Remove.
* tree-ssa-sccvn.c: Include gimple-match.h.
(VN_INFO_GET): Assert we don't re-use SSA names.
(vn_get_expr_for): Remove.
(expr_has_constants): Likewise.
(stmt_has_constants): Likewise.
(simplify_binary_expression): Likewise.
(simplify_unary_expression): Likewise.
(vn_lookup_simplify_result): New hook.
(visit_copy): Adjust.
(visit_reference_op_call): Likewise.
(visit_phi): Likewise.
(visit_use): Likewise.
(process_scc): Likewise.
(init_scc_vn): Likewise.
(visit_reference_op_load): Likewise. Use match-and-simplify and
a gimple seq for inserted expressions.
(try_to_simplify): Remove GENERIC stmt combining code.
(sccvn_dom_walker::before_dom_children): Use match-and-simplify.
* tree-ssa-pre.c (eliminate_insert): Adjust.
(eliminate_dom_walker::before_dom_children): Likewise.
* gcc.dg/tree-ssa/ssa-fre-7.c: Adjust.
* gcc.dg/tree-ssa/ssa-fre-8.c: Likewise.
From-SVN: r228320
Diffstat (limited to 'gcc/tree-ssa-pre.c')
-rw-r--r-- | gcc/tree-ssa-pre.c | 24 |
1 files changed, 13 insertions, 11 deletions
diff --git a/gcc/tree-ssa-pre.c b/gcc/tree-ssa-pre.c index ac298d3..f8feaa1 100644 --- a/gcc/tree-ssa-pre.c +++ b/gcc/tree-ssa-pre.c @@ -3945,21 +3945,23 @@ eliminate_push_avail (tree op) static tree eliminate_insert (gimple_stmt_iterator *gsi, tree val) { - tree expr = vn_get_expr_for (val); - if (!CONVERT_EXPR_P (expr) - && TREE_CODE (expr) != VIEW_CONVERT_EXPR) + gimple *stmt = gimple_seq_first_stmt (VN_INFO (val)->expr); + if (!is_gimple_assign (stmt) + || (!CONVERT_EXPR_CODE_P (gimple_assign_rhs_code (stmt)) + && gimple_assign_rhs_code (stmt) != VIEW_CONVERT_EXPR)) return NULL_TREE; - tree op = TREE_OPERAND (expr, 0); + tree op = gimple_assign_rhs1 (stmt); + if (gimple_assign_rhs_code (stmt) == VIEW_CONVERT_EXPR) + op = TREE_OPERAND (op, 0); tree leader = TREE_CODE (op) == SSA_NAME ? eliminate_avail (op) : op; if (!leader) return NULL_TREE; - tree res = make_temp_ssa_name (TREE_TYPE (val), NULL, "pretmp"); - gassign *tem = gimple_build_assign (res, - fold_build1 (TREE_CODE (expr), - TREE_TYPE (expr), leader)); - gsi_insert_before (gsi, tem, GSI_SAME_STMT); + gimple_seq stmts = NULL; + tree res = gimple_build (&stmts, gimple_assign_rhs_code (stmt), + TREE_TYPE (val), leader); + gsi_insert_seq_before (gsi, stmts, GSI_SAME_STMT); VN_INFO_GET (res)->valnum = val; if (TREE_CODE (leader) == SSA_NAME) @@ -3969,7 +3971,7 @@ eliminate_insert (gimple_stmt_iterator *gsi, tree val) if (dump_file && (dump_flags & TDF_DETAILS)) { fprintf (dump_file, "Inserted "); - print_gimple_stmt (dump_file, tem, 0, 0); + print_gimple_stmt (dump_file, SSA_NAME_DEF_STMT (res), 0, 0); } return res; @@ -4093,7 +4095,7 @@ eliminate_dom_walker::before_dom_children (basic_block b) if (val != VN_TOP && TREE_CODE (val) == SSA_NAME && VN_INFO (val)->needs_insertion - && VN_INFO (val)->expr != NULL_TREE + && VN_INFO (val)->expr != NULL && (sprime = eliminate_insert (&gsi, val)) != NULL_TREE) eliminate_push_avail (sprime); } |