mirror of git://gcc.gnu.org/git/gcc.git
gimple-walk.h (struct walk_stmt_info): Add stmt member.
2016-04-19 Richard Biener <rguenther@suse.de> * gimple-walk.h (struct walk_stmt_info): Add stmt member. * gimple-walk.c (walk_gimple_op): Initialize it. (walk_gimple_asm): Set wi->is_lhs before each callback invocation. * tree-inline.c (remap_gimple_op_r): Set SSA_NAME_DEF_STMT when remapping SSA names of defs. (copy_bb): Remove walk over all SSA defs and SSA_NAME_DEF_STMT adjustment. From-SVN: r235190
This commit is contained in:
parent
987b67f17c
commit
d247f8e23a
|
|
@ -1,3 +1,13 @@
|
||||||
|
2016-04-19 Richard Biener <rguenther@suse.de>
|
||||||
|
|
||||||
|
* gimple-walk.h (struct walk_stmt_info): Add stmt member.
|
||||||
|
* gimple-walk.c (walk_gimple_op): Initialize it.
|
||||||
|
(walk_gimple_asm): Set wi->is_lhs before each callback invocation.
|
||||||
|
* tree-inline.c (remap_gimple_op_r): Set SSA_NAME_DEF_STMT when
|
||||||
|
remapping SSA names of defs.
|
||||||
|
(copy_bb): Remove walk over all SSA defs and SSA_NAME_DEF_STMT
|
||||||
|
adjustment.
|
||||||
|
|
||||||
2016-04-18 Vladimir Makarov <vmakarov@redhat.com>
|
2016-04-18 Vladimir Makarov <vmakarov@redhat.com>
|
||||||
|
|
||||||
PR middle-end/70689
|
PR middle-end/70689
|
||||||
|
|
|
||||||
|
|
@ -100,9 +100,6 @@ walk_gimple_asm (gasm *stmt, walk_tree_fn callback_op,
|
||||||
noutputs = gimple_asm_noutputs (stmt);
|
noutputs = gimple_asm_noutputs (stmt);
|
||||||
oconstraints = (const char **) alloca ((noutputs) * sizeof (const char *));
|
oconstraints = (const char **) alloca ((noutputs) * sizeof (const char *));
|
||||||
|
|
||||||
if (wi)
|
|
||||||
wi->is_lhs = true;
|
|
||||||
|
|
||||||
for (i = 0; i < noutputs; i++)
|
for (i = 0; i < noutputs; i++)
|
||||||
{
|
{
|
||||||
op = gimple_asm_output_op (stmt, i);
|
op = gimple_asm_output_op (stmt, i);
|
||||||
|
|
@ -114,6 +111,8 @@ walk_gimple_asm (gasm *stmt, walk_tree_fn callback_op,
|
||||||
&allows_reg, &is_inout))
|
&allows_reg, &is_inout))
|
||||||
wi->val_only = (allows_reg || !allows_mem);
|
wi->val_only = (allows_reg || !allows_mem);
|
||||||
}
|
}
|
||||||
|
if (wi)
|
||||||
|
wi->is_lhs = true;
|
||||||
ret = walk_tree (&TREE_VALUE (op), callback_op, wi, NULL);
|
ret = walk_tree (&TREE_VALUE (op), callback_op, wi, NULL);
|
||||||
if (ret)
|
if (ret)
|
||||||
return ret;
|
return ret;
|
||||||
|
|
@ -182,6 +181,9 @@ walk_gimple_op (gimple *stmt, walk_tree_fn callback_op,
|
||||||
unsigned i;
|
unsigned i;
|
||||||
tree ret = NULL_TREE;
|
tree ret = NULL_TREE;
|
||||||
|
|
||||||
|
if (wi)
|
||||||
|
wi->stmt = stmt;
|
||||||
|
|
||||||
switch (gimple_code (stmt))
|
switch (gimple_code (stmt))
|
||||||
{
|
{
|
||||||
case GIMPLE_ASSIGN:
|
case GIMPLE_ASSIGN:
|
||||||
|
|
|
||||||
|
|
@ -28,6 +28,7 @@ struct walk_stmt_info
|
||||||
{
|
{
|
||||||
/* Points to the current statement being walked. */
|
/* Points to the current statement being walked. */
|
||||||
gimple_stmt_iterator gsi;
|
gimple_stmt_iterator gsi;
|
||||||
|
gimple *stmt;
|
||||||
|
|
||||||
/* Additional data that the callback functions may want to carry
|
/* Additional data that the callback functions may want to carry
|
||||||
through the recursion. */
|
through the recursion. */
|
||||||
|
|
|
||||||
|
|
@ -863,10 +863,16 @@ remap_gimple_op_r (tree *tp, int *walk_subtrees, void *data)
|
||||||
copy_body_data *id = (copy_body_data *) wi_p->info;
|
copy_body_data *id = (copy_body_data *) wi_p->info;
|
||||||
tree fn = id->src_fn;
|
tree fn = id->src_fn;
|
||||||
|
|
||||||
|
/* For recursive invocations this is no longer the LHS itself. */
|
||||||
|
bool is_lhs = wi_p->is_lhs;
|
||||||
|
wi_p->is_lhs = false;
|
||||||
|
|
||||||
if (TREE_CODE (*tp) == SSA_NAME)
|
if (TREE_CODE (*tp) == SSA_NAME)
|
||||||
{
|
{
|
||||||
*tp = remap_ssa_name (*tp, id);
|
*tp = remap_ssa_name (*tp, id);
|
||||||
*walk_subtrees = 0;
|
*walk_subtrees = 0;
|
||||||
|
if (is_lhs)
|
||||||
|
SSA_NAME_DEF_STMT (*tp) = wi_p->stmt;
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
else if (auto_var_in_fn_p (*tp, fn))
|
else if (auto_var_in_fn_p (*tp, fn))
|
||||||
|
|
@ -2095,16 +2101,6 @@ copy_bb (copy_body_data *id, basic_block bb, int frequency_scale,
|
||||||
maybe_duplicate_eh_stmt_fn (cfun, stmt, id->src_cfun, orig_stmt,
|
maybe_duplicate_eh_stmt_fn (cfun, stmt, id->src_cfun, orig_stmt,
|
||||||
id->eh_map, id->eh_lp_nr);
|
id->eh_map, id->eh_lp_nr);
|
||||||
|
|
||||||
if (gimple_in_ssa_p (cfun) && !is_gimple_debug (stmt))
|
|
||||||
{
|
|
||||||
ssa_op_iter i;
|
|
||||||
tree def;
|
|
||||||
|
|
||||||
FOR_EACH_SSA_TREE_OPERAND (def, stmt, i, SSA_OP_DEF)
|
|
||||||
if (TREE_CODE (def) == SSA_NAME)
|
|
||||||
SSA_NAME_DEF_STMT (def) = stmt;
|
|
||||||
}
|
|
||||||
|
|
||||||
gsi_next (©_gsi);
|
gsi_next (©_gsi);
|
||||||
}
|
}
|
||||||
while (!gsi_end_p (copy_gsi));
|
while (!gsi_end_p (copy_gsi));
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue