From a0506b54dd1dc77ed69b16514c9e3d24b52d97c1 Mon Sep 17 00:00:00 2001 From: David Edelsohn Date: Wed, 3 Dec 2003 04:48:26 +0000 Subject: [PATCH] function.c (assign_parms): Make sure parm PARALLEL combined in reg is composed of more than one object and... * function.c (assign_parms): Make sure parm PARALLEL combined in reg is composed of more than one object and the mode really produces a reg. From-SVN: r74214 --- gcc/ChangeLog | 6 ++++++ gcc/function.c | 16 +++++++++++----- 2 files changed, 17 insertions(+), 5 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index f94dfda77b5..26349e4445c 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2003-12-03 David Edelsohn + + * function.c (assign_parms): Make sure parm PARALLEL combined + in reg is composed of more than one object and the mode really + produces a reg. + 2003-12-03 Jan Hubicka * i386.c (classify_argument): Make it 64bit clean. diff --git a/gcc/function.c b/gcc/function.c index 9dac3e45576..79334af980d 100644 --- a/gcc/function.c +++ b/gcc/function.c @@ -4704,13 +4704,19 @@ assign_parms (tree fndecl) Set DECL_RTL to that place. */ - if (GET_CODE (entry_parm) == PARALLEL && nominal_mode != BLKmode) + if (GET_CODE (entry_parm) == PARALLEL && nominal_mode != BLKmode + && XVECLEN (entry_parm, 0) > 1) { - /* Objects the size of a register can be combined in registers */ + /* Reconstitute objects the size of a register or larger using + register operations instead of the stack. */ rtx parmreg = gen_reg_rtx (nominal_mode); - emit_group_store (parmreg, entry_parm, TREE_TYPE (parm), - int_size_in_bytes (TREE_TYPE (parm))); - SET_DECL_RTL (parm, parmreg); + + if (REG_P (parmreg)) + { + emit_group_store (parmreg, entry_parm, TREE_TYPE (parm), + int_size_in_bytes (TREE_TYPE (parm))); + SET_DECL_RTL (parm, parmreg); + } } if (nominal_mode == BLKmode -- 2.30.2