]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
re PR tree-optimization/33742 (Segfault in vectorizable_operation)
authorUros Bizjak <ubizjak@gmail.com>
Fri, 12 Oct 2007 08:37:17 +0000 (10:37 +0200)
committerUros Bizjak <uros@gcc.gnu.org>
Fri, 12 Oct 2007 08:37:17 +0000 (10:37 +0200)
PR tree-optimization/33742
* tree-vect-transform.c (vectorizable_operation): Return false
if get_vectype_for_scalar_type for scalar_dest can't be determined.
(vectorizable_call): Same for rhs_type and lhs_type.

testsuite/ChangeLog:

PR tree-optimization/33742
* gcc.dg/pr33742.c: New testcase.

From-SVN: r129255

gcc/ChangeLog
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.dg/pr33742.c [new file with mode: 0644]
gcc/tree-vect-transform.c

index c1f44631d6845e6a7989a116571b736760e55055..28590a6c41b07d7d2573d2de4805d650214606ae 100644 (file)
@@ -1,3 +1,10 @@
+2007-10-12  Uros Bizjak  <ubizjak@gmail.com>
+
+       PR tree-optimization/33742
+       * tree-vect-transform.c (vectorizable_operation): Return false
+       if get_vectype_for_scalar_type for scalar_dest can't be determined.
+       (vectorizable_call): Same for rhs_type and lhs_type.
+
 2007-10-12  Jakub Jelinek  <jakub@redhat.com>
 
        PR tree-optimization/33645
index 79626fc11720de8ae03c1e2efd08e58537631dee..cacf0a9ed7dae503f2c8bb64031df11099d078ab 100644 (file)
@@ -1,3 +1,8 @@
+2007-10-12  Uros Bizjak  <ubizjak@gmail.com>
+
+       PR tree-optimization/33742
+       * gcc.dg/pr33742.c: New testcase.
+
 2007-10-12  Jakub Jelinek  <jakub@redhat.com>
 
        PR tree-optimization/33645
diff --git a/gcc/testsuite/gcc.dg/pr33742.c b/gcc/testsuite/gcc.dg/pr33742.c
new file mode 100644 (file)
index 0000000..b905d9d
--- /dev/null
@@ -0,0 +1,16 @@
+/* { dg-do compile } */
+/* { dg-options "-O2 -ftree-vectorize" } */
+
+typedef unsigned short ush;
+extern ush prev[];
+
+void fill_window ()
+{
+  register unsigned n, m;
+
+  for (n = 0; n < 32768; n++)
+    {
+      m = prev[n];
+      prev[n] = (ush) (m >= 0x8000 ? m - 0x8000 : 0);
+    }
+}
index f02d912b29f63bc9f027cd2a6aa329e0a62eb626..423ae65d964f575c738e0bdba63cecf89ae87a8d 100644 (file)
@@ -3016,10 +3016,14 @@ vectorizable_call (tree stmt, block_stmt_iterator *bsi, tree *vec_stmt)
     return false;
 
   vectype_in = get_vectype_for_scalar_type (rhs_type);
+  if (!vectype_in)
+    return false;
   nunits_in = TYPE_VECTOR_SUBPARTS (vectype_in);
 
   lhs_type = TREE_TYPE (GIMPLE_STMT_OPERAND (stmt, 0));
   vectype_out = get_vectype_for_scalar_type (lhs_type);
+  if (!vectype_out)
+    return false;
   nunits_out = TYPE_VECTOR_SUBPARTS (vectype_out);
 
   /* FORNOW */
@@ -3804,6 +3808,8 @@ vectorizable_operation (tree stmt, block_stmt_iterator *bsi, tree *vec_stmt,
 
   scalar_dest = GIMPLE_STMT_OPERAND (stmt, 0);
   vectype_out = get_vectype_for_scalar_type (TREE_TYPE (scalar_dest));
+  if (!vectype_out)
+    return false;
   nunits_out = TYPE_VECTOR_SUBPARTS (vectype_out);
   if (nunits_out != nunits_in)
     return false;