diff options
author | Josef Zlomek <zlomekj@suse.cz> | 2003-02-28 08:06:34 +0100 |
---|---|---|
committer | Josef Zlomek <zlomek@gcc.gnu.org> | 2003-02-28 07:06:34 +0000 |
commit | 9d18e06bd5453336dacd6aff92c186d2c69ffbe6 (patch) | |
tree | 64aee5fc980eb3329ff36f0b9fca0f1171245975 /gcc/emit-rtl.c | |
parent | 486f4cd1b2bcc3dd42f3074da2b2755280c12e59 (diff) | |
download | gcc-9d18e06bd5453336dacd6aff92c186d2c69ffbe6.zip gcc-9d18e06bd5453336dacd6aff92c186d2c69ffbe6.tar.gz gcc-9d18e06bd5453336dacd6aff92c186d2c69ffbe6.tar.bz2 |
emit-rtl.c (set_reg_attrs_for_parm): New function.
* emit-rtl.c (set_reg_attrs_for_parm): New function.
* rtl.h (set_reg_attrs_for_parm): New exported function.
* function.c (assign_parms): Use set_reg_attrs_for_parm instead of
set_reg_attrs_from_mem.
From-SVN: r63548
Diffstat (limited to 'gcc/emit-rtl.c')
-rw-r--r-- | gcc/emit-rtl.c | 28 |
1 files changed, 27 insertions, 1 deletions
diff --git a/gcc/emit-rtl.c b/gcc/emit-rtl.c index aefa874..28c75ee 100644 --- a/gcc/emit-rtl.c +++ b/gcc/emit-rtl.c @@ -1,6 +1,6 @@ /* Emit RTL for the GNU C-Compiler expander. Copyright (C) 1987, 1988, 1992, 1993, 1994, 1995, 1996, 1997, 1998, - 1999, 2000, 2001, 2002 Free Software Foundation, Inc. + 1999, 2000, 2001, 2002, 2003 Free Software Foundation, Inc. This file is part of GCC. @@ -931,6 +931,32 @@ set_reg_attrs_from_mem (reg, mem) = get_reg_attrs (MEM_EXPR (mem), INTVAL (MEM_OFFSET (mem))); } +/* Set the register attributes for registers contained in PARM_RTX. + Use needed values from memory attributes of MEM. */ + +void +set_reg_attrs_for_parm (parm_rtx, mem) + rtx parm_rtx; + rtx mem; +{ + if (GET_CODE (parm_rtx) == REG) + set_reg_attrs_from_mem (parm_rtx, mem); + else if (GET_CODE (parm_rtx) == PARALLEL) + { + /* Check for a NULL entry in the first slot, used to indicate that the + parameter goes both on the stack and in registers. */ + int i = XEXP (XVECEXP (parm_rtx, 0, 0), 0) ? 0 : 1; + for (; i < XVECLEN (parm_rtx, 0); i++) + { + rtx x = XVECEXP (parm_rtx, 0, i); + if (GET_CODE (XEXP (x, 0)) == REG) + REG_ATTRS (XEXP (x, 0)) + = get_reg_attrs (MEM_EXPR (mem), + INTVAL (XEXP (x, 1))); + } + } +} + /* Assign the RTX X to declaration T. */ void set_decl_rtl (t, x) |