targhooks.c (default_get_mask_mode): Use BLKmode in case target doesn't support requi...
authorIlya Enkovich <enkovich.gnu@gmail.com>
Thu, 5 Nov 2015 09:46:10 +0000 (09:46 +0000)
committerIlya Enkovich <ienkovich@gcc.gnu.org>
Thu, 5 Nov 2015 09:46:10 +0000 (09:46 +0000)
gcc/

2015-10-29  Ilya Enkovich  <enkovich.gnu@gmail.com>

* targhooks.c (default_get_mask_mode): Use BLKmode in
case target doesn't support required vector mode.
* stor-layout.c (layout_type); Check for BLKmode.

From-SVN: r229794

gcc/ChangeLog
gcc/stor-layout.c
gcc/targhooks.c

index 99ad1589cabbad007790a53f1cd91b1ffe2c1f63..2e58c51ad70f7fad023864e1988ec11cdfb2d425 100644 (file)
@@ -1,3 +1,9 @@
+2015-11-05  Ilya Enkovich  <enkovich.gnu@gmail.com>
+
+       * targhooks.c (default_get_mask_mode): Use BLKmode in
+       case target doesn't support required vector mode.
+       * stor-layout.c (layout_type); Check for BLKmode.
+
 2015-11-04  Aditya Kumar  <aditya.k7@samsung.com>
            Sebastian Pop  <s.pop@samsung.com>
 
index 2e258ce987ebb74ec1f3b07617c572e419512334..364a0b5454bded3cd665292fc6437a585e735f5e 100644 (file)
@@ -2174,7 +2174,8 @@ layout_type (tree type)
        TYPE_SATURATING (type) = TYPE_SATURATING (TREE_TYPE (type));
         TYPE_UNSIGNED (type) = TYPE_UNSIGNED (TREE_TYPE (type));
        /* Several boolean vector elements may fit in a single unit.  */
-       if (VECTOR_BOOLEAN_TYPE_P (type))
+       if (VECTOR_BOOLEAN_TYPE_P (type)
+           && type->type_common.mode != BLKmode)
          TYPE_SIZE_UNIT (type)
            = size_int (GET_MODE_SIZE (type->type_common.mode));
        else
index 6deb7b1e3a0ade6e43434536908d8a9e54b8f65f..14324b7addc0ec5e35209952ae0ee4db57a25e2d 100644 (file)
@@ -1087,10 +1087,16 @@ default_get_mask_mode (unsigned nunits, unsigned vector_size)
   unsigned elem_size = vector_size / nunits;
   machine_mode elem_mode
     = smallest_mode_for_size (elem_size * BITS_PER_UNIT, MODE_INT);
+  machine_mode vector_mode;
 
   gcc_assert (elem_size * nunits == vector_size);
 
-  return mode_for_vector (elem_mode, nunits);
+  vector_mode = mode_for_vector (elem_mode, nunits);
+  if (VECTOR_MODE_P (vector_mode)
+      && !targetm.vector_mode_supported_p (vector_mode))
+    vector_mode = BLKmode;
+
+  return vector_mode;
 }
 
 /* By default, the cost model accumulates three separate costs (prologue,