Commit 3a324b98 by Eric Botcazou Committed by Eric Botcazou

tree.c (substitute_in_expr): Also inline a call if the replacement expression is…

tree.c (substitute_in_expr): Also inline a call if the replacement expression is another instance of one of...

	* tree.c (substitute_in_expr) <tcc_vl_exp>: Also inline a call if the
	replacement expression is another instance of one of its arguments.

From-SVN: r247431
parent 30776a14
2017-05-01 Eric Botcazou <ebotcazou@adacore.com>
* tree.c (substitute_in_expr) <tcc_vl_exp>: Also inline a call if the
replacement expression is another instance of one of its arguments.
2017-05-01 Jakub Jelinek <jakub@redhat.com>
PR target/79430
......
......@@ -3886,15 +3886,29 @@ substitute_in_expr (tree exp, tree f, tree r)
new_tree = NULL_TREE;
/* If we are trying to replace F with a constant, inline back
/* If we are trying to replace F with a constant or with another
instance of one of the arguments of the call, inline back
functions which do nothing else than computing a value from
the arguments they are passed. This makes it possible to
fold partially or entirely the replacement expression. */
if (CONSTANT_CLASS_P (r) && code == CALL_EXPR)
if (code == CALL_EXPR)
{
tree t = maybe_inline_call_in_expr (exp);
if (t)
return SUBSTITUTE_IN_EXPR (t, f, r);
bool maybe_inline = false;
if (CONSTANT_CLASS_P (r))
maybe_inline = true;
else
for (i = 3; i < TREE_OPERAND_LENGTH (exp); i++)
if (operand_equal_p (TREE_OPERAND (exp, i), r, 0))
{
maybe_inline = true;
break;
}
if (maybe_inline)
{
tree t = maybe_inline_call_in_expr (exp);
if (t)
return SUBSTITUTE_IN_EXPR (t, f, r);
}
}
for (i = 1; i < TREE_OPERAND_LENGTH (exp); i++)
......
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