Andrew Carlotti <andrew.carlo...@arm.com> writes:
> Building an aarch64_feature_flags value from data within a gcc_options
> or cl_target_option struct will get more complicated in a later commit.
> Use a macro to avoid doing this manually in more than one location.
>
> gcc/ChangeLog:
>
>       * common/config/aarch64/aarch64-common.cc
>       (aarch64_handle_option): Use new macro.
>       * config/aarch64/aarch64.cc
>       (aarch64_override_options_internal): Ditto.
>       (aarch64_option_print): Ditto.
>       (aarch64_set_current_function): Ditto.
>       (aarch64_can_inline_p): Ditto.
>       (aarch64_declare_function_name): Ditto.
>       (aarch64_start_file): Ditto.
>       * config/aarch64/aarch64.h (aarch64_get_asm_isa_flags): New
>       (aarch64_get_isa_flags): New.
>       (aarch64_asm_isa_flags): Use new macro.
>       (aarch64_isa_flags): Ditto.

OK, thanks.

Richard

>
>
> diff --git a/gcc/common/config/aarch64/aarch64-common.cc 
> b/gcc/common/config/aarch64/aarch64-common.cc
> index 
> 951d041d3109b935e90a7cb5d714940414e81761..63c50189a09d5c7c713f57e23a8172f44bf6bec5
>  100644
> --- a/gcc/common/config/aarch64/aarch64-common.cc
> +++ b/gcc/common/config/aarch64/aarch64-common.cc
> @@ -111,7 +111,7 @@ aarch64_handle_option (struct gcc_options *opts,
>  
>      case OPT_mgeneral_regs_only:
>        opts->x_target_flags |= MASK_GENERAL_REGS_ONLY;
> -      aarch64_set_asm_isa_flags (opts, opts->x_aarch64_asm_isa_flags);
> +      aarch64_set_asm_isa_flags (opts, aarch64_get_asm_isa_flags (opts));
>        return true;
>  
>      case OPT_mfix_cortex_a53_835769:
> diff --git a/gcc/config/aarch64/aarch64.h b/gcc/config/aarch64/aarch64.h
> index 
> dfb244307635a7aa1c552acd55a635cd0bdeeb39..193f2486176b6bac372a143e2f52041c5a28ebaf
>  100644
> --- a/gcc/config/aarch64/aarch64.h
> +++ b/gcc/config/aarch64/aarch64.h
> @@ -22,15 +22,18 @@
>  #ifndef GCC_AARCH64_H
>  #define GCC_AARCH64_H
>  
> +#define aarch64_get_asm_isa_flags(opts) \
> +  (aarch64_feature_flags ((opts)->x_aarch64_asm_isa_flags))
> +#define aarch64_get_isa_flags(opts) \
> +  (aarch64_feature_flags ((opts)->x_aarch64_isa_flags))
> +
>  /* Make these flags read-only so that all uses go via
>     aarch64_set_asm_isa_flags.  */
>  #ifndef GENERATOR_FILE
>  #undef aarch64_asm_isa_flags
> -#define aarch64_asm_isa_flags \
> -  ((aarch64_feature_flags) global_options.x_aarch64_asm_isa_flags)
> +#define aarch64_asm_isa_flags (aarch64_get_asm_isa_flags (&global_options))
>  #undef aarch64_isa_flags
> -#define aarch64_isa_flags \
> -  ((aarch64_feature_flags) global_options.x_aarch64_isa_flags)
> +#define aarch64_isa_flags (aarch64_get_isa_flags (&global_options))
>  #endif
>  
>  /* Target CPU builtins.  */
> diff --git a/gcc/config/aarch64/aarch64.cc b/gcc/config/aarch64/aarch64.cc
> index 
> 726f769e708d09285a291472bda4babcc3241d00..69f481ecfc848e6c5b61516c2f7b8bff5cd4f8b8
>  100644
> --- a/gcc/config/aarch64/aarch64.cc
> +++ b/gcc/config/aarch64/aarch64.cc
> @@ -18331,10 +18331,11 @@ aarch64_override_options_internal (struct 
> gcc_options *opts)
>        && !fixed_regs[R18_REGNUM])
>      error ("%<-fsanitize=shadow-call-stack%> requires %<-ffixed-x18%>");
>  
> -  if ((opts->x_aarch64_isa_flags & (AARCH64_FL_SM_ON | AARCH64_FL_ZA_ON))
> -      && !(opts->x_aarch64_isa_flags & AARCH64_FL_SME))
> +  aarch64_feature_flags isa_flags = aarch64_get_isa_flags (opts);
> +  if ((isa_flags & (AARCH64_FL_SM_ON | AARCH64_FL_ZA_ON))
> +      && !(isa_flags & AARCH64_FL_SME))
>      {
> -      if (opts->x_aarch64_isa_flags & AARCH64_FL_SM_ON)
> +      if (isa_flags & AARCH64_FL_SM_ON)
>       error ("streaming functions require the ISA extension %qs", "sme");
>        else
>       error ("functions with SME state require the ISA extension %qs",
> @@ -18343,8 +18344,7 @@ aarch64_override_options_internal (struct gcc_options 
> *opts)
>             " option %<-march%>, or by using the %<target%>"
>             " attribute or pragma", "sme");
>        opts->x_target_flags &= ~MASK_GENERAL_REGS_ONLY;
> -      auto new_flags = (opts->x_aarch64_asm_isa_flags
> -                     | feature_deps::SME ().enable);
> +      auto new_flags = isa_flags | feature_deps::SME ().enable;
>        aarch64_set_asm_isa_flags (opts, new_flags);
>      }
>  
> @@ -19038,9 +19038,9 @@ aarch64_option_print (FILE *file, int indent, struct 
> cl_target_option *ptr)
>    const struct processor *cpu
>      = aarch64_get_tune_cpu (ptr->x_selected_tune);
>    const struct processor *arch = aarch64_get_arch (ptr->x_selected_arch);
> +  aarch64_feature_flags isa_flags = aarch64_get_asm_isa_flags(ptr);
>    std::string extension
> -    = aarch64_get_extension_string_for_isa_flags 
> (ptr->x_aarch64_asm_isa_flags,
> -                                               arch->flags);
> +    = aarch64_get_extension_string_for_isa_flags (isa_flags, arch->flags);
>  
>    fprintf (file, "%*sselected tune = %s\n", indent, "", cpu->name);
>    fprintf (file, "%*sselected arch = %s%s\n", indent, "",
> @@ -19100,7 +19100,7 @@ aarch64_set_current_function (tree fndecl)
>    auto new_isa_mode = (fndecl
>                      ? aarch64_fndecl_isa_mode (fndecl)
>                      : AARCH64_DEFAULT_ISA_MODE);
> -  auto isa_flags = TREE_TARGET_OPTION (new_tree)->x_aarch64_isa_flags;
> +  auto isa_flags = aarch64_get_isa_flags (TREE_TARGET_OPTION (new_tree));
>  
>    static bool reported_zt0_p;
>    if (!reported_zt0_p
> @@ -20701,16 +20701,16 @@ aarch64_can_inline_p (tree caller, tree callee)
>                                          : target_option_default_node);
>  
>    /* Callee's ISA flags should be a subset of the caller's.  */
> -  auto caller_asm_isa = (caller_opts->x_aarch64_asm_isa_flags
> +  auto caller_asm_isa = (aarch64_get_asm_isa_flags (caller_opts)
>                        & ~AARCH64_FL_ISA_MODES);
> -  auto callee_asm_isa = (callee_opts->x_aarch64_asm_isa_flags
> +  auto callee_asm_isa = (aarch64_get_asm_isa_flags (callee_opts)
>                        & ~AARCH64_FL_ISA_MODES);
>    if (callee_asm_isa & ~caller_asm_isa)
>      return false;
>  
> -  auto caller_isa = (caller_opts->x_aarch64_isa_flags
> +  auto caller_isa = (aarch64_get_isa_flags (caller_opts)
>                    & ~AARCH64_FL_ISA_MODES);
> -  auto callee_isa = (callee_opts->x_aarch64_isa_flags
> +  auto callee_isa = (aarch64_get_isa_flags (callee_opts)
>                    & ~AARCH64_FL_ISA_MODES);
>    if (callee_isa & ~caller_isa)
>      return false;
> @@ -20730,8 +20730,8 @@ aarch64_can_inline_p (tree caller, tree callee)
>       PSTATE.SM mode.  Otherwise the caller and callee must agree on
>       PSTATE.SM mode, unless we can prove that the callee is naturally
>       streaming-compatible.  */
> -  auto caller_sm = (caller_opts->x_aarch64_isa_flags & AARCH64_FL_SM_STATE);
> -  auto callee_sm = (callee_opts->x_aarch64_isa_flags & AARCH64_FL_SM_STATE);
> +  auto caller_sm = (aarch64_get_isa_flags (caller_opts) & 
> AARCH64_FL_SM_STATE);
> +  auto callee_sm = (aarch64_get_isa_flags (callee_opts) & 
> AARCH64_FL_SM_STATE);
>    if (callee_sm
>        && caller_sm != callee_sm
>        && callee_has_property (AARCH64_IPA_SM_FIXED))
> @@ -20744,8 +20744,8 @@ aarch64_can_inline_p (tree caller, tree callee)
>  
>       The only other problematic case for ZA is inlining a function that
>       directly clobbers ZA or ZT0 into a function that has ZA or ZT0 state.  
> */
> -  auto caller_za = (caller_opts->x_aarch64_isa_flags & AARCH64_FL_ZA_ON);
> -  auto callee_za = (callee_opts->x_aarch64_isa_flags & AARCH64_FL_ZA_ON);
> +  auto caller_za = (aarch64_get_isa_flags (caller_opts) & AARCH64_FL_ZA_ON);
> +  auto callee_za = (aarch64_get_isa_flags (callee_opts) & AARCH64_FL_ZA_ON);
>    if (!caller_za && callee_za)
>      return false;
>    if (!callee_za
> @@ -24480,7 +24480,7 @@ aarch64_declare_function_name (FILE *stream, const 
> char* name,
>    const struct processor *this_arch
>      = aarch64_get_arch (targ_options->x_selected_arch);
>  
> -  auto isa_flags = targ_options->x_aarch64_asm_isa_flags;
> +  auto isa_flags = aarch64_get_asm_isa_flags (targ_options);
>    std::string extension
>      = aarch64_get_extension_string_for_isa_flags (isa_flags,
>                                                 this_arch->flags);
> @@ -24610,7 +24610,7 @@ aarch64_start_file (void)
>  
>    const struct processor *default_arch
>      = aarch64_get_arch (default_options->x_selected_arch);
> -  auto default_isa_flags = default_options->x_aarch64_asm_isa_flags;
> +  auto default_isa_flags = aarch64_get_asm_isa_flags (default_options);
>    std::string extension
>      = aarch64_get_extension_string_for_isa_flags (default_isa_flags,
>                                                 default_arch->flags);

Reply via email to