The following makes it correctly reject them,
vectorizable_simd_clone_call is solely responsible for them.

Bootstrap and regtest running on x86_64-unknown-linux-gnu, will
push if that succeeds.  I might have misunderstood sth, but then
hopefully test coverage will put me right.

        PR tree-optimization/121130
        * tree-vect-stmts.cc (vectorizable_call): Bail out for
        .MASK_CALL.

        * gcc.dg/vect/vect-simd-pr121130.c: New testcase.
---
 gcc/testsuite/gcc.dg/vect/vect-simd-pr121130.c | 11 +++++++++++
 gcc/tree-vect-stmts.cc                         |  8 +++++++-
 2 files changed, 18 insertions(+), 1 deletion(-)
 create mode 100644 gcc/testsuite/gcc.dg/vect/vect-simd-pr121130.c

diff --git a/gcc/testsuite/gcc.dg/vect/vect-simd-pr121130.c 
b/gcc/testsuite/gcc.dg/vect/vect-simd-pr121130.c
new file mode 100644
index 00000000000..c882dedd8be
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/vect/vect-simd-pr121130.c
@@ -0,0 +1,11 @@
+/* { dg-do compile } */
+
+int n2;
+
+__attribute__((simd)) char
+w7(void)
+{
+  short int xb = n2;
+    xb = w7() < 1;
+  return xb;
+}
diff --git a/gcc/tree-vect-stmts.cc b/gcc/tree-vect-stmts.cc
index 4ce407bd563..990305dc3ac 100644
--- a/gcc/tree-vect-stmts.cc
+++ b/gcc/tree-vect-stmts.cc
@@ -3304,7 +3304,13 @@ vectorizable_call (vec_info *vinfo,
 
   int mask_opno = -1;
   if (internal_fn_p (cfn))
-    mask_opno = internal_fn_mask_index (as_internal_fn (cfn));
+    {
+      /* We can only handle direct internal masked calls here,
+        vectorizable_simd_clone_call is for the rest.  */
+      if (cfn == CFN_MASK_CALL)
+       return false;
+      mask_opno = internal_fn_mask_index (as_internal_fn (cfn));
+    }
 
   for (i = 0; i < nargs; i++)
     {
-- 
2.43.0

Reply via email to