Commit 0a45ec5c by Roger Sayle Committed by Roger Sayle

builtins.c (expand_builtin): Don't expand a pure or const built-in function if...


	* builtins.c (expand_builtin):  Don't expand a pure or const
	built-in function if the result will be ignored and none of
	its arguments are volatile.

From-SVN: r65843
parent 4049c77a
2003-04-19 Roger Sayle <roger@eyesopen.com>
* builtins.c (expand_builtin): Don't expand a pure or const
built-in function if the result will be ignored and none of
its arguments are volatile.
2003-04-19 Kean Johnston <jkj@sco.com>
* unwind-dw2.c (_Unwind_GetCFA): cast return to avoid warning
......
......@@ -4139,6 +4139,36 @@ expand_builtin (exp, target, subtarget, mode, ignore)
break;
}
/* The built-in function expanders test for target == const0_rtx
to determine whether the function's result will be ignored. */
if (ignore)
target = const0_rtx;
/* If the result of a pure or const built-in function is ignored, and
none of its arguments are volatile, we can avoid expanding the
built-in call and just evaluate the arguments for side-effects. */
if (target == const0_rtx
&& (DECL_IS_PURE (fndecl) || TREE_READONLY (fndecl)))
{
bool volatilep = false;
tree arg;
for (arg = arglist; arg; arg = TREE_CHAIN (arg))
if (TREE_THIS_VOLATILE (TREE_VALUE (arg)))
{
volatilep = true;
break;
}
if (! volatilep)
{
for (arg = arglist; arg; arg = TREE_CHAIN (arg))
expand_expr (TREE_VALUE (arg), const0_rtx,
VOIDmode, EXPAND_NORMAL);
return const0_rtx;
}
}
switch (fcode)
{
case BUILT_IN_ABS:
......
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