From: Ira Rosen Date: Thu, 14 Jan 2010 07:49:39 +0000 (+0000) Subject: re PR tree-optimization/42709 (error: type mismatch in pointer plus expression) X-Git-Tag: releases/gcc-4.5.0~1241 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=cd481d83ed240ebbdb706c3e3f3358f46662d4b8;p=thirdparty%2Fgcc.git re PR tree-optimization/42709 (error: type mismatch in pointer plus expression) 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 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 49edf5b9e95a..18658784acd6 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2010-01-14 Ira Rosen + + 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 PR testsuite/42414 diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index ffe006a646e0..faac669f197a 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2010-01-14 Ira Rosen + + PR tree-optimization/42709 + * gcc.dg/vect/pr42709.c: New test. + 2010-01-14 Paul Thomas 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 index 000000000000..8ccbfa65e814 --- /dev/null +++ b/gcc/testsuite/gcc.dg/vect/pr42709.c @@ -0,0 +1,28 @@ +/* { dg-do compile } */ +/* { dg-require-effective-target vect_int } */ + +#include +#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" } } */ + diff --git a/gcc/tree-vect-slp.c b/gcc/tree-vect-slp.c index a3be6786d94a..bbf2bd318206 100644 --- a/gcc/tree-vect-slp.c +++ b/gcc/tree-vect-slp.c @@ -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);