re PR rtl-optimization/56275 (ICE in simplify_subreg, at simplify-rtx.c:5261 with vector code.)

PR rtl-optimization/56275
	* simplify-rtx.c (avoid_constant_pool_reference): Check that
	offset is non-negative and less than cmode size before
	calling simplify_subreg.

testsuite/ChangeLog:

	PR rtl-optimization/56275
	* gcc.dg/pr56275.c: New test.

From-SVN: r195944
This commit is contained in:
Uros Bizjak 2013-02-11 17:05:44 +01:00 committed by Uros Bizjak
parent ba9146c16b
commit b63fe0076d
4 changed files with 26 additions and 1 deletions

View file

@ -1,3 +1,10 @@
2013-02-11 Uros Bizjak <ubizjak@gmail.com>
PR rtl-optimization/56275
* simplify-rtx.c (avoid_constant_pool_reference): Check that
offset is non-negative and less than cmode size before
calling simplify_subreg.
2013-02-11 Richard Biener <rguenther@suse.de>
PR tree-optimization/56264

View file

@ -242,7 +242,8 @@ avoid_constant_pool_reference (rtx x)
/* If we're accessing the constant in a different mode than it was
originally stored, attempt to fix that up via subreg simplifications.
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))
{
rtx tem = simplify_subreg (GET_MODE (x), c, cmode, offset);
if (tem && CONSTANT_P (tem))

View file

@ -1,3 +1,8 @@
2013-02-11 Uros Bizjak <ubizjak@gmail.com>
PR rtl-optimization/56275
* gcc.dg/pr56275.c: New test.
2013-02-11 Richard Biener <rguenther@suse.de>
PR tree-optimization/56273

View file

@ -0,0 +1,12 @@
/* { dg-do compile } */
/* { dg-options "-O2" } */
/* { dg-additional-options "-mno-sse" { target { i?86-*-* x86_64-*-* } } } */
typedef long long v2tw __attribute__ ((vector_size (2 * sizeof (long long))));
void tiger_block_v2 (long long in1, v2tw *res)
{
v2tw i1 = { in1, in1 };
*res = i1 << 1;
}