diff options
author | rsandifo <rsandifo@138bc75d-0d04-0410-961f-82ee72b054a4> | 2003-10-18 18:45:16 +0000 |
---|---|---|
committer | rsandifo <rsandifo@138bc75d-0d04-0410-961f-82ee72b054a4> | 2003-10-18 18:45:16 +0000 |
commit | bf6b5685176e53950e7aa41b8739861cebb01582 (patch) | |
tree | 91b7d116f9e6b75c28d6f4aed91f37ed9b955621 /gcc/rtl.c | |
parent | d6955addde268d85b6aef4f295ab7e50080ba4e5 (diff) | |
download | gcc-bf6b5685176e53950e7aa41b8739861cebb01582.tar.gz |
* 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.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@72647 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/rtl.c')
-rw-r--r-- | gcc/rtl.c | 30 |
1 files changed, 19 insertions, 11 deletions
diff --git a/gcc/rtl.c b/gcc/rtl.c index f339ff69270..72ff89f6ace 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; } |