From cd3ce9b44c1c3b4f4567de0d2767df058b89ce58 Mon Sep 17 00:00:00 2001 From: Jason Merrill Date: Wed, 9 Jun 2004 11:32:44 -0400 Subject: Gimplify VA_ARG_EXPR into simpler forms. * target.h: Add gimplify_va_arg_expr hook. * target-def.h: Add TARGET_GIMPLIFY_VA_ARG_EXPR. * fold-const.c (build_fold_addr_expr) (build_fold_addr_expr_with_type): Move from gimplify.c. * tree.h: Declare them. * gimplify.c (gimplify_and_add): New fn. (build_addr_expr, build_addr_expr_with_type): Move to fold-const.c. (gimplify_array_ref_to_plus, gimplify_modify_expr) (gimplify_expr): Use build_fold_*. (copy_if_shared_r): Only mark VA_ARG_EXPR volatile if we don't know how to gimplify it. * builtins.c (std_gimplify_va_arg_expr): New fn. (dummy_object): New static fn. (gimplify_va_arg_expr): New fn. (stabilize_va_list): Use build_fold_*. * tree-gimple.h: Declare new fns. * config/i386/i386.c (TARGET_GIMPLIFY_VA_ARG_EXPR): Define. (ix86_gimplify_va_arg): New fn. * config/i386/ia64.c (TARGET_GIMPLIFY_VA_ARG_EXPR): Define. (ia64_gimplify_va_arg): New fn. * config/i386/rs6000.c (rs6000_gimplify_va_arg): New fn. (TARGET_GIMPLIFY_VA_ARG_EXPR): Define. * config/i386/sparc.c (sparc_gimplify_va_arg): New fn. * alias.c (get_varargs_alias_set): Just return 0 for now. * c-objc-common.c (c_tree_printer): Improve handling of %T. From-SVN: r82838 --- gcc/target.h | 4 ++++ 1 file changed, 4 insertions(+) (limited to 'gcc/target.h') diff --git a/gcc/target.h b/gcc/target.h index a7eb743..a2a5646 100644 --- a/gcc/target.h +++ b/gcc/target.h @@ -470,6 +470,10 @@ struct gcc_target /* Given a complex type T, return true if a parameter of type T should be passed as two scalars. */ bool (* split_complex_arg) (tree type); + + /* Gimplifies a VA_ARG_EXPR. */ + void (* gimplify_va_arg_expr) (tree *expr_p, tree *pre_p, + tree *post_p); } calls; /* Leave the boolean fields at the end. */ -- cgit v1.1