aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDorit Nuzman <dorit@il.ibm.com>2007-09-15 18:24:23 +0000
committerDorit Nuzman <dorit@gcc.gnu.org>2007-09-15 18:24:23 +0000
commit4934454bed73a1a770ae7d4cf9b16df9c8c7a720 (patch)
treefdfb5ac34e4835967e8b7112ee680cce9fbb38c4
parent8a0c568f7df0c9a9d48e437486b60c6daa53ead3 (diff)
downloadgcc-4934454bed73a1a770ae7d4cf9b16df9c8c7a720.zip
gcc-4934454bed73a1a770ae7d4cf9b16df9c8c7a720.tar.gz
gcc-4934454bed73a1a770ae7d4cf9b16df9c8c7a720.tar.bz2
tree-vect-transform.c (vect_get_vec_defs_for_stmt_copy): check if the VEC is not NULL.
* tree-vect-transform.c (vect_get_vec_defs_for_stmt_copy): check if the VEC is not NULL. (vectorizable_type_demotion, vectorizable_type_promotion): Check that get_vectype_for_scalar_type succeeded. (vectorizable_conversion): Likewise. From-SVN: r128514
-rw-r--r--gcc/ChangeLog8
-rw-r--r--gcc/testsuite/ChangeLog4
-rw-r--r--gcc/testsuite/gcc.dg/vect/pr33373b.c8
-rw-r--r--gcc/tree-vect-transform.c14
4 files changed, 33 insertions, 1 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 991f078..71a8ad9 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,11 @@
+2007-09-15 Dorit Nuzman <dorit@il.ibm.com>
+
+ * tree-vect-transform.c (vect_get_vec_defs_for_stmt_copy): check if
+ the VEC is not NULL.
+ (vectorizable_type_demotion, vectorizable_type_promotion): Check that
+ get_vectype_for_scalar_type succeeded.
+ (vectorizable_conversion): Likewise.
+
2007-09-14 Jan Hubicka <jh@suse.cz>
* config/i386/i386.md (*floatdi<mode>2_i387): Guard against
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 884f3f9..073027f 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,7 @@
+2007-09-15 Dorit Nuzman <dorit@il.ibm.com>
+
+ * gcc.dg/vect/pr33373b.c: New test.
+
2007-09-14 Uros Bizjak <ubizjak@gmail.com>
PR target/33438
diff --git a/gcc/testsuite/gcc.dg/vect/pr33373b.c b/gcc/testsuite/gcc.dg/vect/pr33373b.c
new file mode 100644
index 0000000..c294a38
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/vect/pr33373b.c
@@ -0,0 +1,8 @@
+/* { dg-do compile } */
+void f (unsigned int *d, unsigned int *s, int w)
+{
+ int i;
+ for (i = 0; i < w; ++i)
+ d [i] = s [i] * (unsigned short) (~d [i] >> 24);
+}
+/* { dg-final { cleanup-tree-dump "vect" } } */
diff --git a/gcc/tree-vect-transform.c b/gcc/tree-vect-transform.c
index 5331fcd..df4bd08 100644
--- a/gcc/tree-vect-transform.c
+++ b/gcc/tree-vect-transform.c
@@ -1938,7 +1938,7 @@ vect_get_vec_defs_for_stmt_copy (enum vect_def_type *dt,
vec_oprnd = vect_get_vec_def_for_stmt_copy (dt[0], vec_oprnd);
VEC_quick_push (tree, *vec_oprnds0, vec_oprnd);
- if (vec_oprnds1)
+ if (vec_oprnds1 && *vec_oprnds1)
{
vec_oprnd = VEC_pop (tree, *vec_oprnds1);
vec_oprnd = vect_get_vec_def_for_stmt_copy (dt[1], vec_oprnd);
@@ -3309,11 +3309,15 @@ vectorizable_conversion (tree stmt, block_stmt_iterator *bsi,
op0 = TREE_OPERAND (operation, 0);
rhs_type = TREE_TYPE (op0);
vectype_in = get_vectype_for_scalar_type (rhs_type);
+ if (!vectype_in)
+ return false;
nunits_in = TYPE_VECTOR_SUBPARTS (vectype_in);
scalar_dest = GIMPLE_STMT_OPERAND (stmt, 0);
lhs_type = TREE_TYPE (scalar_dest);
vectype_out = get_vectype_for_scalar_type (lhs_type);
+ if (!vectype_out)
+ return false;
nunits_out = TYPE_VECTOR_SUBPARTS (vectype_out);
/* FORNOW */
@@ -4083,10 +4087,14 @@ vectorizable_type_demotion (tree stmt, block_stmt_iterator *bsi,
op0 = TREE_OPERAND (operation, 0);
vectype_in = get_vectype_for_scalar_type (TREE_TYPE (op0));
+ if (!vectype_in)
+ return false;
nunits_in = TYPE_VECTOR_SUBPARTS (vectype_in);
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_in != nunits_out / 2) /* FORNOW */
return false;
@@ -4241,10 +4249,14 @@ vectorizable_type_promotion (tree stmt, block_stmt_iterator *bsi,
op0 = TREE_OPERAND (operation, 0);
vectype_in = get_vectype_for_scalar_type (TREE_TYPE (op0));
+ if (!vectype_in)
+ return false;
nunits_in = TYPE_VECTOR_SUBPARTS (vectype_in);
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 / 2) /* FORNOW */
return false;