re PR middle-end/77377 (c-c++-common/pr59037.c ICEs with -fpic -msse on i686)

PR middle-end/77377
	* simplify-rtx.c (avoid_constant_pool_reference): For out of bounds
	constant pool reference return x instead of c.

	* gcc.target/i386/pr77377.c: New test.

From-SVN: r239854
This commit is contained in:
Jakub Jelinek 2016-08-30 08:45:56 +02:00 committed by Jakub Jelinek
parent ab8348325f
commit 26122e2d8a
4 changed files with 18 additions and 4 deletions

View File

@ -1,3 +1,9 @@
2016-08-30 Jakub Jelinek <jakub@redhat.com>
PR middle-end/77377
* simplify-rtx.c (avoid_constant_pool_reference): For out of bounds
constant pool reference return x instead of c.
2016-08-29 Segher Boessenkool <segher@kernel.crashing.org> 2016-08-29 Segher Boessenkool <segher@kernel.crashing.org>
* config/rs6000/rs6000.h (CALL_REALLY_USED_REGISTERS): Do not * config/rs6000/rs6000.h (CALL_REALLY_USED_REGISTERS): Do not

View File

@ -251,15 +251,14 @@ avoid_constant_pool_reference (rtx x)
/* If we're accessing the constant in a different mode than it was /* If we're accessing the constant in a different mode than it was
originally stored, attempt to fix that up via subreg simplifications. originally stored, attempt to fix that up via subreg simplifications.
If that fails we have no choice but to return the original memory. */ If that fails we have no choice but to return the original memory. */
if ((offset != 0 || cmode != GET_MODE (x)) if (offset == 0 && cmode == GET_MODE (x))
&& offset >= 0 && offset < GET_MODE_SIZE (cmode)) return c;
else if (offset >= 0 && offset < GET_MODE_SIZE (cmode))
{ {
rtx tem = simplify_subreg (GET_MODE (x), c, cmode, offset); rtx tem = simplify_subreg (GET_MODE (x), c, cmode, offset);
if (tem && CONSTANT_P (tem)) if (tem && CONSTANT_P (tem))
return tem; return tem;
} }
else
return c;
} }
return x; return x;

View File

@ -1,5 +1,8 @@
2016-08-30 Jakub Jelinek <jakub@redhat.com> 2016-08-30 Jakub Jelinek <jakub@redhat.com>
PR middle-end/77377
* gcc.target/i386/pr77377.c: New test.
PR debug/77389 PR debug/77389
* g++.dg/debug/dwarf2/template-params-12f.C: Pass -gno-strict-dwarf * g++.dg/debug/dwarf2/template-params-12f.C: Pass -gno-strict-dwarf
in dg-options. in dg-options.

View File

@ -0,0 +1,6 @@
/* PR middle-end/77377 */
/* { dg-do compile } */
/* { dg-options "-O3 -msse" } */
/* { dg-additional-options "-fpic" { target fpic } } */
#include "../../c-c++-common/pr59037.c"