On Thu, Mar 13, 2025 at 05:10:07PM +0000, Andre Vieira (lists) wrote:
> Apologies for the delay, had been waiting on some other relevant patches to
> go in to make sure we didn't break any valid existing behaviours. It should
> all be working properly now. I think I've also addressed all your comments.
> Most notable change is that it now uses the 'sorry' mechanism.
>
> Bootstrapped and regression tested on aarch64-none-linux-gnu.
>
>
> aarch64: remove SVE2 requirement from SME and diagnose it as unsupported
I find this line hard to understand, but I struggled to find a better wording
when you posted the first version. I think something better would be:
aarch64: Remove +sme -> +sve2 feature flag dependency
We don't yet support SME without SVE2, so bail out with a 'sorry' if we
encounter this configuration.
> As per the AArch64 ISA FEAT_SME does not require FEAT_SVE2, so we are
> removing
> that false dependency in GCC. However, we chose for now to not support this
> combination of features and will diagnose the combination of FEAT_SME
> without
> FEAT_SVE2 as unsupported by GCC. We may choose to support this in the
> future.
...
> diff --git a/gcc/config/aarch64/aarch64-option-extensions.def
> b/gcc/config/aarch64/aarch64-option-extensions.def
> index
> aa8d315c240fbd25b49008b131cc09f04001eb80..8603836de01588b8db417289f842f911567288ea
> 100644
> --- a/gcc/config/aarch64/aarch64-option-extensions.def
> +++ b/gcc/config/aarch64/aarch64-option-extensions.def
> @@ -207,7 +207,7 @@ AARCH64_FMV_FEATURE("sve2-sm4", SVE_SM4, (SVE2_SM4))
>
> AARCH64_OPT_EXTENSION("sve2p1", SVE2p1, (SVE2), (), (), "sve2p1")
>
> -AARCH64_OPT_FMV_EXTENSION("sme", SME, (BF16, SVE2), (), (), "sme")
> +AARCH64_OPT_FMV_EXTENSION("sme", SME, (BF16, FCMA, F16FML), (), (), "sme")
Have you deliberately changed other dependenciesi? As well as removing SVE and
SVE2 from +sme, this would also remove FP16 and add F16FML (which does
nothing by itself if FP16 isn't also enabled).
>
> AARCH64_OPT_EXTENSION("memtag", MEMTAG, (), (), (), "")
>
> diff --git a/gcc/config/aarch64/aarch64.cc b/gcc/config/aarch64/aarch64.cc
> index
> 36b65df50c57267d9c18e430665c411f1bf3cc24..c9f37bd70cbccef70f383f873c97b2be58c938dc
> 100644
> --- a/gcc/config/aarch64/aarch64.cc
> +++ b/gcc/config/aarch64/aarch64.cc
> @@ -18886,6 +18886,9 @@ aarch64_override_options_internal (struct gcc_options
> *opts)
> SET_OPTION_IF_UNSET (opts, &global_options_set,
> param_fully_pipelined_fma,
> 1);
>
> + if (TARGET_SME && !TARGET_SVE2)
> + sorry ("no support for %qs without %qs", "sme", "sve2");
> +
> aarch64_override_options_after_change_1 (opts);
> }
>
> diff --git a/gcc/doc/invoke.texi b/gcc/doc/invoke.texi
> index
> 4fbb4cda101ebd14891a3ad80aa5b1bc069b45c6..3754e468a05b3ae554b71adb4cf60068d5249507
> 100644
> --- a/gcc/doc/invoke.texi
> +++ b/gcc/doc/invoke.texi
> @@ -22068,7 +22068,8 @@ Enable the Pointer Authentication Extension.
> @item cssc
> Enable the Common Short Sequence Compression instructions.
> @item sme
> -Enable the Scalable Matrix Extension.
> +Enable the Scalable Matrix Extension. This can only be used with the sve2
> +extension.
How about "This is only supported when SVE2 is also enabled"? I think that
would make it clearer that it's a lack of (gcc) support, not a fundamental
requirement.
> @item sme-i16i64
> Enable the FEAT_SME_I16I64 extension to SME. This also enables SME
> instructions.