builtins.c (ind_gimplify_va_arg_expr): New.
authorRichard Henderson <rth@redhat.com>
Thu, 8 Jul 2004 22:03:57 +0000 (15:03 -0700)
committerRichard Henderson <rth@gcc.gnu.org>
Thu, 8 Jul 2004 22:03:57 +0000 (15:03 -0700)
        * builtins.c (ind_gimplify_va_arg_expr): New.
        * tree.h (ind_gimplify_va_arg_expr): Declare.
        * config/arc/arc.c (arc_gimplify_va_arg_expr): Use it.

From-SVN: r84317

gcc/ChangeLog
gcc/builtins.c
gcc/config/arc/arc.c
gcc/tree.h

index 1dd50f9a5e9eba76f5baa7f483fd23d939d93cae..18a2b3a8c765a81c0388aacb44e66d69a9a2d6e8 100644 (file)
@@ -1,3 +1,9 @@
+2004-07-08  Richard Henderson  <rth@redhat.com>
+
+       * builtins.c (ind_gimplify_va_arg_expr): New.
+       * tree.h (ind_gimplify_va_arg_expr): Declare.
+       * config/arc/arc.c (arc_gimplify_va_arg_expr): Use it.
+
 2004-07-08  Jan Beulich  <jbeulich@novell.com>
 
        * expmed.c (extract_bit_field): Correct condition to use vec_extract
index c07ff044e3e02e3def06cb3827fb51d3dda705dc..c620d44eeac4c0212cc23404cf2c05d0faf4e180 100644 (file)
@@ -4549,6 +4549,17 @@ std_gimplify_va_arg_expr (tree valist, tree type, tree *pre_p, tree *post_p)
   return build_fold_indirect_ref (addr);
 }
 
+/* Like std_gimplify_va_arg_expr, but uses pass-by-reference.  */
+tree
+ind_gimplify_va_arg_expr (tree valist, tree type, tree *pre_p, tree *post_p)
+{
+  tree t;
+  t = build_pointer_type (type);
+  t = std_gimplify_va_arg_expr (valist, t, pre_p, post_p);
+  return build_fold_indirect_ref (t);
+}
+
 /* Return a dummy expression of type TYPE in order to keep going after an
    error.  */
 
index ec2520d67626452646448e3e24436b96685f32dd..6c3da47438e11ed8684f415979d02ad557b9e7e5 100644 (file)
@@ -2299,11 +2299,7 @@ arc_gimplify_va_arg_expr (tree valist, tree type, tree *pre_p, tree *post_p)
      than 8 bytes are passed by reference.  */
 
   if (AGGREGATE_TYPE_P (type) || int_size_in_bytes (type) > 8)
-    {
-      tree type_ptr = build_pointer_type (type);
-      tree addr = std_gimplify_va_arg_expr (valist, type_ptr, pre_p, post_p);
-      return build_fold_indirect_ref (addr);
-    }
+    return ind_gimplify_va_arg_expr (valist, type, pre_p, post_p);
 
   return std_gimplify_va_arg_expr (valist, type, pre_p, post_p);
 }
index 4dab73f0f6dc549a26b4ef9e5034c31172589902..af3d1d596e2f64f9273184bedfa3336b02800e25 100644 (file)
@@ -3434,6 +3434,7 @@ extern tree strip_float_extensions (tree);
 extern tree simplify_builtin (tree, int);
 extern tree c_strlen (tree, int);
 extern tree std_gimplify_va_arg_expr (tree, tree, tree *, tree *);
+extern tree ind_gimplify_va_arg_expr (tree, tree, tree *, tree *);
 
 /* In convert.c */
 extern tree strip_float_extensions (tree);