From 8897c9ce64705907e7e27c649f49ea460b14538a Mon Sep 17 00:00:00 2001
From: Nathan Froyd <froydnj@codesourcery.com>
Date: Sat, 9 Oct 2010 00:44:46 +0000
Subject: [PATCH] builtins.c (fold_call_stmt): Don't copy gimple call arguments
 into a temporary array.

	* builtins.c (fold_call_stmt): Don't copy gimple call arguments
	into a temporary array.

From-SVN: r165213
---
 gcc/ChangeLog  |  5 +++++
 gcc/builtins.c | 16 +++++-----------
 2 files changed, 10 insertions(+), 11 deletions(-)

diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 182337f101b3..a560cc701b3f 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 0579f758cf50..1764cb445663 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)
-- 
GitLab