diff options
author | Richard Henderson <rth@redhat.com> | 2004-07-13 01:43:41 -0700 |
---|---|---|
committer | Richard Henderson <rth@gcc.gnu.org> | 2004-07-13 01:43:41 -0700 |
commit | af064de51e5c824f1afb56bbc5bbf4b138c4e483 (patch) | |
tree | d9a896211b7b86323ca0988aebcee6681c40a375 /gcc/config | |
parent | 0976078c73f58e7350fcc0516618fdd7737c9696 (diff) | |
download | gcc-af064de51e5c824f1afb56bbc5bbf4b138c4e483.zip gcc-af064de51e5c824f1afb56bbc5bbf4b138c4e483.tar.gz gcc-af064de51e5c824f1afb56bbc5bbf4b138c4e483.tar.bz2 |
builtins.c (std_gimplify_va_arg_expr): Handle types passed by reference.
* builtins.c (std_gimplify_va_arg_expr): Handle types passed
by reference.
(ind_gimplify_va_arg_expr): Remove.
* tree.h (ind_gimplify_va_arg_expr): Remove.
* config/pa/pa.c (hppa_gimplify_va_arg_expr): Don't use it.
* config/mmix/mmix.c (mmix_function_arg_pass_by_reference): Allow
argsp to be null.
* config/arc/arc.c (arc_gimplify_va_arg_expr): Remove.
(TARGET_GIMPLIFY_VA_ARG_EXPR): Remove.
* config/cris/cris.c, config/fr30/fr30.c, config/frv/frv.c,
config/iq2000/iq2000.c, config/m32r/m32r.c, config/mmix/mmix.c,
config/mn10300/mn10300.c, config/v850/v850.c: Similarly.
From-SVN: r84608
Diffstat (limited to 'gcc/config')
-rw-r--r-- | gcc/config/arc/arc.c | 15 | ||||
-rw-r--r-- | gcc/config/cris/cris.c | 16 | ||||
-rw-r--r-- | gcc/config/fr30/fr30.c | 15 | ||||
-rw-r--r-- | gcc/config/frv/frv.c | 15 | ||||
-rw-r--r-- | gcc/config/iq2000/iq2000.c | 14 | ||||
-rw-r--r-- | gcc/config/m32r/m32r.c | 15 | ||||
-rw-r--r-- | gcc/config/mmix/mmix.c | 32 | ||||
-rw-r--r-- | gcc/config/mn10300/mn10300.c | 12 | ||||
-rw-r--r-- | gcc/config/pa/pa.c | 12 | ||||
-rw-r--r-- | gcc/config/v850/v850.c | 15 |
10 files changed, 12 insertions, 149 deletions
diff --git a/gcc/config/arc/arc.c b/gcc/config/arc/arc.c index 6f02cda..d648028 100644 --- a/gcc/config/arc/arc.c +++ b/gcc/config/arc/arc.c @@ -102,7 +102,6 @@ static bool arc_rtx_costs (rtx, int, int, int *); static int arc_address_cost (rtx); static void arc_external_libcall (rtx); static bool arc_return_in_memory (tree, tree); -static tree arc_gimplify_va_arg_expr (tree, tree, tree *, tree *); /* Initialize the GCC target structure. */ #undef TARGET_ASM_ALIGNED_HI_OP @@ -142,8 +141,6 @@ static tree arc_gimplify_va_arg_expr (tree, tree, tree *, tree *); #undef TARGET_SETUP_INCOMING_VARARGS #define TARGET_SETUP_INCOMING_VARARGS arc_setup_incoming_varargs -#undef TARGET_GIMPLIFY_VA_ARG_EXPR -#define TARGET_GIMPLIFY_VA_ARG_EXPR arc_gimplify_va_arg_expr #undef TARGET_SCHED_USE_DFA_PIPELINE_INTERFACE #define TARGET_SCHED_USE_DFA_PIPELINE_INTERFACE hook_int_void_1 @@ -2295,18 +2292,6 @@ arc_va_start (tree valist, rtx nextarg) std_expand_builtin_va_start (valist, nextarg); } -static tree -arc_gimplify_va_arg_expr (tree valist, tree type, tree *pre_p, tree *post_p) -{ - /* All aggregates are passed by reference. All scalar types larger - than 8 bytes are passed by reference. */ - - if (AGGREGATE_TYPE_P (type) || int_size_in_bytes (type) > 8) - return ind_gimplify_va_arg_expr (valist, type, pre_p, post_p); - - return std_gimplify_va_arg_expr (valist, type, pre_p, post_p); -} - /* This is how to output a definition of an internal numbered label where PREFIX is the class of label and NUM is the number within the class. */ diff --git a/gcc/config/cris/cris.c b/gcc/config/cris/cris.c index 4ca9cb9..b28896f 100644 --- a/gcc/config/cris/cris.c +++ b/gcc/config/cris/cris.c @@ -116,8 +116,6 @@ static void cris_init_libfuncs (void); static bool cris_rtx_costs (rtx, int, int, int *); static int cris_address_cost (rtx); -static tree cris_gimplify_va_arg_expr (tree, tree, tree *, tree *); - /* The function cris_target_asm_function_epilogue puts the last insn to output here. It always fits; there won't be a symbol operand. Used in delay_slots_for_epilogue and function_epilogue. */ @@ -191,8 +189,6 @@ int cris_cpu_version = CRIS_DEFAULT_CPU_VERSION; #undef TARGET_SETUP_INCOMING_VARARGS #define TARGET_SETUP_INCOMING_VARARGS cris_setup_incoming_varargs -#undef TARGET_GIMPLIFY_VA_ARG_EXPR -#define TARGET_GIMPLIFY_VA_ARG_EXPR cris_gimplify_va_arg_expr struct gcc_target targetm = TARGET_INITIALIZER; @@ -2789,18 +2785,6 @@ cris_init_libfuncs (void) set_optab_libfunc (umod_optab, SImode, "__Umod"); } -/* The va_arg gimplifier. All we need to do here special is notice - when we we've got a pass-by-reference. */ - -static tree -cris_gimplify_va_arg_expr (tree valist, tree type, tree *pre_p, tree *post_p) -{ - if (FUNCTION_ARG_PASS_BY_REFERENCE (dummy, TYPE_MODE (type), type, dummy)) - return ind_gimplify_va_arg_expr (valist, type, pre_p, post_p); - else - return std_gimplify_va_arg_expr (valist, type, pre_p, post_p); -} - /* The INIT_EXPANDERS worker sets the per-function-data initializer and mark functions. */ diff --git a/gcc/config/fr30/fr30.c b/gcc/config/fr30/fr30.c index 017acfd..98e45c4 100644 --- a/gcc/config/fr30/fr30.c +++ b/gcc/config/fr30/fr30.c @@ -123,7 +123,6 @@ static struct fr30_frame_info zero_frame_info; static void fr30_setup_incoming_varargs (CUMULATIVE_ARGS *, enum machine_mode, tree, int *, int); -static tree fr30_gimplify_va_arg_expr (tree, tree, tree *, tree *); static bool fr30_must_pass_in_stack (enum machine_mode, tree); #define FRAME_POINTER_MASK (1 << (FRAME_POINTER_REGNUM)) @@ -158,9 +157,6 @@ static bool fr30_must_pass_in_stack (enum machine_mode, tree); #undef TARGET_MUST_PASS_IN_STACK #define TARGET_MUST_PASS_IN_STACK fr30_must_pass_in_stack -#undef TARGET_GIMPLIFY_VA_ARG_EXPR -#define TARGET_GIMPLIFY_VA_ARG_EXPR fr30_gimplify_va_arg_expr - struct gcc_target targetm = TARGET_INITIALIZER; /* Returns the number of bytes offset between FROM_REG and TO_REG @@ -729,17 +725,6 @@ fr30_function_arg_partial_nregs (CUMULATIVE_ARGS cum, enum machine_mode mode, return FR30_NUM_ARG_REGS - cum; } -/* Implement `va_arg'. */ - -static tree -fr30_gimplify_va_arg_expr (tree valist, tree type, tree *pre_p, tree *post_p) -{ - if (FUNCTION_ARG_PASS_BY_REFERENCE (dummy, TYPE_MODE (type), type, dummy)) - return ind_gimplify_va_arg_expr (valist, type, pre_p, post_p); - else - return std_gimplify_va_arg_expr (valist, type, pre_p, post_p); -} - /*}}}*/ /*{{{ Operand predicates */ diff --git a/gcc/config/frv/frv.c b/gcc/config/frv/frv.c index 4d05bd4..9935fef 100644 --- a/gcc/config/frv/frv.c +++ b/gcc/config/frv/frv.c @@ -286,7 +286,6 @@ static void frv_output_const_unspec (FILE *, const struct frv_unspec *); static bool frv_function_ok_for_sibcall (tree, tree); static rtx frv_struct_value_rtx (tree, int); -static tree frv_gimplify_va_arg_expr (tree, tree, tree *, tree *); static bool frv_must_pass_in_stack (enum machine_mode mode, tree type); /* Initialize the GCC target structure. */ @@ -335,8 +334,6 @@ static bool frv_must_pass_in_stack (enum machine_mode mode, tree type); #define TARGET_EXPAND_BUILTIN_SAVEREGS frv_expand_builtin_saveregs #undef TARGET_SETUP_INCOMING_VARARGS #define TARGET_SETUP_INCOMING_VARARGS frv_setup_incoming_varargs -#undef TARGET_GIMPLIFY_VA_ARG_EXPR -#define TARGET_GIMPLIFY_VA_ARG_EXPR frv_gimplify_va_arg_expr struct gcc_target targetm = TARGET_INITIALIZER; @@ -2085,18 +2082,6 @@ frv_expand_builtin_va_start (tree valist, rtx nextarg) } -/* Expand __builtin_va_arg to do the va_arg macro. */ - -static tree -frv_gimplify_va_arg_expr (tree valist, tree type, tree *pre_p, tree *post_p) -{ - if (AGGREGATE_TYPE_P (type)) - return ind_gimplify_va_arg_expr (valist, type, pre_p, post_p); - else - return std_gimplify_va_arg_expr (valist, type, pre_p, post_p); -} - - /* Expand a block move operation, and return 1 if successful. Return 0 if we should let the compiler generate normal code. diff --git a/gcc/config/iq2000/iq2000.c b/gcc/config/iq2000/iq2000.c index ac9b5d138..4da8712 100644 --- a/gcc/config/iq2000/iq2000.c +++ b/gcc/config/iq2000/iq2000.c @@ -171,7 +171,6 @@ static bool iq2000_rtx_costs (rtx, int, int, int *); static int iq2000_address_cost (rtx); static void iq2000_select_section (tree, int, unsigned HOST_WIDE_INT); static bool iq2000_return_in_memory (tree, tree); -static tree iq2000_gimplify_va_arg_expr (tree, tree, tree *, tree *); #undef TARGET_INIT_BUILTINS #define TARGET_INIT_BUILTINS iq2000_init_builtins @@ -200,8 +199,6 @@ static tree iq2000_gimplify_va_arg_expr (tree, tree, tree *, tree *); #define TARGET_SETUP_INCOMING_VARARGS iq2000_setup_incoming_varargs #undef TARGET_STRICT_ARGUMENT_NAMING #define TARGET_STRICT_ARGUMENT_NAMING hook_bool_CUMULATIVE_ARGS_true -#undef TARGET_GIMPLIFY_VA_ARG_EXPR -#define TARGET_GIMPLIFY_VA_ARG_EXPR iq2000_gimplify_va_arg_expr #undef TARGET_SCHED_USE_DFA_PIPELINE_INTERFACE #define TARGET_SCHED_USE_DFA_PIPELINE_INTERFACE hook_int_void_1 @@ -1590,17 +1587,6 @@ iq2000_va_start (tree valist, rtx nextarg) nextarg = plus_constant (nextarg, - gpr_save_area_size); std_expand_builtin_va_start (valist, nextarg); } - -/* Implement va_arg. */ - -static tree -iq2000_gimplify_va_arg_expr (tree valist, tree type, tree *pre_p, tree *post_p) -{ - if (function_arg_pass_by_reference (NULL, TYPE_MODE (type), type, 0)) - return ind_gimplify_va_arg_expr (valist, type, pre_p, post_p); - else - return std_gimplify_va_arg_expr (valist, type, pre_p, post_p); -} /* Allocate a chunk of memory for per-function machine-dependent data. */ diff --git a/gcc/config/m32r/m32r.c b/gcc/config/m32r/m32r.c index 9bc3313..6c4a5dd 100644 --- a/gcc/config/m32r/m32r.c +++ b/gcc/config/m32r/m32r.c @@ -99,7 +99,6 @@ static void m32r_setup_incoming_varargs (CUMULATIVE_ARGS *, enum machine_mode, tree, int *, int); static void init_idents (void); static bool m32r_rtx_costs (rtx, int, int, int *); -static tree m32r_gimplify_va_arg_expr (tree, tree, tree *, tree *); /* Initialize the GCC target structure. */ #undef TARGET_ATTRIBUTE_TABLE @@ -144,9 +143,6 @@ static tree m32r_gimplify_va_arg_expr (tree, tree, tree *, tree *); #undef TARGET_MUST_PASS_IN_STACK #define TARGET_MUST_PASS_IN_STACK must_pass_in_stack_var_size -#undef TARGET_GIMPLIFY_VA_ARG_EXPR -#define TARGET_GIMPLIFY_VA_ARG_EXPR m32r_gimplify_va_arg_expr - struct gcc_target targetm = TARGET_INITIALIZER; /* Called by OVERRIDE_OPTIONS to initialize various things. */ @@ -1396,17 +1392,6 @@ m32r_setup_incoming_varargs (CUMULATIVE_ARGS *cum, enum machine_mode mode, } -/* Implement `va_arg'. */ - -static tree -m32r_gimplify_va_arg_expr (tree valist, tree type, tree *pre_p, tree *post_p) -{ - if (m32r_pass_by_reference (type)) - return ind_gimplify_va_arg_expr (valist, type, pre_p, post_p); - else - return std_gimplify_va_arg_expr (valist, type, pre_p, post_p); -} - /* Return true if INSN is real instruction bearing insn. */ static int diff --git a/gcc/config/mmix/mmix.c b/gcc/config/mmix/mmix.c index 569acc2..4e1731b 100644 --- a/gcc/config/mmix/mmix.c +++ b/gcc/config/mmix/mmix.c @@ -139,7 +139,6 @@ static void mmix_file_start (void); static void mmix_file_end (void); static bool mmix_rtx_costs (rtx, int, int, int *); static rtx mmix_struct_value_rtx (tree, int); -static tree mmix_gimplify_va_arg_expr (tree, tree, tree *, tree *); /* Target structure macros. Listed by node. See `Using and Porting GCC' @@ -205,8 +204,6 @@ static tree mmix_gimplify_va_arg_expr (tree, tree, tree *, tree *); #undef TARGET_SETUP_INCOMING_VARARGS #define TARGET_SETUP_INCOMING_VARARGS mmix_setup_incoming_varargs -#undef TARGET_GIMPLIFY_VA_ARG_EXPR -#define TARGET_GIMPLIFY_VA_ARG_EXPR mmix_gimplify_va_arg_expr struct gcc_target targetm = TARGET_INITIALIZER; @@ -601,11 +598,15 @@ mmix_function_arg_pass_by_reference (const CUMULATIVE_ARGS *argsp, { /* FIXME: Check: I'm not sure the must_pass_in_stack check is necessary. */ - return - targetm.calls.must_pass_in_stack (mode, type) - || (MMIX_FUNCTION_ARG_SIZE (mode, type) > 8 - && !TARGET_LIBFUNC - && !argsp->lib); + if (targetm.calls.must_pass_in_stack (mode, type)) + return true; + + if (MMIX_FUNCTION_ARG_SIZE (mode, type) > 8 + && !TARGET_LIBFUNC + && (!argsp || !argsp->lib)) + return true; + + return false; } /* Return nonzero if regno is a register number where a parameter is @@ -846,21 +847,6 @@ mmix_setup_incoming_varargs (CUMULATIVE_ARGS *args_so_farp, internal_error ("MMIX Internal: Last named vararg would not fit in a register"); } -/* Gimplify VA_ARG_EXPR. All we need to do is figure out if TYPE is - pass-by-reference and hand off to standard routines. */ - -static tree -mmix_gimplify_va_arg_expr (tree valist, tree type, tree *pre_p, tree *post_p) -{ - CUMULATIVE_ARGS cum; - cum.lib = 0; - - if (mmix_function_arg_pass_by_reference (&cum, TYPE_MODE (type), type, 0)) - return ind_gimplify_va_arg_expr (valist, type, pre_p, post_p); - else - return std_gimplify_va_arg_expr (valist, type, pre_p, post_p); -} - /* TRAMPOLINE_SIZE. */ /* Four 4-byte insns plus two 8-byte values. */ int mmix_trampoline_size = 32; diff --git a/gcc/config/mn10300/mn10300.c b/gcc/config/mn10300/mn10300.c index 22fc679..b5686c4 100644 --- a/gcc/config/mn10300/mn10300.c +++ b/gcc/config/mn10300/mn10300.c @@ -71,7 +71,6 @@ static bool mn10300_rtx_costs (rtx, int, int, int *); static void mn10300_file_start (void); static bool mn10300_return_in_memory (tree, tree); static rtx mn10300_builtin_saveregs (void); -static tree mn10300_gimplify_va_arg_expr (tree, tree, tree *, tree *); /* Initialize the GCC target structure. */ #undef TARGET_ASM_ALIGNED_HI_OP @@ -98,8 +97,6 @@ static tree mn10300_gimplify_va_arg_expr (tree, tree, tree *, tree *); #undef TARGET_EXPAND_BUILTIN_SAVEREGS #define TARGET_EXPAND_BUILTIN_SAVEREGS mn10300_builtin_saveregs -#undef TARGET_GIMPLIFY_VA_ARG_EXPR -#define TARGET_GIMPLIFY_VA_ARG_EXPR mn10300_gimplify_va_arg_expr static void mn10300_encode_section_info (tree, rtx, int); struct gcc_target targetm = TARGET_INITIALIZER; @@ -1459,15 +1456,6 @@ mn10300_va_start (tree valist, rtx nextarg) std_expand_builtin_va_start (valist, nextarg); } -static tree -mn10300_gimplify_va_arg_expr (tree valist, tree type, tree *pre_p, tree *post_p) -{ - if (FUNCTION_ARG_PASS_BY_REFERENCE (dummy, TYPE_MODE (type), type, dummy)) - return ind_gimplify_va_arg_expr (valist, type, pre_p, post_p); - else - return std_gimplify_va_arg_expr (valist, type, pre_p, post_p); -} - /* Return an RTX to represent where a value with mode MODE will be returned from a function. If the result is 0, the argument is pushed. */ diff --git a/gcc/config/pa/pa.c b/gcc/config/pa/pa.c index bbc27bd..723fbec 100644 --- a/gcc/config/pa/pa.c +++ b/gcc/config/pa/pa.c @@ -5956,18 +5956,10 @@ hppa_va_start (tree valist, rtx nextarg) static tree hppa_gimplify_va_arg_expr (tree valist, tree type, tree *pre_p, tree *post_p) { - bool indirect; - - indirect = FUNCTION_ARG_PASS_BY_REFERENCE (dummy, TYPE_MODE (type), type, 0); - if (TARGET_64BIT) { /* Args grow upward. We can use the generic routines. */ - - if (indirect) - return ind_gimplify_va_arg_expr (valist, type, pre_p, post_p); - else - return std_gimplify_va_arg_expr (valist, type, pre_p, post_p); + return std_gimplify_va_arg_expr (valist, type, pre_p, post_p); } else /* !TARGET_64BIT */ { @@ -5975,7 +5967,9 @@ hppa_gimplify_va_arg_expr (tree valist, tree type, tree *pre_p, tree *post_p) tree valist_type; tree t, u; unsigned int size, ofs; + bool indirect; + indirect = pass_by_reference (NULL, TYPE_MODE (type), type, 0); if (indirect) { type = ptr; diff --git a/gcc/config/v850/v850.c b/gcc/config/v850/v850.c index 5a8c89f..7221bd7 100644 --- a/gcc/config/v850/v850.c +++ b/gcc/config/v850/v850.c @@ -67,7 +67,6 @@ static void v850_encode_section_info (tree, rtx, int); static bool v850_return_in_memory (tree, tree); static void v850_setup_incoming_varargs (CUMULATIVE_ARGS *, enum machine_mode, tree, int *, int); -static tree v850_gimplify_va_arg_expr (tree, tree, tree *, tree *); /* Information about the various small memory areas. */ struct small_memory_info small_memory[ (int)SMALL_MEMORY_max ] = @@ -133,9 +132,6 @@ static int v850_interrupt_p = FALSE; #undef TARGET_SETUP_INCOMING_VARARGS #define TARGET_SETUP_INCOMING_VARARGS v850_setup_incoming_varargs -#undef TARGET_GIMPLIFY_VA_ARG_EXPR -#define TARGET_GIMPLIFY_VA_ARG_EXPR v850_gimplify_va_arg_expr - struct gcc_target targetm = TARGET_INITIALIZER; /* Sometimes certain combinations of command options do not make @@ -3308,17 +3304,6 @@ construct_prepare_instruction (rtx op) return buff; } -/* Implement `va_arg'. */ - -static tree -v850_gimplify_va_arg_expr (tree valist, tree type, tree *pre_p, tree *post_p) -{ - if (FUNCTION_ARG_PASS_BY_REFERENCE (dummy, TYPE_MODE (type), type, 0)) - return ind_gimplify_va_arg_expr (valist, type, pre_p, post_p); - else - return std_gimplify_va_arg_expr (valist, type, pre_p, post_p); -} - /* Return an RTX indicating where the return address to the calling function can be found. */ |