OSDN Git Service

* tree.h (CALL_EXPR_ARGS): Delete.
authorfroydnj <froydnj@138bc75d-0d04-0410-961f-82ee72b054a4>
Mon, 17 May 2010 18:16:27 +0000 (18:16 +0000)
committerMasaki Muranaka <monaka@monami-software.com>
Sun, 23 May 2010 05:10:42 +0000 (14:10 +0900)
(call_expr_arglist): Delete.
* tree.c (call_expr_arglist): Delete.
* builtins.c (fold_call_expr): Pass the whole CALL_EXPR to
targetm.fold_builtin.
* config/alpha/alpha.c (alpha_fold_builtin): Rename arglist parameter.
Rewrite iteration to work on call_expr_nargs rather than TREE_CHAIN.
* config/picochip/picochip.c (picochip_expand_builtin_2op): Rename
arglist parameter.  Use CALL_EXPR_ARG.
(picochip_expand_builtin_3op): Likewise.
(picochip_expand_builtin_2opvoid): Likewise.
(picochip_expand_array_get): Likewise.
(picochip_expand_array_put): Likewise.
(picochip_expand_array_testport): Likewise.
(picochip_expand_builtin): Don't call CALL_EXPR_ARGS.  Pass exp
rather than arglist.
* config/rx/rx.c (rx_expand_builtin): Call call_expr_nargs instead of
CALL_EXPR_ARGS.
* config/sparc/sparc.c (sparc_fold_builtin): Use CALL_EXPR_ARG rather
than TREE_VALUE and TREE_CHAIN.
* config/xtensa/xtensa.c (xtensa_fold_builtin): Likewise.
* doc/tm.texi (TARGET_FOLD_BUILTIN): Pass CALL_EXPR tree instead of
the arglist.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@159502 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/ChangeLog
gcc/builtins.c
gcc/config/alpha/alpha.c
gcc/config/sparc/sparc.c
gcc/config/xtensa/xtensa.c
gcc/doc/tm.texi
gcc/tree.c
gcc/tree.h

index 87f27e7..0d1f713 100644 (file)
@@ -1,3 +1,29 @@
+2010-05-17  Nathan Froyd  <froydnj@codesourcery.com>
+
+       * tree.h (CALL_EXPR_ARGS): Delete.
+       (call_expr_arglist): Delete.
+       * tree.c (call_expr_arglist): Delete.
+       * builtins.c (fold_call_expr): Pass the whole CALL_EXPR to
+       targetm.fold_builtin.
+       * config/alpha/alpha.c (alpha_fold_builtin): Rename arglist parameter.
+       Rewrite iteration to work on call_expr_nargs rather than TREE_CHAIN.
+       * config/picochip/picochip.c (picochip_expand_builtin_2op): Rename
+       arglist parameter.  Use CALL_EXPR_ARG.
+       (picochip_expand_builtin_3op): Likewise.
+       (picochip_expand_builtin_2opvoid): Likewise.
+       (picochip_expand_array_get): Likewise.
+       (picochip_expand_array_put): Likewise.
+       (picochip_expand_array_testport): Likewise.
+       (picochip_expand_builtin): Don't call CALL_EXPR_ARGS.  Pass exp
+       rather than arglist.
+       * config/rx/rx.c (rx_expand_builtin): Call call_expr_nargs instead of
+       CALL_EXPR_ARGS.
+       * config/sparc/sparc.c (sparc_fold_builtin): Use CALL_EXPR_ARG rather
+       than TREE_VALUE and TREE_CHAIN.
+       * config/xtensa/xtensa.c (xtensa_fold_builtin): Likewise.
+       * doc/tm.texi (TARGET_FOLD_BUILTIN): Pass CALL_EXPR tree instead of
+       the arglist.
+
 2010-05-17  Jakub Jelinek  <jakub@redhat.com>
 
        PR bootstrap/42347
index 5f4b717..8541b82 100644 (file)
@@ -10701,9 +10701,8 @@ fold_call_expr (location_t loc, tree exp, bool ignore)
       if (avoid_folding_inline_builtin (fndecl))
        return NULL_TREE;
 
-      /* FIXME: Don't use a list in this interface.  */
       if (DECL_BUILT_IN_CLASS (fndecl) == BUILT_IN_MD)
-         return targetm.fold_builtin (fndecl, CALL_EXPR_ARGS (exp), ignore);
+        return targetm.fold_builtin (fndecl, exp, ignore);
       else
        {
          if (nargs <= MAX_ARGS_TO_FOLD_BUILTIN)
index 4daf3df..7643267 100644 (file)
@@ -29,6 +29,7 @@ along with GCC; see the file COPYING3.  If not see
 #include "tree.h"
 #include "regs.h"
 #include "hard-reg-set.h"
+#include "real.h"
 #include "insn-config.h"
 #include "conditions.h"
 #include "output.h"
@@ -7137,27 +7138,26 @@ alpha_fold_builtin_ctpop (unsigned HOST_WIDE_INT opint[], long op_const)
 /* Fold one of our builtin functions.  */
 
 static tree
-alpha_fold_builtin (tree fndecl, int n_args, tree *op,
-                   bool ignore ATTRIBUTE_UNUSED)
+alpha_fold_builtin (tree fndecl, tree call, bool ignore ATTRIBUTE_UNUSED)
 {
+  tree *op = CALL_EXPR_ARGP (call);
   unsigned HOST_WIDE_INT opint[MAX_ARGS];
   long op_const = 0;
-  int i;
-
-  if (n_args >= MAX_ARGS)
-    return NULL;
+  int arity;
 
-  for (i = 0; i < n_args; i++)
+  for (i = 0; i < call_expr_nargs (call); i++)
     {
-      tree arg = op[i];
+      tree arg = CALL_EXPR_ARG (call, i);
       if (arg == error_mark_node)
        return NULL;
+      if (arity >= MAX_ARGS)
+       return NULL;
 
-      opint[i] = 0;
+      opint[arity] = 0;
       if (TREE_CODE (arg) == INTEGER_CST)
        {
-          op_const |= 1L << i;
-         opint[i] = int_cst_value (arg);
+          op_const |= 1L << arity;
+         opint[arity] = int_cst_value (arg);
        }
     }
 
index 38711d3..8564312 100644 (file)
@@ -8372,7 +8372,7 @@ sparc_handle_vis_mul8x16 (int fncode, tree inner_type, tree elts0, tree elts1)
    function could not be folded.  */
 
 static tree
-sparc_fold_builtin (tree fndecl, tree arglist, bool ignore)
+sparc_fold_builtin (tree fndecl, tree call, bool ignore)
 {
   tree arg0, arg1, arg2;
   tree rtype = TREE_TYPE (TREE_TYPE (fndecl));
@@ -8386,7 +8386,7 @@ sparc_fold_builtin (tree fndecl, tree arglist, bool ignore)
   switch (icode)
     {
     case CODE_FOR_fexpand_vis:
-      arg0 = TREE_VALUE (arglist);
+      arg0 = CALL_EXPR_ARG (call, 0);
       STRIP_NOPS (arg0);
 
       if (TREE_CODE (arg0) == VECTOR_CST)
@@ -8409,8 +8409,8 @@ sparc_fold_builtin (tree fndecl, tree arglist, bool ignore)
     case CODE_FOR_fmul8x16_vis:
     case CODE_FOR_fmul8x16au_vis:
     case CODE_FOR_fmul8x16al_vis:
-      arg0 = TREE_VALUE (arglist);
-      arg1 = TREE_VALUE (TREE_CHAIN (arglist));
+      arg0 = CALL_EXPR_ARG (call, 0);
+      arg1 = CALL_EXPR_ARG (call, 1);
       STRIP_NOPS (arg0);
       STRIP_NOPS (arg1);
 
@@ -8427,8 +8427,8 @@ sparc_fold_builtin (tree fndecl, tree arglist, bool ignore)
       break;
 
     case CODE_FOR_fpmerge_vis:
-      arg0 = TREE_VALUE (arglist);
-      arg1 = TREE_VALUE (TREE_CHAIN (arglist));
+      arg0 = CALL_EXPR_ARG (call, 0);
+      arg1 = CALL_EXPR_ARG (call, 1);
       STRIP_NOPS (arg0);
       STRIP_NOPS (arg1);
 
@@ -8450,9 +8450,9 @@ sparc_fold_builtin (tree fndecl, tree arglist, bool ignore)
       break;
 
     case CODE_FOR_pdist_vis:
-      arg0 = TREE_VALUE (arglist);
-      arg1 = TREE_VALUE (TREE_CHAIN (arglist));
-      arg2 = TREE_VALUE (TREE_CHAIN (TREE_CHAIN (arglist)));
+      arg0 = CALL_EXPR_ARG (call, 0);
+      arg1 = CALL_EXPR_ARG (call, 1);
+      arg2 = CALL_EXPR_ARG (call, 2);
       STRIP_NOPS (arg0);
       STRIP_NOPS (arg1);
       STRIP_NOPS (arg2);
index 34e1326..fac7e51 100644 (file)
@@ -27,6 +27,7 @@ along with GCC; see the file COPYING3.  If not see
 #include "regs.h"
 #include "hard-reg-set.h"
 #include "basic-block.h"
+#include "real.h"
 #include "insn-config.h"
 #include "conditions.h"
 #include "insn-flags.h"
@@ -141,7 +142,7 @@ static tree xtensa_gimplify_va_arg_expr (tree, tree, gimple_seq *,
                                         gimple_seq *);
 static rtx xtensa_function_value (const_tree, const_tree, bool);
 static void xtensa_init_builtins (void);
-static tree xtensa_fold_builtin (tree, int, tree *, bool);
+static tree xtensa_fold_builtin (tree, tree, bool);
 static rtx xtensa_expand_builtin (tree, rtx, rtx, enum machine_mode, int);
 static void xtensa_va_start (tree, rtx);
 static bool xtensa_frame_pointer_required (void);
@@ -2999,8 +3000,7 @@ xtensa_init_builtins (void)
 
 
 static tree
-xtensa_fold_builtin (tree fndecl, int n_args ATTRIBUTE_UNUSED, tree *args,
-                    bool ignore ATTRIBUTE_UNUSED)
+xtensa_fold_builtin (tree fndecl, tree call, bool ignore ATTRIBUTE_UNUSED)
 {
   unsigned int fcode = DECL_FUNCTION_CODE (fndecl);
   tree arg0, arg1;
@@ -3008,8 +3008,8 @@ xtensa_fold_builtin (tree fndecl, int n_args ATTRIBUTE_UNUSED, tree *args,
   switch (fcode)
     {
     case XTENSA_BUILTIN_UMULSIDI3:
-      arg0 = args[0];
-      arg1 = args[1];
+      arg0 = CALL_EXPR_ARG (call, 0);
+      arg1 = CALL_EXPR_ARG (call, 1);
       if ((TREE_CODE (arg0) == INTEGER_CST && TREE_CODE (arg1) == INTEGER_CST)
          || TARGET_MUL32_HIGH)
        return fold_build2 (MULT_EXPR, unsigned_intDI_type_node,
index 6a998ed..8f9bbe7 100644 (file)
@@ -10784,12 +10784,12 @@ another @code{CALL_EXPR}.
 @var{arglist} really has type @samp{VEC(tree,gc)*}
 @end deftypefn
 
-@deftypefn {Target Hook} tree TARGET_FOLD_BUILTIN (tree @var{fndecl}, tree @var{arglist}, bool @var{ignore})
+@deftypefn {Target Hook} tree TARGET_FOLD_BUILTIN (tree @var{fndecl}, tree @var{call}, bool @var{ignore})
 
 Fold a call to a machine specific built-in function that was set up by
 @samp{TARGET_INIT_BUILTINS}.  @var{fndecl} is the declaration of the
-built-in function.  @var{arglist} is the list of arguments passed to
-the built-in function.  The result is another tree containing a
+built-in function.  @var{call} is the @code{CALL_EXPR} representing
+the call.  The result is another tree containing a
 simplified expression for the call's result.  If @var{ignore} is true
 the value will be ignored.
 @end deftypefn
index 00de313..8c0ed4e 100644 (file)
@@ -10376,22 +10376,6 @@ tree_block (tree t)
   return NULL;
 }
 
-/* Build and return a TREE_LIST of arguments in the CALL_EXPR exp.
-   FIXME: don't use this function.  It exists for compatibility with
-   the old representation of CALL_EXPRs where a list was used to hold the
-   arguments.  Places that currently extract the arglist from a CALL_EXPR
-   ought to be rewritten to use the CALL_EXPR itself.  */
-tree
-call_expr_arglist (tree exp)
-{
-  tree arglist = NULL_TREE;
-  int i;
-  for (i = call_expr_nargs (exp) - 1; i >= 0; i--)
-    arglist = tree_cons (NULL_TREE, CALL_EXPR_ARG (exp, i), arglist);
-  return arglist;
-}
-
-
 /* Create a nameless artificial label and put it in the current
    function context.  The label has a location of LOC.  Returns the
    newly created label.  */
index a37d81a..2b10d9a 100644 (file)
@@ -1695,7 +1695,6 @@ extern void protected_set_expr_location (tree, location_t);
  */
 #define CALL_EXPR_FN(NODE) TREE_OPERAND (CALL_EXPR_CHECK (NODE), 1)
 #define CALL_EXPR_STATIC_CHAIN(NODE) TREE_OPERAND (CALL_EXPR_CHECK (NODE), 2)
-#define CALL_EXPR_ARGS(NODE) call_expr_arglist (NODE)
 #define CALL_EXPR_ARG(NODE, I) TREE_OPERAND (CALL_EXPR_CHECK (NODE), (I) + 3)
 #define call_expr_nargs(NODE) (VL_EXP_OPERAND_LENGTH(NODE) - 3)
 
@@ -4806,7 +4805,6 @@ extern tree lower_bound_in_type (tree, tree);
 extern int operand_equal_for_phi_arg_p (const_tree, const_tree);
 extern tree call_expr_arg (tree, int);
 extern tree *call_expr_argp (tree, int);
-extern tree call_expr_arglist (tree);
 extern tree create_artificial_label (location_t);
 extern const char *get_name (tree);
 extern bool stdarg_p (tree);