Alfie Richards <alfie.richa...@arm.com> writes:
> Notably this respects target_version semantics where an unannotated
> function can be the default version.
>
> gcc/ChangeLog:
>
>       * attribs.cc (is_function_default_version): Add target_version logic.

OK for GCC 16, thanks.

Richard

> ---
>  gcc/attribs.cc | 27 ++++++++++++++++++++-------
>  1 file changed, 20 insertions(+), 7 deletions(-)
>
> diff --git a/gcc/attribs.cc b/gcc/attribs.cc
> index 56dd18c2fa8..f6667839c01 100644
> --- a/gcc/attribs.cc
> +++ b/gcc/attribs.cc
> @@ -1279,18 +1279,31 @@ make_dispatcher_decl (const tree decl)
>    return func_decl;
>  }
>  
> -/* Returns true if DECL is multi-versioned using the target attribute, and 
> this
> -   is the default version.  This function can only be used for targets that 
> do
> -   not support the "target_version" attribute.  */
> +/* Returns true if DECL a multiversioned default.
> +   With the target attribute semantics, returns true if the function is 
> marked
> +   as default with the target version.
> +   With the target_version attribute semantics, returns true if the function
> +   is either not annotated, or annotated as default.  */
>  
>  bool
>  is_function_default_version (const tree decl)
>  {
> -  if (TREE_CODE (decl) != FUNCTION_DECL
> -      || !DECL_FUNCTION_VERSIONED (decl))
> +  tree attr;
> +  if (TREE_CODE (decl) != FUNCTION_DECL)
>      return false;
> -  tree attr = lookup_attribute ("target", DECL_ATTRIBUTES (decl));
> -  gcc_assert (attr);
> +  if (TARGET_HAS_FMV_TARGET_ATTRIBUTE)
> +    {
> +      if (!DECL_FUNCTION_VERSIONED (decl))
> +     return false;
> +      attr = lookup_attribute ("target", DECL_ATTRIBUTES (decl));
> +      gcc_assert (attr);
> +    }
> +  else
> +    {
> +      attr = lookup_attribute ("target_version", DECL_ATTRIBUTES (decl));
> +      if (!attr)
> +     return true;
> +    }
>    attr = TREE_VALUE (TREE_VALUE (attr));
>    return (TREE_CODE (attr) == STRING_CST
>         && strcmp (TREE_STRING_POINTER (attr), "default") == 0);

Reply via email to