aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndreas Krebbel <krebbel@linux.vnet.ibm.com>2017-03-24 13:51:32 +0000
committerAndreas Krebbel <krebbel@gcc.gnu.org>2017-03-24 13:51:32 +0000
commitdc4f29bc9a9dfcc68b20c0ce767cc3d6fb7409d4 (patch)
treea8f580507132e9c6e96b398f2eb9e19b19cb2378
parent56010684160c394a1824909e2ac450a6da41db40 (diff)
downloadgcc-dc4f29bc9a9dfcc68b20c0ce767cc3d6fb7409d4.zip
gcc-dc4f29bc9a9dfcc68b20c0ce767cc3d6fb7409d4.tar.gz
gcc-dc4f29bc9a9dfcc68b20c0ce767cc3d6fb7409d4.tar.bz2
S/390: PR79893: Add diagnostics vec_load_bndry builtin.
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
-rw-r--r--gcc/ChangeLog6
-rw-r--r--gcc/config/s390/s390-c.c12
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/gcc.target/s390/zvector/pr79893.c9
4 files changed, 30 insertions, 2 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 12525c6..e3fcfbe 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -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
diff --git a/gcc/config/s390/s390-c.c b/gcc/config/s390/s390-c.c
index 8cdac7e..0521e1e 100644
--- a/gcc/config/s390/s390-c.c
+++ b/gcc/config/s390/s390-c.c
@@ -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;
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index a53ffef..96eedbd 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -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
index 0000000..ad6ca30
--- /dev/null
+++ b/gcc/testsuite/gcc.target/s390/zvector/pr79893.c
@@ -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" } */
+}