Arm: Add support for auto-vectorization using HF mode.
authorTamar Christina <tamar.christina@arm.com>
Sun, 13 Dec 2020 13:56:30 +0000 (13:56 +0000)
committerTamar Christina <tamar.christina@arm.com>
Sun, 13 Dec 2020 14:10:07 +0000 (14:10 +0000)
This adds support to the auto-vectorizer to support HFmode vectorization for
AArch32.  This is supported when +fp16 is used.  I wonder if I should disable
the returning of the type if the option isn't enabled.

At the moment it will be returned but the vectorizer will try and fail to use
it.  It wastes a few compile cycles but doesn't result in bad code.

gcc/ChangeLog:

* config/arm/arm.c (arm_preferred_simd_mode): Add E_HFmode.

gcc/testsuite/ChangeLog:

* gcc.target/arm/vect-half-floats.c: New test.

gcc/config/arm/arm.c
gcc/testsuite/gcc.target/arm/vect-half-floats.c [new file with mode: 0644]

index 2f0ef3b0d3c7c88f8312a6a06910135cb905fd3e..7115c0a4a1f955c29c3ce6bfb4196f856565b567 100644 (file)
@@ -29130,6 +29130,8 @@ arm_preferred_simd_mode (scalar_mode mode)
   if (TARGET_NEON)
     switch (mode)
       {
+      case E_HFmode:
+       return TARGET_NEON_VECTORIZE_DOUBLE ? V4HFmode : V8HFmode;
       case E_SFmode:
        return TARGET_NEON_VECTORIZE_DOUBLE ? V2SFmode : V4SFmode;
       case E_SImode:
diff --git a/gcc/testsuite/gcc.target/arm/vect-half-floats.c b/gcc/testsuite/gcc.target/arm/vect-half-floats.c
new file mode 100644 (file)
index 0000000..ebfe7f9
--- /dev/null
@@ -0,0 +1,14 @@
+/* { dg-do compile }  */
+/* { dg-require-effective-target target_float16 } */ 
+/* { dg-require-effective-target arm_fp16_ok } */
+/* { dg-add-options for_float16 } */
+/* { dg-additional-options "-Ofast -ftree-vectorize -fdump-tree-vect-all -std=c11" } */
+
+void foo (_Float16 n1[], _Float16 n2[], _Float16 r[], int n)
+{
+  for (int i = 0; i < n; i++)
+   r[i] = n1[i] + n2[i];
+}
+
+/* { dg-final { scan-tree-dump-not "LOOP VECTORIZED" "vect" } } */
+