diff options
author | David Edelsohn <edelsohn@gnu.org> | 2003-12-03 04:48:26 +0000 |
---|---|---|
committer | David Edelsohn <dje@gcc.gnu.org> | 2003-12-02 23:48:26 -0500 |
commit | a0506b54dd1dc77ed69b16514c9e3d24b52d97c1 (patch) | |
tree | 2984a737b055749cda3f548a258cae9e72fd2ef7 /gcc/function.c | |
parent | 296e4ae8812fd0299b71c090b5dbaaa39c91ee31 (diff) | |
download | gcc-a0506b54dd1dc77ed69b16514c9e3d24b52d97c1.zip gcc-a0506b54dd1dc77ed69b16514c9e3d24b52d97c1.tar.gz gcc-a0506b54dd1dc77ed69b16514c9e3d24b52d97c1.tar.bz2 |
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
Diffstat (limited to 'gcc/function.c')
-rw-r--r-- | gcc/function.c | 16 |
1 files changed, 11 insertions, 5 deletions
diff --git a/gcc/function.c b/gcc/function.c index 9dac3e4..79334af 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 |