Tamar Christina <[email protected]> writes:
> As requested in my patch for -mmax-vectorization this promotes the parameter
> --param aarch64-autovec-preference to a first class top target flag.
>
> If both the parameter and the flag is specified the parameter takes precedence
> with the reasoning that it may already be embedded in build systems.
>
> Bootstrapped Regtested on aarch64-none-linux-gnu and no issues.
>
> Ok for master?
>
> Thanks,
> Tamar
>
> gcc/ChangeLog:
>
> * config/aarch64/aarch64.cc (aarch64_override_options_internal): Set
> value of parameter based on option.
> * config/aarch64/aarch64.opt (autovec-preference): New.
> * doc/invoke.texi (autovec-preference): Document it.
>
> gcc/testsuite/ChangeLog:
>
> * gcc.target/aarch64/autovec_param_asimd-only_2.c: New test.
> * gcc.target/aarch64/autovec_param_default_2.c: New test.
> * gcc.target/aarch64/autovec_param_prefer-asimd_2.c: New test.
> * gcc.target/aarch64/autovec_param_prefer-sve_2.c: New test.
> * gcc.target/aarch64/autovec_param_sve-only_2.c: New test.
Thanks for doing this. I'm in favour, but on the documentation:
> diff --git a/gcc/config/aarch64/aarch64.opt b/gcc/config/aarch64/aarch64.opt
> index
> 2725c50da64a2c05489ea6202bdd5eedf1ba7e27..4dfd9b5c73011c73fcf8a39ad719ee9ca765297b
> 100644
> --- a/gcc/config/aarch64/aarch64.opt
> +++ b/gcc/config/aarch64/aarch64.opt
> @@ -290,6 +290,13 @@ msve-vector-bits=
> Target RejectNegative Joined Enum(sve_vector_bits)
> Var(aarch64_sve_vector_bits) Init(SVE_SCALABLE)
> -msve-vector-bits=<number> Set the number of bits in an SVE vector
> register.
>
> +mautovec-preference=
> +Target RejectNegative Joined Undocumented Var(autovec_preference)
> Enum(aarch64_autovec_preference) Init(AARCH64_AUTOVEC_DEFAULT)
> +-mautovec-preference=[default|asimd-only|sve-only|prefer-asimd|prefer-sve]
> +Force an ISA selection strategy for auto-vectorization. If both
> +-mautovec-preference and --param aarch64_autovec-preference are set then the
> +param value will be used.
> +
> mmax-vectorization
> Target Undocumented Var(flag_aarch64_max_vectorization) Save
> Override the scalar cost model such that vectorization is always profitable.
> diff --git a/gcc/doc/invoke.texi b/gcc/doc/invoke.texi
> index
> 54d4cf88cccd4d0e4ede3442ad9907faac325d52..88a93f9bc76687c415e0cce4c3431f1d91194dfc
> 100644
> --- a/gcc/doc/invoke.texi
> +++ b/gcc/doc/invoke.texi
> @@ -21992,6 +21992,12 @@ precise control over which ISA will be used for
> auto-vectorization. Unlike
> -fno-vect-cost-model or -fvect-cost-model=unlimited this option does not turn
> off cost comparison between different vector modes.
>
> +@item -mautovec-preference=@var{name}
> +-mautovec-preference=[default|asimd-only|sve-only|prefer-asimd|prefer-sve]
> +Force an ISA selection strategy for auto-vectorization. If both
> +-mautovec-preference and --param aarch64_autovec-preference are set then the
> +param value will be used.
> +
> @opindex march
> @item -march=@var{name}
> Specify the name of the target architecture and, optionally, one or
--params are supposed to be internal developer flags that could go away
at any time. So now that we have the user-facing flag, I think we should
move the detailed documentation of @var{name} from the --param documentation
to the -m option, and instead make the --param documentation reference the
-m option.
So something like:
--------------------------------------------------------------------------
@item -mautovec-preference=@var{name}
Force an ISA selection strategy for auto-vectorization. The possible
values of @var{name} are:
@table @samp
@item default
Use the default heuristics.
@item asimd-only
Use only Advanced SIMD for auto-vectorization.
@item sve-only
Use only SVE for auto-vectorization.
@item prefer-asimd
Use both Advanced SIMD and SVE. Prefer Advanced SIMD when the costs are
deemed equal.
@item prefer-sve
Use both Advanced SIMD and SVE. Prefer SVE when the costs are deemed equal.
@end table
...
@item aarch64-autovec-preference
An old alias for @option{-mautovec-preference}. If both
@option{-mautovec-preference} and @option{--param=aarch64_autovec-preference}
are passed, the @option{--param} value will be used.
--------------------------------------------------------------------------
(with the -m option deliberately not mentioning the --param)
Same idea for the .opt documentation.
Richard