aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gcc/ChangeLog5
-rw-r--r--gcc/builtins.c16
2 files changed, 10 insertions, 11 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 182337f..a560cc7 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,8 @@
+2010-10-08 Nathan Froyd <froydnj@codesourcery.com>
+
+ * builtins.c (fold_call_stmt): Don't copy gimple call arguments
+ into a temporary array.
+
2010-10-08 Jakub Jelinek <jakub@redhat.com>
PR tree-optimization/45903
diff --git a/gcc/builtins.c b/gcc/builtins.c
index 0579f75..1764cb4 100644
--- a/gcc/builtins.c
+++ b/gcc/builtins.c
@@ -13627,26 +13627,20 @@ fold_call_stmt (gimple stmt, bool ignore)
&& !gimple_call_va_arg_pack_p (stmt))
{
int nargs = gimple_call_num_args (stmt);
+ tree *args = (nargs > 0
+ ? gimple_call_arg_ptr (stmt, 0)
+ : &error_mark_node);
if (avoid_folding_inline_builtin (fndecl))
return NULL_TREE;
if (DECL_BUILT_IN_CLASS (fndecl) == BUILT_IN_MD)
{
- return targetm.fold_builtin (fndecl, nargs,
- (nargs > 0
- ? gimple_call_arg_ptr (stmt, 0)
- : &error_mark_node), ignore);
+ return targetm.fold_builtin (fndecl, nargs, args, ignore);
}
else
{
if (nargs <= MAX_ARGS_TO_FOLD_BUILTIN)
- {
- tree args[MAX_ARGS_TO_FOLD_BUILTIN];
- int i;
- for (i = 0; i < nargs; i++)
- args[i] = gimple_call_arg (stmt, i);
- ret = fold_builtin_n (loc, fndecl, args, nargs, ignore);
- }
+ ret = fold_builtin_n (loc, fndecl, args, nargs, ignore);
if (!ret)
ret = gimple_fold_builtin_varargs (fndecl, stmt, ignore);
if (ret)