S/390: PR79893: Add diagnostics vec_load_bndry builtin.
authorAndreas Krebbel <krebbel@linux.vnet.ibm.com>
Fri, 24 Mar 2017 13:51:32 +0000 (13:51 +0000)
committerAndreas Krebbel <krebbel@gcc.gnu.org>
Fri, 24 Mar 2017 13:51:32 +0000 (13:51 +0000)
The boundary argument of the vec_load_bndry builtin needs to be
rewritten.  At that point it must be constant already.  The current
diagnostics in s390_expand_builtins is too late for this.  The patch
adds an additional check for that builtin which will be triggered
already during preprocessing.

Regression tested on s390x.

gcc/testsuite/ChangeLog:

2017-03-24  Andreas Krebbel  <krebbel@linux.vnet.ibm.com>

PR target/79893
* gcc.target/s390/zvector/pr79893.c: New test.

gcc/ChangeLog:

2017-03-24  Andreas Krebbel  <krebbel@linux.vnet.ibm.com>

PR target/79893
* config/s390/s390-c.c (s390_adjust_builtin_arglist): Issue an
error if the boundary argument is not constant.

From-SVN: r246442

gcc/ChangeLog
gcc/config/s390/s390-c.c
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.target/s390/zvector/pr79893.c [new file with mode: 0644]

index 12525c649534d000906ecfece2ff8f9750443d7d..e3fcfbe0a4fe391d1183ccae1c1f6609f3216866 100644 (file)
@@ -1,3 +1,9 @@
+2017-03-24  Andreas Krebbel  <krebbel@linux.vnet.ibm.com>
+
+       PR target/79893
+       * config/s390/s390-c.c (s390_adjust_builtin_arglist): Issue an
+       error if the boundary argument is not constant.
+
 2017-03-24  Jakub Jelinek  <jakub@redhat.com>
 
        PR rtl-optimization/80112
index 8cdac7e6e7c01f0174610daa135b0a90f8e36941..0521e1eeb55ede4099f2c8d36299b3da8aeab447 100644 (file)
@@ -673,10 +673,18 @@ s390_adjust_builtin_arglist (unsigned int ob_fcode, tree decl,
        case S390_OVERLOADED_BUILTIN_s390_vec_load_bndry:
          {
            int code;
-
            if (dest_arg_index == 1)
              {
-               switch (tree_to_uhwi ((**arglist)[src_arg_index]))
+               tree arg = (**arglist)[src_arg_index];
+
+               if (TREE_CODE (arg) != INTEGER_CST)
+                 {
+                   error ("constant value required for builtin %qF argument %d",
+                          decl, src_arg_index + 1);
+                   return;
+                 }
+
+               switch (tree_to_uhwi (arg))
                  {
                  case 64: code = 0; break;
                  case 128: code = 1; break;
index a53ffefb6e36734989a64abab042542cff220d16..96eedbd2cee5e2234cc8450628558b769d60fd97 100644 (file)
@@ -1,3 +1,8 @@
+2017-03-24  Andreas Krebbel  <krebbel@linux.vnet.ibm.com>
+
+       PR target/79893
+       * gcc.target/s390/zvector/pr79893.c: New test.
+
 2017-03-24  Jakub Jelinek  <jakub@redhat.com>
 
        PR rtl-optimization/80112
diff --git a/gcc/testsuite/gcc.target/s390/zvector/pr79893.c b/gcc/testsuite/gcc.target/s390/zvector/pr79893.c
new file mode 100644 (file)
index 0000000..ad6ca30
--- /dev/null
@@ -0,0 +1,9 @@
+/* { dg-do compile { target { s390*-*-* } } } */
+/* { dg-options "-march=z13 -mzarch -mzvector" } */
+
+#include <vecintrin.h>
+
+void
+foo(signed char *p, int i) {
+  vec_load_bndry(p, i); /* { dg-error "constant value required for builtin.*2" } */
+}