]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
re PR tree-optimization/54976 (FAIL: gcc.dg/torture/pr47975.c (internal compiler...
authorRichard Biener <rguenther@suse.de>
Fri, 19 Oct 2012 10:32:29 +0000 (10:32 +0000)
committerRichard Biener <rguenth@gcc.gnu.org>
Fri, 19 Oct 2012 10:32:29 +0000 (10:32 +0000)
2012-10-19  Richard Biener  <rguenther@suse.de>

PR tree-optimization/54976
* tree-vect-stmts.c (get_vectype_for_scalar_type_and_size):
Robustify against odd inner_mode inputs.

From-SVN: r192611

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

index cdba3366b0098dcd341e921c7836a3e057432c82..3741614ea83ab4161ee514d674aa5d2e423742f4 100644 (file)
@@ -1,3 +1,9 @@
+2012-10-19  Richard Biener  <rguenther@suse.de>
+
+       PR tree-optimization/54976
+       * tree-vect-stmts.c (get_vectype_for_scalar_type_and_size):
+       Robustify against odd inner_mode inputs.
+
 2012-10-19  Zhenqiang Chen <zhenqiang.chen@linaro.org>
 
        PR target/54892
index 70bcebbe99bd6bfe757f0a49dd8cc4735337e02a..09c85967d4327657aaa01f36413944ead10194c0 100644 (file)
@@ -6082,16 +6082,21 @@ get_vectype_for_scalar_type_and_size (tree scalar_type, unsigned size)
      When the component mode passes the above test simply use a type
      corresponding to that mode.  The theory is that any use that
      would cause problems with this will disable vectorization anyway.  */
-  if (!SCALAR_FLOAT_TYPE_P (scalar_type)
-      && !INTEGRAL_TYPE_P (scalar_type)
-      && !POINTER_TYPE_P (scalar_type))
+  else if (!SCALAR_FLOAT_TYPE_P (scalar_type)
+          && !INTEGRAL_TYPE_P (scalar_type)
+          && !POINTER_TYPE_P (scalar_type))
     scalar_type = lang_hooks.types.type_for_mode (inner_mode, 1);
 
   /* We can't build a vector type of elements with alignment bigger than
      their size.  */
-  if (nbytes < TYPE_ALIGN_UNIT (scalar_type))
+  else if (nbytes < TYPE_ALIGN_UNIT (scalar_type))
     scalar_type = lang_hooks.types.type_for_mode (inner_mode, 1);
 
+  /* If we felt back to using the mode fail if there was
+     no scalar type for it.  */
+  if (scalar_type == NULL_TREE)
+    return NULL_TREE;
+
   /* If no size was supplied use the mode the target prefers.   Otherwise
      lookup a vector mode of the specified size.  */
   if (size == 0)