aboutsummaryrefslogtreecommitdiff
path: root/gcc/tree-vect-transform.c
diff options
context:
space:
mode:
authorUros Bizjak <ubizjak@gmail.com>2007-10-12 10:37:17 +0200
committerUros Bizjak <uros@gcc.gnu.org>2007-10-12 10:37:17 +0200
commit6d3bf8498df74204a3cb0a74481634313d892fd6 (patch)
tree9b3315ec9294785693c2e914f816a352e4806dfc /gcc/tree-vect-transform.c
parent900461f31ff4f7678b6818b8719b7db7e5f44951 (diff)
downloadgcc-6d3bf8498df74204a3cb0a74481634313d892fd6.zip
gcc-6d3bf8498df74204a3cb0a74481634313d892fd6.tar.gz
gcc-6d3bf8498df74204a3cb0a74481634313d892fd6.tar.bz2
re PR tree-optimization/33742 (Segfault in vectorizable_operation)
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
Diffstat (limited to 'gcc/tree-vect-transform.c')
-rw-r--r--gcc/tree-vect-transform.c6
1 files changed, 6 insertions, 0 deletions
diff --git a/gcc/tree-vect-transform.c b/gcc/tree-vect-transform.c
index f02d912..423ae65 100644
--- a/gcc/tree-vect-transform.c
+++ b/gcc/tree-vect-transform.c
@@ -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;