aboutsummaryrefslogtreecommitdiff
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
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
-rw-r--r--gcc/ChangeLog8
-rw-r--r--gcc/varasm.c14
2 files changed, 17 insertions, 5 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index b42a392..b2ffd69 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,11 @@
+2003-03-15 Ulrich Weigand <uweigand@de.ibm.com>
+
+ * 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 <neil@daikokuya.co.uk>
* fix-header.c (read_scan_file): Read main file before handling -D.
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;