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
This commit is contained in:
parent
1e98f62d74
commit
1d4fb4935c
3 changed files with 43 additions and 19 deletions
|
@ -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>
|
||||
|
||||
|
|
|
@ -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 ();
|
||||
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue