Allows forcing the autovec mode for testing and debugging purposes.
gcc/ChangeLog:
* config/aarch64/aarch64.cc (aarch64_autovectorize_vector_modes):
All logic to only use aarch64-autovec-mode when specified.
* config/aarch64/aarch64.opt: Add --param=aarch64-autovec-mode.
* doc/params.texi: Document --param=aarch64-autovec-mode.
---
gcc/config/aarch64/aarch64.cc | 6 ++++++
gcc/config/aarch64/aarch64.opt | 34 ++++++++++++++++++++++++++++++++++
gcc/doc/params.texi | 4 ++++
3 files changed, 44 insertions(+)
diff --git a/gcc/config/aarch64/aarch64.cc b/gcc/config/aarch64/aarch64.cc
index 107271b0404..6693cec98bd 100644
--- a/gcc/config/aarch64/aarch64.cc
+++ b/gcc/config/aarch64/aarch64.cc
@@ -24187,6 +24187,12 @@ aarch64_autovectorize_vector_modes (vector_modes
*modes, bool)
V2SImode
};
+ if (aarch64_force_autovec_mode != VOIDmode)
+ {
+ modes->safe_push (aarch64_force_autovec_mode);
+ return 0;
+ }
+
/* Try using N-byte SVE modes only after trying N-byte Advanced SIMD mode.
This is because:
diff --git a/gcc/config/aarch64/aarch64.opt b/gcc/config/aarch64/aarch64.opt
index deccc6c8887..6f22e0e7326 100644
--- a/gcc/config/aarch64/aarch64.opt
+++ b/gcc/config/aarch64/aarch64.opt
@@ -406,6 +406,40 @@ Enum(aarch64_autovec_preference) String(prefer-asimd)
Value(AARCH64_AUTOVEC_PREF
EnumValue
Enum(aarch64_autovec_preference) String(prefer-sve)
Value(AARCH64_AUTOVEC_PREFER_SVE)
+-param=aarch64-autovec-mode=
+Target Joined Var(aarch64_force_autovec_mode) Enum(aarch64_autovec_mode)
Init(VOIDmode) Param
+Force a specific mode to be the only one considered for auto vectorization.
+
+If this is specified in addition to --param=aarch64-autovec-preference or
+-mautovec-preference then this takes priority.
+
+Enum
+Name(aarch64_autovec_mode) Type(machine_mode) UnknownError(unknown machine
mode %qs)
+
+EnumValue
+Enum(aarch64_autovec_mode) String(VNx16QI) Value(VNx16QImode)
+
+EnumValue
+Enum(aarch64_autovec_mode) String(VNx8QI) Value(VNx8QImode)
+
+EnumValue
+Enum(aarch64_autovec_mode) String(VNx4QI) Value(VNx4QImode)
+
+EnumValue
+Enum(aarch64_autovec_mode) String(VNx2QI) Value(VNx2QImode)
+
+EnumValue
+Enum(aarch64_autovec_mode) String(V16QI) Value(V16QImode)
+
+EnumValue
+Enum(aarch64_autovec_mode) String(V8QI) Value(V8QImode)
+
+EnumValue
+Enum(aarch64_autovec_mode) String(V4QI) Value(V4QImode)
+
+EnumValue
+Enum(aarch64_autovec_mode) String(V2QI) Value(V2QImode)
+
-param=aarch64-loop-vect-issue-rate-niters=
Target Joined UInteger Var(aarch64_loop_vect_issue_rate_niters) Init(6)
IntegerRange(0, 65536) Param
diff --git a/gcc/doc/params.texi b/gcc/doc/params.texi
index e69be2d2923..8d8e5926cb1 100644
--- a/gcc/doc/params.texi
+++ b/gcc/doc/params.texi
@@ -2027,6 +2027,10 @@ An old alias for @option{-mautovec-preference}. If both
@option{-mautovec-preference} and @option{--param=aarch64-autovec-preference}
are passed, the @option{--param} value is used.
+@paindex aarch64-autovec-mode
+@item aarch64-autovec-preference
+Force a specific mode to be the only one considered for auto vectorization.
+
@paindex aarch64-ldp-policy
@item aarch64-ldp-policy
Fine-grained policy for load pair (@code{stp}) instructions.
--
2.55.0