diff options
author | Richard Henderson <rth@redhat.com> | 2012-02-10 09:44:31 -0800 |
---|---|---|
committer | Richard Henderson <rth@gcc.gnu.org> | 2012-02-10 09:44:31 -0800 |
commit | 1d4fb4935cf2e224a01e6409341fb6ad5eb0462d (patch) | |
tree | 4dee112990f9f516b3426813bcdbf020af010066 | |
parent | 1e98f62d742e5c5a56f150d5e857dd083d9a10d9 (diff) | |
download | gcc-1d4fb4935cf2e224a01e6409341fb6ad5eb0462d.zip gcc-1d4fb4935cf2e224a01e6409341fb6ad5eb0462d.tar.gz gcc-1d4fb4935cf2e224a01e6409341fb6ad5eb0462d.tar.bz2 |
tree-ssa-dce.c (propagate_necessity): Handle GIMPLE_TRANSACTION.
* tree-ssa-dce.c (propagate_necessity): Handle GIMPLE_TRANSACTION.
* tree-ssa-operands.c (parse_ssa_operands): Add virtual operands
for GIMPLE_TRANSACTION. Tidy if's into a switch.
From-SVN: r184107
-rw-r--r-- | gcc/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/tree-ssa-dce.c | 7 | ||||
-rw-r--r-- | gcc/tree-ssa-operands.c | 49 |
3 files changed, 43 insertions, 19 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 02a7f16..d3ca6b5 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2012-02-10 Richard Henderson <rth@redhat.com> + + * tree-ssa-dce.c (propagate_necessity): Handle GIMPLE_TRANSACTION. + * tree-ssa-operands.c (parse_ssa_operands): Add virtual operands + for GIMPLE_TRANSACTION. Tidy if's into a switch. + 2012-02-10 Bill Schmidt <wschmidt@linux.vnet.ibm.com> Ira Rosen <irar@il.ibm.com> diff --git a/gcc/tree-ssa-dce.c b/gcc/tree-ssa-dce.c index ccdf14a..ace9ef9 100644 --- a/gcc/tree-ssa-dce.c +++ b/gcc/tree-ssa-dce.c @@ -965,6 +965,13 @@ propagate_necessity (struct edge_list *el) mark_aliased_reaching_defs_necessary (stmt, op); } } + else if (gimple_code (stmt) == GIMPLE_TRANSACTION) + { + /* The beginning of a transaction is a memory barrier. */ + /* ??? If we were really cool, we'd only be a barrier + for the memories touched within the transaction. */ + mark_all_reaching_defs_necessary (stmt); + } else gcc_unreachable (); diff --git a/gcc/tree-ssa-operands.c b/gcc/tree-ssa-operands.c index 0045dd8..ed0d34d 100644 --- a/gcc/tree-ssa-operands.c +++ b/gcc/tree-ssa-operands.c @@ -1043,35 +1043,46 @@ static void parse_ssa_operands (gimple stmt) { enum gimple_code code = gimple_code (stmt); + size_t i, n, start = 0; - if (code == GIMPLE_ASM) - get_asm_expr_operands (stmt); - else if (is_gimple_debug (stmt)) + switch (code) { + case GIMPLE_ASM: + get_asm_expr_operands (stmt); + break; + + case GIMPLE_TRANSACTION: + /* The start of a transaction is a memory barrier. */ + add_virtual_operand (stmt, opf_def | opf_use); + break; + + case GIMPLE_DEBUG: if (gimple_debug_bind_p (stmt) && gimple_debug_bind_has_value_p (stmt)) get_expr_operands (stmt, gimple_debug_bind_get_value_ptr (stmt), opf_use | opf_no_vops); - } - else - { - size_t i, start = 0; + break; - if (code == GIMPLE_ASSIGN || code == GIMPLE_CALL) - { - get_expr_operands (stmt, gimple_op_ptr (stmt, 0), opf_def); - start = 1; - } - - for (i = start; i < gimple_num_ops (stmt); i++) - get_expr_operands (stmt, gimple_op_ptr (stmt, i), opf_use); + case GIMPLE_RETURN: + append_vuse (gimple_vop (cfun)); + goto do_default; + case GIMPLE_CALL: /* Add call-clobbered operands, if needed. */ - if (code == GIMPLE_CALL) - maybe_add_call_vops (stmt); + maybe_add_call_vops (stmt); + /* FALLTHRU */ - if (code == GIMPLE_RETURN) - append_vuse (gimple_vop (cfun)); + case GIMPLE_ASSIGN: + get_expr_operands (stmt, gimple_op_ptr (stmt, 0), opf_def); + start = 1; + /* FALLTHRU */ + + default: + do_default: + n = gimple_num_ops (stmt); + for (i = start; i < n; i++) + get_expr_operands (stmt, gimple_op_ptr (stmt, i), opf_use); + break; } } |