This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
[Committed] S/390: Fix rtl sharing problem during literal pool dump
- From: "Andreas Krebbel" <Andreas dot Krebbel at de dot ibm dot com>
- To: gcc-patches at gcc dot gnu dot org
- Date: Mon, 10 Sep 2007 15:12:33 +0200
- Subject: [Committed] S/390: Fix rtl sharing problem during literal pool dump
Hello,
during machine dependent reorg the S/390 back end might create shared
tls symbol references when dumping the literal pool. This causes a
bootstrap failure with the rtl sharing check pass.
Fixed with the attached patch.
Committed to mainline.
Bye,
-Andreas-
2007-09-10 Andreas Krebbel <krebbel1@de.ibm.com>
* config/s390/s390.c (s390_dump_pool): Create copy of constant
pool entries since they might hold values that must not be shared.
Index: gcc/config/s390/s390.c
===================================================================
*** gcc/config/s390/s390.c.orig 2007-09-10 09:56:49.000000000 +0200
--- gcc/config/s390/s390.c 2007-09-10 13:55:18.000000000 +0200
*************** s390_dump_pool (struct constant_pool *po
*** 5600,5606 ****
for (c = pool->constants[i]; c; c = c->next)
{
/* Convert UNSPEC_LTREL_OFFSET unspecs to pool-relative references. */
! rtx value = c->value;
if (GET_CODE (value) == CONST
&& GET_CODE (XEXP (value, 0)) == UNSPEC
&& XINT (XEXP (value, 0), 1) == UNSPEC_LTREL_OFFSET
--- 5600,5606 ----
for (c = pool->constants[i]; c; c = c->next)
{
/* Convert UNSPEC_LTREL_OFFSET unspecs to pool-relative references. */
! rtx value = copy_rtx (c->value);
if (GET_CODE (value) == CONST
&& GET_CODE (XEXP (value, 0)) == UNSPEC
&& XINT (XEXP (value, 0), 1) == UNSPEC_LTREL_OFFSET