Re: [PATCH v2 1/1] aarch64: Assume function's are non-streaming unless annotated [PR126133]

Alice Carlotti <[email protected]>
Newsgroups gmane.comp.gcc.patches
Message-ID <[email protected]>
On Wed, Jul 22, 2026 at 01:41:31PM +0000, Karl Meakin via Sourceware Forge wrote:
> From: Karl Meakin <[email protected]>
> 
> Make `aarch64_update_ipa_fn_target_info` more conservative, by setting
> the `AARCH64_IPA_SM_FIXED` bit by default. The bit will only be unset if
> the function is annotated with `[[arm::streaming_compatible]]`. This
> matches the ACLE's specification which states that functions are by
> default non-streaming.
> 
> This fixes PR 126133 by causing inlining to fail, even with
> `[[gnu::always_inline]]`, because the target features do not match.
> 
> gcc/ChangeLog:
> 
> 	* config/aarch64/aarch64.cc (aarch64_update_ipa_fn_target_info):
> 	set the `AARCH64_IPA_SM_FIXED` bit unless the function is
> 	annotated with `[[arm::streaming_compatible]]`.
> 
> gcc/testsuite/ChangeLog:
> 
> 	* gcc.target/aarch64/pr126133-1.c: New test.
> 	* gcc.target/aarch64/pr126133-2.c: New test.
> 	* gcc.target/aarch64/pr126133-3.c: New test.
> ---
>  gcc/config/aarch64/aarch64.cc                 | 15 ++++++-------
>  gcc/testsuite/gcc.target/aarch64/pr126133-1.c | 19 +++++++++++++++++
>  gcc/testsuite/gcc.target/aarch64/pr126133-2.c | 21 +++++++++++++++++++
>  gcc/testsuite/gcc.target/aarch64/pr126133-3.c | 19 +++++++++++++++++
>  4 files changed, 65 insertions(+), 9 deletions(-)
>  create mode 100644 gcc/testsuite/gcc.target/aarch64/pr126133-1.c
>  create mode 100644 gcc/testsuite/gcc.target/aarch64/pr126133-2.c
>  create mode 100644 gcc/testsuite/gcc.target/aarch64/pr126133-3.c
> 
> diff --git a/gcc/config/aarch64/aarch64.cc b/gcc/config/aarch64/aarch64.cc
> index 61562c94a553..d4ed42ce73e1 100644
> --- a/gcc/config/aarch64/aarch64.cc
> +++ b/gcc/config/aarch64/aarch64.cc
> @@ -22185,15 +22185,12 @@ aarch64_update_ipa_fn_target_info (unsigned int &info, const gimple *stmt)
>      }
>    if (auto *call = dyn_cast<const gcall *> (stmt))
>      {
> -      if (gimple_call_builtin_p (call, BUILT_IN_MD))
> -	{
> -	  /* The attributes on AArch64 builtins are supposed to be accurate.
> -	     If the function isn't marked streaming-compatible then it
> -	     needs whichever SM mode it selects.  */
> -	  tree decl = gimple_call_fndecl (call);
> -	  if (aarch64_fndecl_pstate_sm (decl) != 0)
> -	    info |= AARCH64_IPA_SM_FIXED;
> -	}
> +      /* Assume functions are non-streaming by default.
> +	They are only streaming or streaming-compatible if they have the
> +	corresponding attribute.  */
> +      tree decl = gimple_call_fndecl (call);
> +      if (!decl || aarch64_fndecl_pstate_sm (decl) != 0)
> +	info |= AARCH64_IPA_SM_FIXED;
>      }
>    return true;
>  }

This change doesn't go far enough.  I have proposed a more comprehensive fix -
see https://gcc.gnu.org/pipermail/gcc-patches/2026-August/728155.html.

Alice
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.