diff options
author | Michael Matz <matz@suse.de> | 2010-11-19 20:56:27 +0000 |
---|---|---|
committer | Michael Matz <matz@gcc.gnu.org> | 2010-11-19 20:56:27 +0000 |
commit | 2bdea5392557500a08a9e816fea2bdc042d6d0d1 (patch) | |
tree | fcc4ee581e8607a84c3348cb57868886d14503f1 | |
parent | ce59187eb876fc766487c3d077ca9bd6d3ce4019 (diff) | |
download | gcc-2bdea5392557500a08a9e816fea2bdc042d6d0d1.zip gcc-2bdea5392557500a08a9e816fea2bdc042d6d0d1.tar.gz gcc-2bdea5392557500a08a9e816fea2bdc042d6d0d1.tar.bz2 |
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
-rw-r--r-- | gcc/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/gcc.dg/vect/O3-pr46077.c | 10 | ||||
-rw-r--r-- | gcc/tree-chrec.c | 10 |
4 files changed, 30 insertions, 0 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 7f4a8d7..f1f06ce 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -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. diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index cea7f44..a37ba96 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -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 diff --git a/gcc/testsuite/gcc.dg/vect/O3-pr46077.c b/gcc/testsuite/gcc.dg/vect/O3-pr46077.c new file mode 100644 index 0000000..6546f6e --- /dev/null +++ b/gcc/testsuite/gcc.dg/vect/O3-pr46077.c @@ -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" } } */ diff --git a/gcc/tree-chrec.c b/gcc/tree-chrec.c index 7295510..0c13c21 100644 --- a/gcc/tree-chrec.c +++ b/gcc/tree-chrec.c @@ -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; } |