aboutsummaryrefslogtreecommitdiff
path: root/gcc/rtl.c
diff options
context:
space:
mode:
authorRichard Sandiford <rsandifo@redhat.com>2003-10-18 18:45:16 +0000
committerRichard Sandiford <rsandifo@gcc.gnu.org>2003-10-18 18:45:16 +0000
commite1de1560216d6b5d287db5a0add0247063f36413 (patch)
tree91b7d116f9e6b75c28d6f4aed91f37ed9b955621 /gcc/rtl.c
parent8a2b3848ff373b6333ee44b38133d864b7c0dcfa (diff)
downloadgcc-e1de1560216d6b5d287db5a0add0247063f36413.zip
gcc-e1de1560216d6b5d287db5a0add0247063f36413.tar.gz
gcc-e1de1560216d6b5d287db5a0add0247063f36413.tar.bz2
rtl.h (rtl_size): Declare.
* rtl.h (rtl_size): Declare. (rtunion): Remove rtwint. (rtx_def): Replace 'fld' with a union of an rtunion or a HOST_WIDE_INT. (RTX_HDR_SIZE, RTX_SIZE): New macros. (RTL_CHECK1): Adjust for new rtx_def layout. (RTL_CHECK2, RTL_CHECKC1, RTL_CHECKC2): Likewise. (XWINT, XCWINT): Likewise. Access the rtx structure directly. (X0WINT): Remove. (X0ANY): New macro. * rtl.def: Adjust comments for new rtx_def layout. * ggc.h (ggc_alloc_rtx): Take the rtx code as argument, not the number of slots. * rtl.c (rtx_size): New array. (rtx_alloc): Adjust call to ggc_alloc_rtx. Use RTX_HDR_SIZE. (copy_rtx): Use RTX_HDR_SIZE. Adjust for new rtx_def layout. (shallow_copy_rtx): Adjust call to ggc_alloc_rtx. Use RTX_SIZE. * integrate.c (copy_rtx_and_substitute): Use X0ANY to copy '0' fields. * emit-rtl.c (copy_most_rtx): Likewise. (copy_rtx_if_shared): Use RTX_SIZE. (copy_insn_1): Use RTX_HDR_SIZE. Adjust for new rtx_def layout. * gengenrtl.c (gendef): Adjust ggc_alloc_rtx call. Use RTX_HDR_SIZE. * gengtype.c (write_rtx_next): Use RTX_HDR_SIZE. (adjust_field_rtx_def): Expect "rtx_def" to be a union rather than an array. Adjust output for new rtx_def layout. * ggc-page.c (RTL_SIZE): Use RTX_HDR_SIZE. * reload1.c (eliminate_regs): Use RTX_SIZE. * rtlanal.c (loc_mentioned_in_p): Adjust for new rtx_def layout. * gdbinit.in (pi): Likewise. From-SVN: r72647
Diffstat (limited to 'gcc/rtl.c')
-rw-r--r--gcc/rtl.c30
1 files changed, 19 insertions, 11 deletions
diff --git a/gcc/rtl.c b/gcc/rtl.c
index f339ff6..72ff89f 100644
--- a/gcc/rtl.c
+++ b/gcc/rtl.c
@@ -96,6 +96,18 @@ const char rtx_class[NUM_RTX_CODE] = {
#undef DEF_RTL_EXPR
};
+/* Indexed by rtx code, gives the size of the rtx in bytes. */
+
+const unsigned char rtx_size[NUM_RTX_CODE] = {
+#define DEF_RTL_EXPR(ENUM, NAME, FORMAT, CLASS) \
+ ((ENUM) == CONST_INT || (ENUM) == CONST_DOUBLE \
+ ? RTX_HDR_SIZE + (sizeof FORMAT - 1) * sizeof (HOST_WIDE_INT) \
+ : RTX_HDR_SIZE + (sizeof FORMAT - 1) * sizeof (rtunion)),
+
+#include "rtl.def"
+#undef DEF_RTL_EXPR
+};
+
/* Names for kinds of NOTEs and REG_NOTEs. */
const char * const note_insn_name[NOTE_INSN_MAX - NOTE_INSN_BIAS] =
@@ -150,15 +162,14 @@ rtx
rtx_alloc (RTX_CODE code)
{
rtx rt;
- int n = GET_RTX_LENGTH (code);
- rt = ggc_alloc_rtx (n);
+ rt = ggc_alloc_rtx (code);
/* We want to clear everything up to the FLD array. Normally, this
is one int, but we don't want to assume that and it isn't very
portable anyway; this is. */
- memset (rt, 0, sizeof (struct rtx_def) - sizeof (rtunion));
+ memset (rt, 0, RTX_HDR_SIZE);
PUT_CODE (rt, code);
return rt;
}
@@ -218,7 +229,7 @@ copy_rtx (rtx orig)
all fields need copying, and then clear the fields that should
not be copied. That is the sensible default behavior, and forces
us to explicitly document why we are *not* copying a flag. */
- memcpy (copy, orig, sizeof (struct rtx_def) - sizeof (rtunion));
+ memcpy (copy, orig, RTX_HDR_SIZE);
/* We do not copy the USED flag, which is used as a mark bit during
walks over the RTL. */
@@ -234,7 +245,7 @@ copy_rtx (rtx orig)
for (i = 0; i < GET_RTX_LENGTH (GET_CODE (copy)); i++)
{
- copy->fld[i] = orig->fld[i];
+ copy->u.fld[i] = orig->u.fld[i];
switch (*format_ptr++)
{
case 'e':
@@ -276,13 +287,10 @@ copy_rtx (rtx orig)
rtx
shallow_copy_rtx (rtx orig)
{
- RTX_CODE code = GET_CODE (orig);
- size_t n = GET_RTX_LENGTH (code);
- rtx copy = ggc_alloc_rtx (n);
-
- memcpy (copy, orig,
- sizeof (struct rtx_def) + sizeof (rtunion) * (n - 1));
+ rtx copy;
+ copy = ggc_alloc_rtx (GET_CODE (orig));
+ memcpy (copy, orig, RTX_SIZE (GET_CODE (orig)));
return copy;
}