aboutsummaryrefslogtreecommitdiff
path: root/gcc/config
diff options
context:
space:
mode:
authorRichard Henderson <rth@redhat.com>2004-07-13 01:43:41 -0700
committerRichard Henderson <rth@gcc.gnu.org>2004-07-13 01:43:41 -0700
commitaf064de51e5c824f1afb56bbc5bbf4b138c4e483 (patch)
treed9a896211b7b86323ca0988aebcee6681c40a375 /gcc/config
parent0976078c73f58e7350fcc0516618fdd7737c9696 (diff)
downloadgcc-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.c15
-rw-r--r--gcc/config/cris/cris.c16
-rw-r--r--gcc/config/fr30/fr30.c15
-rw-r--r--gcc/config/frv/frv.c15
-rw-r--r--gcc/config/iq2000/iq2000.c14
-rw-r--r--gcc/config/m32r/m32r.c15
-rw-r--r--gcc/config/mmix/mmix.c32
-rw-r--r--gcc/config/mn10300/mn10300.c12
-rw-r--r--gcc/config/pa/pa.c12
-rw-r--r--gcc/config/v850/v850.c15
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. */