diff options
author | Ulrich Weigand <uweigand@de.ibm.com> | 2003-03-15 16:30:35 +0000 |
---|---|---|
committer | Ulrich Weigand <uweigand@gcc.gnu.org> | 2003-03-15 16:30:35 +0000 |
commit | 2436a91b34962a2d7f50e26e7d1a5c73348f81a1 (patch) | |
tree | 2e28ee11d5a782b5d18763bde026592f748f71e1 /gcc/varasm.c | |
parent | af6fd53f5acd8afb55f6fd3053bf853c9cd1e966 (diff) | |
download | gcc-2436a91b34962a2d7f50e26e7d1a5c73348f81a1.zip gcc-2436a91b34962a2d7f50e26e7d1a5c73348f81a1.tar.gz gcc-2436a91b34962a2d7f50e26e7d1a5c73348f81a1.tar.bz2 |
varasm.c (struct rtx_const): Change type of un.addr member to struct holding an additional 'symbol' member.
* varasm.c (struct rtx_const): Change type of un.addr member
to struct holding an additional 'symbol' member.
(decode_rtx_const): Re-enable optimization to count SYMBOL_REFs
with equal string addresses as equal.
(simplify_subtraction): Adapt to struct rtx_const change.
From-SVN: r64406
Diffstat (limited to 'gcc/varasm.c')
-rw-r--r-- | gcc/varasm.c | 14 |
1 files changed, 9 insertions, 5 deletions
diff --git a/gcc/varasm.c b/gcc/varasm.c index 42775dc..fc6f467 100644 --- a/gcc/varasm.c +++ b/gcc/varasm.c @@ -2115,7 +2115,11 @@ struct rtx_const GTY(()) ENUM_BITFIELD(machine_mode) mode : 16; union rtx_const_un { REAL_VALUE_TYPE GTY ((tag ("4"))) du; - struct addr_const GTY ((tag ("1"))) addr; + struct rtx_const_u_addr { + rtx base; + const char *symbol; + HOST_WIDE_INT offset; + } GTY ((tag ("1"))) addr; struct rtx_const_u_di { HOST_WIDE_INT high; HOST_WIDE_INT low; @@ -3045,13 +3049,12 @@ decode_rtx_const (mode, x, value) if (value->kind >= RTX_INT && value->un.addr.base != 0) switch (GET_CODE (value->un.addr.base)) { -#if 0 case SYMBOL_REF: /* Use the string's address, not the SYMBOL_REF's address, for the sake of addresses of library routines. */ - value->un.addr.base = (rtx) XSTR (value->un.addr.base, 0); + value->un.addr.symbol = XSTR (value->un.addr.base, 0); + value->un.addr.base = NULL_RTX; break; -#endif case LABEL_REF: /* For a LABEL_REF, compare labels. */ @@ -3076,7 +3079,8 @@ simplify_subtraction (x) if (val0.kind >= RTX_INT && val0.kind == val1.kind - && val0.un.addr.base == val1.un.addr.base) + && val0.un.addr.base == val1.un.addr.base + && val0.un.addr.symbol == val1.un.addr.symbol) return GEN_INT (val0.un.addr.offset - val1.un.addr.offset); return x; |