Fix ICE in vectorizable_store ().
authorKirill Yukhin <kirill.yukhin@intel.com>
Tue, 19 Jan 2016 14:37:23 +0000 (14:37 +0000)
committerKirill Yukhin <kyukhin@gcc.gnu.org>
Tue, 19 Jan 2016 14:37:23 +0000 (14:37 +0000)
gcc/
* tree-vect-stmts.c (vectorizable_store): Check
rhs vectype.

From-SVN: r232568

gcc/ChangeLog
gcc/tree-vect-stmts.c

index 56890c1..9687f3f 100644 (file)
@@ -1,3 +1,8 @@
+2016-01-19  Kirill Yukhin  <kirill.yukhin@intel.com>
+
+       * tree-vect-stmts.c (vectorizable_store): Check
+       rhs vectype.
+
 2016-01-19  David Malcolm  <dmalcolm@redhat.com>
 
        PR jit/68446
index 635c797..6be3c97 100644 (file)
@@ -5282,7 +5282,7 @@ vectorizable_store (gimple *stmt, gimple_stmt_iterator *gsi, gimple **vec_stmt,
 
   gcc_assert (gimple_assign_single_p (stmt));
 
-  tree vectype = STMT_VINFO_VECTYPE (stmt_info);
+  tree vectype = STMT_VINFO_VECTYPE (stmt_info), rhs_vectype = NULL_TREE;
   unsigned int nunits = TYPE_VECTOR_SUBPARTS (vectype);
 
   if (loop_vinfo)
@@ -5308,7 +5308,8 @@ vectorizable_store (gimple *stmt, gimple_stmt_iterator *gsi, gimple **vec_stmt,
     }
 
   op = gimple_assign_rhs1 (stmt);
-  if (!vect_is_simple_use (op, vinfo, &def_stmt, &dt))
+
+  if (!vect_is_simple_use (op, vinfo, &def_stmt, &dt, &rhs_vectype))
     {
       if (dump_enabled_p ())
         dump_printf_loc (MSG_MISSED_OPTIMIZATION, vect_location,
@@ -5316,6 +5317,9 @@ vectorizable_store (gimple *stmt, gimple_stmt_iterator *gsi, gimple **vec_stmt,
       return false;
     }
 
+  if (rhs_vectype && !useless_type_conversion_p (vectype, rhs_vectype))
+    return false;
+
   elem_type = TREE_TYPE (vectype);
   vec_mode = TYPE_MODE (vectype);