Require equal type sizes for vectorised calls
authorRichard Sandiford <richard.sandiford@arm.com>
Thu, 14 Nov 2019 15:09:24 +0000 (15:09 +0000)
committerRichard Sandiford <rsandifo@gcc.gnu.org>
Thu, 14 Nov 2019 15:09:24 +0000 (15:09 +0000)
As explained in the comment, vectorizable_call needs more work to
support mixtures of sizes.  This avoids testsuite fallout for
later SVE patches.

2019-11-14  Richard Sandiford  <richard.sandiford@arm.com>

gcc/
* tree-vect-stmts.c (vectorizable_call): Require the types
to have the same size.

From-SVN: r278239

gcc/ChangeLog
gcc/tree-vect-stmts.c

index 28baebee3b76f0ed909538c7bef088937630c67e..41c94140b1a4bfdedc4bd4e01a17b4a4f662f390 100644 (file)
@@ -1,3 +1,8 @@
+2019-11-14  Richard Sandiford  <richard.sandiford@arm.com>
+
+       * tree-vect-stmts.c (vectorizable_call): Require the types
+       to have the same size.
+
 2019-11-14  Richard Sandiford  <richard.sandiford@arm.com>
 
        * tree-vect-stmts.c (vectorizable_call): If an operand is
index b7fff7822773d1c3917add8c27da3c11738cb9ae..80f59accad70f0d0c9c3c293b729933a39a16f18 100644 (file)
@@ -3309,6 +3309,19 @@ vectorizable_call (stmt_vec_info stmt_info, gimple_stmt_iterator *gsi,
 
       return false;
     }
+  /* FORNOW: we don't yet support mixtures of vector sizes for calls,
+     just mixtures of nunits.  E.g. DI->SI versions of __builtin_ctz*
+     are traditionally vectorized as two VnDI->VnDI IFN_CTZs followed
+     by a pack of the two vectors into an SI vector.  We would need
+     separate code to handle direct VnDI->VnSI IFN_CTZs.  */
+  if (TYPE_SIZE (vectype_in) != TYPE_SIZE (vectype_out))
+    {
+      if (dump_enabled_p ())
+       dump_printf_loc (MSG_MISSED_OPTIMIZATION, vect_location,
+                        "mismatched vector sizes %T and %T\n",
+                        vectype_in, vectype_out);
+      return false;
+    }
 
   /* FORNOW */
   nunits_in = TYPE_VECTOR_SUBPARTS (vectype_in);