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
This commit is contained in:
Roger Sayle 2003-04-20 03:11:14 +00:00 committed by Roger Sayle
parent 4049c77a01
commit 0a45ec5c78
2 changed files with 36 additions and 0 deletions

View File

@ -1,3 +1,9 @@
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

View File

@ -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: