From 2436a91b34962a2d7f50e26e7d1a5c73348f81a1 Mon Sep 17 00:00:00 2001 From: Ulrich Weigand Date: Sat, 15 Mar 2003 16:30:35 +0000 Subject: [PATCH] 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 --- gcc/ChangeLog | 8 ++++++++ gcc/varasm.c | 14 +++++++++----- 2 files changed, 17 insertions(+), 5 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index b42a3921b80..b2ffd69800f 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,11 @@ +2003-03-15 Ulrich Weigand + + * 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. + 2003-03-15 Neil Booth * fix-header.c (read_scan_file): Read main file before handling -D. diff --git a/gcc/varasm.c b/gcc/varasm.c index 42775dca5bc..fc6f467a04f 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;