Commit 1d4fb493 by Richard Henderson Committed by Richard Henderson

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
parent 1e98f62d
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> 2012-02-10 Bill Schmidt <wschmidt@linux.vnet.ibm.com>
Ira Rosen <irar@il.ibm.com> Ira Rosen <irar@il.ibm.com>
......
...@@ -965,6 +965,13 @@ propagate_necessity (struct edge_list *el) ...@@ -965,6 +965,13 @@ propagate_necessity (struct edge_list *el)
mark_aliased_reaching_defs_necessary (stmt, op); 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 else
gcc_unreachable (); gcc_unreachable ();
......
...@@ -1043,35 +1043,46 @@ static void ...@@ -1043,35 +1043,46 @@ static void
parse_ssa_operands (gimple stmt) parse_ssa_operands (gimple stmt)
{ {
enum gimple_code code = gimple_code (stmt); enum gimple_code code = gimple_code (stmt);
size_t i, n, start = 0;
if (code == GIMPLE_ASM) switch (code)
get_asm_expr_operands (stmt);
else if (is_gimple_debug (stmt))
{ {
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) if (gimple_debug_bind_p (stmt)
&& gimple_debug_bind_has_value_p (stmt)) && gimple_debug_bind_has_value_p (stmt))
get_expr_operands (stmt, gimple_debug_bind_get_value_ptr (stmt), get_expr_operands (stmt, gimple_debug_bind_get_value_ptr (stmt),
opf_use | opf_no_vops); opf_use | opf_no_vops);
} break;
else
{
size_t i, start = 0;
if (code == GIMPLE_ASSIGN || code == GIMPLE_CALL) case GIMPLE_RETURN:
{ append_vuse (gimple_vop (cfun));
get_expr_operands (stmt, gimple_op_ptr (stmt, 0), opf_def); goto do_default;
start = 1;
}
for (i = start; i < gimple_num_ops (stmt); i++)
get_expr_operands (stmt, gimple_op_ptr (stmt, i), opf_use);
case GIMPLE_CALL:
/* Add call-clobbered operands, if needed. */ /* 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) case GIMPLE_ASSIGN:
append_vuse (gimple_vop (cfun)); 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;
} }
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment