mirror of git://gcc.gnu.org/git/gcc.git
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
|
|
@ -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>
|
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)
|
||||||
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
|
||||||
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;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue