varasm: Propagate litpool decl alignment to generated RTX.
authorAndreas Krebbel <krebbel@linux.vnet.ibm.com>
Thu, 22 Dec 2016 14:50:29 +0000 (14:50 +0000)
committerAndreas Krebbel <krebbel@gcc.gnu.org>
Thu, 22 Dec 2016 14:50:29 +0000 (14:50 +0000)
commit8db9d05e0f0642262300e89585da7c2667928993
treeb224567ef58decaaa51a7eba54c6eee97a6dd51a
parentcbbb9dabbb498b27ca4cf7337a7c8aa013498bb0
varasm: Propagate litpool decl alignment to generated RTX.

When pushing a value into the literal pool the resulting decl might
get a higher alignment than the original expression depending on how a
target defines CONSTANT_ALIGNMENT.  Generating an RTX for the constant
pool access we currently use the alignment from the original
expression.  Changed with the attached patch.

This fixes a GCC 6 regression for S/390.  For arrays of string
constants as in the attached testcase encode_section_info is not able
to figure out that the constant pool slot is already properly aligned
since the mem_align field in the rtx is not set properly.

gcc/ChangeLog:

2016-12-22  Andreas Krebbel  <krebbel@linux.vnet.ibm.com>

* varasm.c (build_constant_desc): Use the alignment of the var
decl instead of the original expression.

gcc/testsuite/ChangeLog:

2016-12-22  Andreas Krebbel  <krebbel@linux.vnet.ibm.com>

* gcc.target/s390/litpool-str-1.c: New test.

From-SVN: r243888
gcc/ChangeLog
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.target/s390/litpool-str-1.c [new file with mode: 0644]
gcc/varasm.c