diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 7f4a8d77e61..f1f06ce7a8d 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +2010-11-19 Michael Matz + + PR tree-optimization/46077 + * tree-chrec.c (eq_evolutions_p): Accept some expressions. + 2010-11-19 Anatoly Sokolov * config/mn10300/mn10300.h (OUTPUT_ADDR_CONST_EXTRA): Remove. diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index cea7f4414bf..a37ba969d09 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2010-11-19 Michael Matz + + PR tree-optimization/46077 + * gcc.dg/vect/O3-pr46077.c: New testcase. + 2010-11-19 Joseph Myers 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 00000000000..6546f6e3c00 --- /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 72955108c7b..0c13c21bfe8 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; }