aboutsummaryrefslogtreecommitdiff
path: root/gcc/emit-rtl.c
diff options
context:
space:
mode:
authorJosef Zlomek <zlomekj@suse.cz>2003-02-28 08:06:34 +0100
committerJosef Zlomek <zlomek@gcc.gnu.org>2003-02-28 07:06:34 +0000
commit9d18e06bd5453336dacd6aff92c186d2c69ffbe6 (patch)
tree64aee5fc980eb3329ff36f0b9fca0f1171245975 /gcc/emit-rtl.c
parent486f4cd1b2bcc3dd42f3074da2b2755280c12e59 (diff)
downloadgcc-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.c28
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)