re PR tree-optimization/46077 (ICE in tree vectorization when compiling towns_audio.cpp from scummvm)

PR tree-optimization/46077
	* tree-chrec.c (eq_evolutions_p): Accept some expressions.

testsuite/
	PR tree-optimization/46077
	* gcc.dg/vect/O3-pr46077.c: New testcase.

From-SVN: r166958
This commit is contained in:
Michael Matz 2010-11-19 20:56:27 +00:00 committed by Michael Matz
parent ce59187eb8
commit 2bdea53925
4 changed files with 30 additions and 0 deletions

View File

@ -1,3 +1,8 @@
2010-11-19 Michael Matz <matz@suse.de>
PR tree-optimization/46077
* tree-chrec.c (eq_evolutions_p): Accept some expressions.
2010-11-19 Anatoly Sokolov <aesok@post.ru>
* config/mn10300/mn10300.h (OUTPUT_ADDR_CONST_EXTRA): Remove.

View File

@ -1,3 +1,8 @@
2010-11-19 Michael Matz <matz@suse.de>
PR tree-optimization/46077
* gcc.dg/vect/O3-pr46077.c: New testcase.
2010-11-19 Joseph Myers <joseph@codesourcery.com>
PR c/46547

View File

@ -0,0 +1,10 @@
/* { dg-do compile } */
/* { dg-require-effective-target vect_int } */
void intf_pcmPlayEffect(int *src, int *dst, int size) {
int i;
for (i = 0; i < size; i++)
*dst++ = *src & 0x80 ? (*src++ & 0x7f) : -*src++;
}
/* { dg-final { cleanup-tree-dump "vect" } } */

View File

@ -1433,6 +1433,16 @@ eq_evolutions_p (const_tree chrec0, const_tree chrec1)
return (CHREC_VARIABLE (chrec0) == CHREC_VARIABLE (chrec1)
&& eq_evolutions_p (CHREC_LEFT (chrec0), CHREC_LEFT (chrec1))
&& eq_evolutions_p (CHREC_RIGHT (chrec0), CHREC_RIGHT (chrec1)));
case PLUS_EXPR:
case MULT_EXPR:
case MINUS_EXPR:
case POINTER_PLUS_EXPR:
return eq_evolutions_p (TREE_OPERAND (chrec0, 0),
TREE_OPERAND (chrec1, 0))
&& eq_evolutions_p (TREE_OPERAND (chrec0, 1),
TREE_OPERAND (chrec1, 1));
default:
return false;
}