diff options
author | Richard Henderson <rth@redhat.com> | 2004-07-08 15:03:57 -0700 |
---|---|---|
committer | Richard Henderson <rth@gcc.gnu.org> | 2004-07-08 15:03:57 -0700 |
commit | 083385aae90eb4dff408962df34a096b846e081f (patch) | |
tree | a767064497309389e5b9a155da821ede45ddfd78 /gcc | |
parent | b42271d678018c9ff96567aada65f46d2586b54d (diff) | |
download | gcc-083385aae90eb4dff408962df34a096b846e081f.zip gcc-083385aae90eb4dff408962df34a096b846e081f.tar.gz gcc-083385aae90eb4dff408962df34a096b846e081f.tar.bz2 |
builtins.c (ind_gimplify_va_arg_expr): New.
* 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
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/builtins.c | 11 | ||||
-rw-r--r-- | gcc/config/arc/arc.c | 6 | ||||
-rw-r--r-- | gcc/tree.h | 1 |
4 files changed, 19 insertions, 5 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 1dd50f9..18a2b3a 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -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 diff --git a/gcc/builtins.c b/gcc/builtins.c index c07ff04..c620d44 100644 --- a/gcc/builtins.c +++ b/gcc/builtins.c @@ -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. */ diff --git a/gcc/config/arc/arc.c b/gcc/config/arc/arc.c index ec2520d..6c3da47 100644 --- a/gcc/config/arc/arc.c +++ b/gcc/config/arc/arc.c @@ -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); } @@ -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); |