OSDN Git Service

Backport the fix for PR tree-optimization/49536 from mainline.
authorbaldrick <baldrick@138bc75d-0d04-0410-961f-82ee72b054a4>
Fri, 10 Feb 2012 12:34:17 +0000 (12:34 +0000)
committerbaldrick <baldrick@138bc75d-0d04-0410-961f-82ee72b054a4>
Fri, 10 Feb 2012 12:34:17 +0000 (12:34 +0000)
Patch by Jack Howarth, approved by Richard Guenther.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/branches/gcc-4_6-branch@184090 138bc75d-0d04-0410-961f-82ee72b054a4

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

index 6540af7..36afb42 100644 (file)
@@ -1,3 +1,13 @@
+2012-02-09  Jack Howarth  <howarth@bromo.med.uc.edu>
+
+       Backported from mainline
+       2011-06-27  Richard Guenther  <rguenther@suse.de>
+
+       PR tree-optimization/49536
+       * tree-vect-stmts.c (get_vectype_for_scalar_type_and_size):
+       For non-scalar inner types use a scalar type according to
+       the scalar inner mode.
+
 2012-02-09  Jakub Jelinek  <jakub@redhat.com>
 
        Backported from mainline
index ee34929..b5ecd3f 100644 (file)
@@ -5117,6 +5117,15 @@ get_vectype_for_scalar_type_and_size (tree scalar_type, unsigned size)
       && GET_MODE_CLASS (inner_mode) != MODE_FLOAT)
     return NULL_TREE;
 
+  /* We shouldn't end up building VECTOR_TYPEs of non-scalar components.
+     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))
+    scalar_type = lang_hooks.types.type_for_mode (inner_mode, 1);
+
   /* If no size was supplied use the mode the target prefers.   Otherwise
      lookup a vector mode of the specified size.  */
   if (size == 0)