aboutsummaryrefslogtreecommitdiff
path: root/gcc/varasm.c
diff options
context:
space:
mode:
authorUlrich Weigand <uweigand@de.ibm.com>2003-03-15 16:30:35 +0000
committerUlrich Weigand <uweigand@gcc.gnu.org>2003-03-15 16:30:35 +0000
commit2436a91b34962a2d7f50e26e7d1a5c73348f81a1 (patch)
tree2e28ee11d5a782b5d18763bde026592f748f71e1 /gcc/varasm.c
parentaf6fd53f5acd8afb55f6fd3053bf853c9cd1e966 (diff)
downloadgcc-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.c14
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;