This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[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


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]