[06/11] aarch64: Inline aarch64_print_hint_for_core_or_arch

Message ID a900abfb-2756-5b89-4256-9aa848f416fc@e124511.cambridge.arm.com
State New
Headers
Series aarch64: Refactor target parsing |

Checks

Context Check Description
linaro-tcwg-bot/tcwg_gcc_build--master-arm success Build passed
linaro-tcwg-bot/tcwg_gcc_build--master-aarch64 success Build passed
linaro-tcwg-bot/tcwg_gcc_check--master-arm success Test passed

Commit Message

Andrew Carlotti Jan. 10, 2025, 5:23 p.m. UTC
  It seems odd that we add "native" to the list for -march but not for
-mcpu.  This is probably a bug, but for now we'll preserve the existing
behaviour.

gcc/ChangeLog:

	* config/aarch64/aarch64.cc
	(aarch64_print_hint_for_core_or_arch): Inline into...
	(aarch64_print_hint_for_core): ...here...
	(aarch64_print_hint_for_arch): ...and here.
  

Comments

Richard Sandiford Jan. 14, 2025, 6:09 p.m. UTC | #1
Andrew Carlotti <andrew.carlotti@arm.com> writes:
> It seems odd that we add "native" to the list for -march but not for
> -mcpu.  This is probably a bug, but for now we'll preserve the existing
> behaviour.

Yeah, agree it looks like a bug (but also that it's not something
to fix as part of this series).

> gcc/ChangeLog:
>
> 	* config/aarch64/aarch64.cc
> 	(aarch64_print_hint_for_core_or_arch): Inline into...
> 	(aarch64_print_hint_for_core): ...here...
> 	(aarch64_print_hint_for_arch): ...and here.
>
>
> diff --git a/gcc/config/aarch64/aarch64.cc b/gcc/config/aarch64/aarch64.cc
> index 9b44d08f3e5fe6b4a7aa8f040e7001e3070b362d..f33034cbb205eb52b5ee5965b8b972cedf6f4927 100644
> --- a/gcc/config/aarch64/aarch64.cc
> +++ b/gcc/config/aarch64/aarch64.cc
> @@ -18884,25 +18884,17 @@ aarch64_override_options_internal (struct gcc_options *opts)
>    aarch64_override_options_after_change_1 (opts);
>  }
>  
> -/* Print a hint with a suggestion for a core or architecture name that
> -   most closely resembles what the user passed in STR.  ARCH is true if
> -   the user is asking for an architecture name.  ARCH is false if the user
> -   is asking for a core name.  */
> +/* Print a hint with a suggestion for a core name that most closely resembles
> +   what the user passed in STR.  */
>  
> -static void
> -aarch64_print_hint_for_core_or_arch (const char *str, bool arch)
> +inline static void
> +aarch64_print_hint_for_core (const char *str)
>  {
>    auto_vec<const char *> candidates;
> -  const struct processor *entry = arch ? all_architectures : all_cores;
> +  const struct processor *entry = all_cores;
>    for (; entry->name != NULL; entry++)
>      candidates.safe_push (entry->name);
>  
> -#ifdef HAVE_LOCAL_CPU_DETECT
> -  /* Add also "native" as possible value.  */
> -  if (arch)
> -    candidates.safe_push ("native");
> -#endif
> -
>    char *s;
>    const char *hint = candidates_list_and_hint (str, s, candidates);
>    if (hint)
> @@ -18914,22 +18906,31 @@ aarch64_print_hint_for_core_or_arch (const char *str, bool arch)
>    XDELETEVEC (s);
>  }
>  
> -/* Print a hint with a suggestion for a core name that most closely resembles
> -   what the user passed in STR.  */
> -
> -inline static void
> -aarch64_print_hint_for_core (const char *str)
> -{
> -  aarch64_print_hint_for_core_or_arch (str, false);
> -}
> -
>  /* Print a hint with a suggestion for an architecture name that most closely
>     resembles what the user passed in STR.  */
>  
>  inline static void
>  aarch64_print_hint_for_arch (const char *str)
>  {
> -  aarch64_print_hint_for_core_or_arch (str, true);
> +  auto_vec<const char *> candidates;
> +  const struct processor *entry = all_architectures;
> +  for (; entry->name != NULL; entry++)
> +    candidates.safe_push (entry->name);
> +
> +#ifdef HAVE_LOCAL_CPU_DETECT
> +  /* Add also "native" as possible value.  */
> +  candidates.safe_push ("native");
> +#endif
> +
> +  char *s;
> +  const char *hint = candidates_list_and_hint (str, s, candidates);
> +  if (hint)
> +    inform (input_location, "valid arguments are: %s;"
> +			     " did you mean %qs?", s, hint);
> +  else
> +    inform (input_location, "valid arguments are: %s", s);
> +
> +  XDELETEVEC (s);

Could we keep the "char *s;" onwards in a common routine, maybe
called "aarch64_print_hint_candidates", and share it with
aarch64_print_hint_for_extensions?  One reason for asking is that
it ensures that the wording of the diagnostic is consistent (and that
we therefore don't end up with multiple slightly-different translation
strings).

OK with that change, thanks.

Richard

>  }
>  
>
  

Patch

diff --git a/gcc/config/aarch64/aarch64.cc b/gcc/config/aarch64/aarch64.cc
index 9b44d08f3e5fe6b4a7aa8f040e7001e3070b362d..f33034cbb205eb52b5ee5965b8b972cedf6f4927 100644
--- a/gcc/config/aarch64/aarch64.cc
+++ b/gcc/config/aarch64/aarch64.cc
@@ -18884,25 +18884,17 @@  aarch64_override_options_internal (struct gcc_options *opts)
   aarch64_override_options_after_change_1 (opts);
 }
 
-/* Print a hint with a suggestion for a core or architecture name that
-   most closely resembles what the user passed in STR.  ARCH is true if
-   the user is asking for an architecture name.  ARCH is false if the user
-   is asking for a core name.  */
+/* Print a hint with a suggestion for a core name that most closely resembles
+   what the user passed in STR.  */
 
-static void
-aarch64_print_hint_for_core_or_arch (const char *str, bool arch)
+inline static void
+aarch64_print_hint_for_core (const char *str)
 {
   auto_vec<const char *> candidates;
-  const struct processor *entry = arch ? all_architectures : all_cores;
+  const struct processor *entry = all_cores;
   for (; entry->name != NULL; entry++)
     candidates.safe_push (entry->name);
 
-#ifdef HAVE_LOCAL_CPU_DETECT
-  /* Add also "native" as possible value.  */
-  if (arch)
-    candidates.safe_push ("native");
-#endif
-
   char *s;
   const char *hint = candidates_list_and_hint (str, s, candidates);
   if (hint)
@@ -18914,22 +18906,31 @@  aarch64_print_hint_for_core_or_arch (const char *str, bool arch)
   XDELETEVEC (s);
 }
 
-/* Print a hint with a suggestion for a core name that most closely resembles
-   what the user passed in STR.  */
-
-inline static void
-aarch64_print_hint_for_core (const char *str)
-{
-  aarch64_print_hint_for_core_or_arch (str, false);
-}
-
 /* Print a hint with a suggestion for an architecture name that most closely
    resembles what the user passed in STR.  */
 
 inline static void
 aarch64_print_hint_for_arch (const char *str)
 {
-  aarch64_print_hint_for_core_or_arch (str, true);
+  auto_vec<const char *> candidates;
+  const struct processor *entry = all_architectures;
+  for (; entry->name != NULL; entry++)
+    candidates.safe_push (entry->name);
+
+#ifdef HAVE_LOCAL_CPU_DETECT
+  /* Add also "native" as possible value.  */
+  candidates.safe_push ("native");
+#endif
+
+  char *s;
+  const char *hint = candidates_list_and_hint (str, s, candidates);
+  if (hint)
+    inform (input_location, "valid arguments are: %s;"
+			     " did you mean %qs?", s, hint);
+  else
+    inform (input_location, "valid arguments are: %s", s);
+
+  XDELETEVEC (s);
 }