S/390: Don't use vgm for v1ti and v1tf.
authorAndreas Krebbel <krebbel@linux.vnet.ibm.com>
Thu, 10 Sep 2015 14:04:28 +0000 (14:04 +0000)
committerAndreas Krebbel <krebbel@gcc.gnu.org>
Thu, 10 Sep 2015 14:04:28 +0000 (14:04 +0000)
gcc/ChangeLog:

2015-09-10  Andreas Krebbel  <krebbel@linux.vnet.ibm.com>

* config/s390/s390.c (s390_contiguous_bitmask_vector_p): Reject if
the vector element is bigger than 64 bit.

gcc/testsuite/ChangeLog:

2015-09-10  Andreas Krebbel  <krebbel@linux.vnet.ibm.com>

* gcc.target/s390/vector/vec-genbytemask-1.c: Add check for V1TI
initialization with a byte mask.  No change expected here.
* gcc.target/s390/vector/vec-genmask-1.c: Fix whitespace.
* gcc.target/s390/vector/vec-genmask-2.c: Add check for V1TI
initialization with contigious bitmask.  Literal pool is expectd
to be used here.

From-SVN: r227637

gcc/ChangeLog
gcc/config/s390/s390.c
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.target/s390/vector/vec-genbytemask-1.c
gcc/testsuite/gcc.target/s390/vector/vec-genmask-1.c
gcc/testsuite/gcc.target/s390/vector/vec-genmask-2.c

index aff3fd976a2da3d1337ed276eeab5b8fa47bdc68..14e8f5eeee0db697c397746646ab205b970a85a3 100644 (file)
@@ -1,3 +1,8 @@
+2015-09-10  Andreas Krebbel  <krebbel@linux.vnet.ibm.com>
+
+       * config/s390/s390.c (s390_contiguous_bitmask_vector_p): Reject if
+       the vector element is bigger than 64 bit.
+
 2015-09-10  Andreas Krebbel  <krebbel@linux.vnet.ibm.com>
 
        * config/s390/vx-builtins.md ("vec_vmal<mode>", "vec_vmah<mode>")
index a6644434e5262f387554465de6aa4ccabe96aa69..d276ab21ab3c3aaeebd455e6e915335f5b445d60 100644 (file)
@@ -2265,6 +2265,11 @@ s390_contiguous_bitmask_vector_p (rtx op, int *start, int *end)
     return false;
 
   size = GET_MODE_UNIT_BITSIZE (GET_MODE (op));
+
+  /* We cannot deal with V1TI/V1TF. This would require a vgmq.  */
+  if (size > 64)
+    return false;
+
   mask = UINTVAL (elt);
   if (s390_contiguous_bitmask_p (mask, size, start,
                                 end != NULL ? &length : NULL))
index 2272a674c1b7376931f66fcaa7f8c1da96bdf121..aee33f62db009724236e4c8d4a04263144d1cd09 100644 (file)
@@ -1,3 +1,12 @@
+2015-09-10  Andreas Krebbel  <krebbel@linux.vnet.ibm.com>
+
+       * gcc.target/s390/vector/vec-genbytemask-1.c: Add check for V1TI
+       initialization with a byte mask.  No change expected here.
+       * gcc.target/s390/vector/vec-genmask-1.c: Fix whitespace.
+       * gcc.target/s390/vector/vec-genmask-2.c: Add check for V1TI
+       initialization with contigious bitmask.  Literal pool is expectd
+       to be used here.
+
 2015-09-10  Kyrylo Tkachov  <kyrylo.tkachov@arm.com>
 
        PR target/67439
index b8cf3140bd7e20efddea906f82370d606a34a556..26c189af15d0df6aa25caa9e54c1ab93ba100442 100644 (file)
@@ -1,11 +1,13 @@
 /* { dg-do run } */
 /* { dg-options "-O3 -mzarch -march=z13 --save-temps" } */
 /* { dg-require-effective-target vector } */
+/* { dg-require-effective-target int128 } */
 
 typedef unsigned char     uv16qi __attribute__((vector_size(16)));
 typedef unsigned short     uv8hi __attribute__((vector_size(16)));
 typedef unsigned int       uv4si __attribute__((vector_size(16)));
 typedef unsigned long long uv2di __attribute__((vector_size(16)));
+typedef unsigned __int128  uv1ti __attribute__((vector_size(16)));
 
 uv2di __attribute__((noinline))
 foo1 ()
@@ -45,6 +47,13 @@ foo4 ()
       0xff, 0, 0xff, 0,
       0, 0xff, 0, 0xff };
 }
+
+uv1ti __attribute__((noinline))
+foo5 ()
+{
+  return (uv1ti){ 0xff00ff00ff00ff00ULL };
+}
+
 /* { dg-final { scan-assembler-times "vgbm\t%v24,61605" 1 } } */
 
 int
@@ -64,6 +73,10 @@ main ()
 
   if (foo4()[1] != 0xff)
     __builtin_abort ();
+
+  if (foo5()[0] != 0xff00ff00ff00ff00ULL)
+    __builtin_abort ();
+
   return 0;
 }
 
index b0747f713bb1b70156c760d4c9ac6ded31f33b9b..6093422fd0d7ca5a496e70a12989d25fa461d188 100644 (file)
@@ -66,4 +66,3 @@ main ()
     __builtin_abort ();
   return 0;
 }
-
index e3ae34154cafe99de02a191b77e87c38cac4d041..46256e92531ea7c750e44baf74688e7b6d6bde14 100644 (file)
@@ -1,10 +1,12 @@
 /* { dg-do compile } */
 /* { dg-options "-O3 -mzarch -march=z13" } */
+/* { dg-require-effective-target int128 } */
 
 typedef unsigned char     uv16qi __attribute__((vector_size(16)));
 typedef unsigned short     uv8hi __attribute__((vector_size(16)));
 typedef unsigned int       uv4si __attribute__((vector_size(16)));
 typedef unsigned long long uv2di __attribute__((vector_size(16)));
+typedef unsigned __int128  uv1ti __attribute__((vector_size(16)));
 
 /* The elements differ.  */
 uv2di __attribute__((noinline))
@@ -43,4 +45,11 @@ foo4 ()
       0x82, 0x82, 0x82, 0x82,
       0x82, 0x82, 0x82, 0x82 };
 }
+
+/* We do not have vgmq.  */
+uv1ti
+foo5()
+{
+  return (uv1ti){ ((unsigned __int128)1 << 53) - 1 };
+}
 /* { dg-final { scan-assembler-not "vgm" } } */