]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
re PR tree-optimization/42709 (error: type mismatch in pointer plus expression)
authorIra Rosen <irar@il.ibm.com>
Thu, 14 Jan 2010 07:49:39 +0000 (07:49 +0000)
committerIra Rosen <irar@gcc.gnu.org>
Thu, 14 Jan 2010 07:49:39 +0000 (07:49 +0000)
PR tree-optimization/42709
* tree-vect-slp.c (vect_get_constant_vectors): Use constant's type
as scalar type in creation of constant vector operand.

From-SVN: r155882

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

index 49edf5b9e95a9aea0125b93b22f1d8b2467781af..18658784acd68b7fd7c932bdb2df2b5e2bbfb61a 100644 (file)
@@ -1,3 +1,9 @@
+2010-01-14  Ira Rosen  <irar@il.ibm.com>
+
+       PR tree-optimization/42709
+       * tree-vect-slp.c (vect_get_constant_vectors): Use constant's type
+       as scalar type in creation of constant vector operand.
+
 2010-01-14  Ralf Wildenhues  <Ralf.Wildenhues@gmx.de>
 
        PR testsuite/42414
index ffe006a646e02a60cf0266bbedd645e075974e59..faac669f197a8e2819c0bc002bff3d3539b136f5 100644 (file)
@@ -1,3 +1,8 @@
+2010-01-14  Ira Rosen  <irar@il.ibm.com>
+
+       PR tree-optimization/42709
+       * gcc.dg/vect/pr42709.c: New test.
+
 2010-01-14  Paul Thomas  <pault@gcc.gnu.org>
 
         PR fortran/41478
diff --git a/gcc/testsuite/gcc.dg/vect/pr42709.c b/gcc/testsuite/gcc.dg/vect/pr42709.c
new file mode 100644 (file)
index 0000000..8ccbfa6
--- /dev/null
@@ -0,0 +1,28 @@
+/* { dg-do compile } */
+/* { dg-require-effective-target vect_int } */
+
+#include <stdarg.h>
+#include "tree-vect.h"
+
+#define N 128 
+
+int *res[N];
+
+int
+main1 (int *a, int *b, int *c, int *d, int dummy)
+{
+  int i;
+
+  for (i = 0; i < N/2; i+=4)
+    {
+      res[i] = a + 16;
+      res[i+1] = b + 16;
+      res[i+2] = c + 16;
+      res[i+3] = d + 16;
+      if (dummy == 32)
+        abort ();
+    } 
+}
+
+/* { dg-final { cleanup-tree-dump "vect" } } */
+  
index a3be6786d94a3918ad572e4ae6c2cb53d8988c39..bbf2bd31820630c99b2b96b4fd123c1a60bc4c6c 100644 (file)
@@ -1421,7 +1421,6 @@ vect_get_constant_vectors (slp_tree slp_node, VEC(tree,heap) **vec_oprnds,
   VEC (gimple, heap) *stmts = SLP_TREE_SCALAR_STMTS (slp_node);
   gimple stmt = VEC_index (gimple, stmts, 0);
   stmt_vec_info stmt_vinfo = vinfo_for_stmt (stmt);
-  tree vectype = STMT_VINFO_VECTYPE (stmt_vinfo);
   int nunits;
   tree vec_cst;
   tree t = NULL_TREE;
@@ -1446,16 +1445,12 @@ vect_get_constant_vectors (slp_tree slp_node, VEC(tree,heap) **vec_oprnds,
     }
 
   if (CONSTANT_CLASS_P (op))
-    {
-      vector_type = vectype;
-      constant_p = true;
-    }
+    constant_p = true;
   else
-    {
-      vector_type = get_vectype_for_scalar_type (TREE_TYPE (op));
-      gcc_assert (vector_type);
-      constant_p = false;
-    }
+    constant_p = false;
+
+  vector_type = get_vectype_for_scalar_type (TREE_TYPE (op));
+  gcc_assert (vector_type);
 
   nunits = TYPE_VECTOR_SUBPARTS (vector_type);