]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
re PR tree-optimization/46077 (ICE in tree vectorization when compiling towns_audio...
authorMichael Matz <matz@suse.de>
Fri, 19 Nov 2010 20:56:27 +0000 (20:56 +0000)
committerMichael Matz <matz@gcc.gnu.org>
Fri, 19 Nov 2010 20:56:27 +0000 (20:56 +0000)
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

gcc/ChangeLog
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.dg/vect/O3-pr46077.c [new file with mode: 0644]
gcc/tree-chrec.c

index 7f4a8d77e61c902ba852f2159a8003dc3236b6aa..f1f06ce7a8d986c943f0482f64766c3e104a2759 100644 (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.
index cea7f4414bf7230ec2c119ade30b126698539047..a37ba969d099c29405fad7c182b1b4506eb3d14a 100644 (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
diff --git a/gcc/testsuite/gcc.dg/vect/O3-pr46077.c b/gcc/testsuite/gcc.dg/vect/O3-pr46077.c
new file mode 100644 (file)
index 0000000..6546f6e
--- /dev/null
@@ -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" } } */
index 72955108c7bdd01e63a956c275a028d82da63e6d..0c13c21bfe87069917715915d55963d4a91ab3c6 100644 (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;
     }