Hi,

This patch adds a --param=autovec-mode=<MODE_NAME>.  When the param is
specified we make autovectorize_vector_modes return exactly this mode if
it is available.  This helps when testing different vectorizer settings.

Regtested on rv64gcv_zvl512b.

Regards
Robin

gcc/ChangeLog:

        * config/riscv/riscv-v.cc (autovectorize_vector_modes): Return
        user-specified mode if available.
        * config/riscv/riscv.opt: New param.
---
gcc/config/riscv/riscv-v.cc | 20 ++++++++++++++++++++
gcc/config/riscv/riscv.opt  |  4 ++++
2 files changed, 24 insertions(+)

diff --git a/gcc/config/riscv/riscv-v.cc b/gcc/config/riscv/riscv-v.cc
index 1b5ef51886e..a7f2f0a4abe 100644
--- a/gcc/config/riscv/riscv-v.cc
+++ b/gcc/config/riscv/riscv-v.cc
@@ -2821,6 +2821,26 @@ autovectorize_vector_modes (vector_modes *modes, bool)
        i++;
        size = base_size / (1U << i);
     }
+
+  /* If the user specified the exact mode to use look if it is available and
+     remove all other ones before returning.  */
+  if (riscv_autovec_mode)
+    {
+      auto_vector_modes ms;
+      ms.safe_splice (*modes);
+      modes->truncate (0);
+
+      for (machine_mode mode : ms)
+       {
+         if (!strcmp (GET_MODE_NAME (mode), riscv_autovec_mode))
+           {
+             modes->safe_push (mode);
+             return 0;
+           }
+       }
+      return 0;
+    }
+
  /* Enable LOOP_VINFO comparison in COST model.  */
  return VECT_COMPARE_COSTS;
}
diff --git a/gcc/config/riscv/riscv.opt b/gcc/config/riscv/riscv.opt
index 527e09549a8..5b6dbc6bb4e 100644
--- a/gcc/config/riscv/riscv.opt
+++ b/gcc/config/riscv/riscv.opt
@@ -286,6 +286,10 @@ Max number of bytes to compare as part of inlined 
strcmp/strncmp routines (defau
Target RejectNegative Joined UInteger Var(gpr2vr_cost) 
Init(GPR2VR_COST_UNPROVIDED)
Set the cost value of the rvv instruction when operate from GPR to VR.

+-param=autovec-mode=
+Target Undocumented RejectNegative Joined Var(riscv_autovec_mode) Save
+Set the only autovec mode to try.
+
Enum
Name(rvv_max_lmul) Type(enum rvv_max_lmul_enum)
The RVV possible LMUL (-mrvv-max-lmul=):
--
2.49.0

Reply via email to