From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from foss.arm.com (foss.arm.com [217.140.110.172]) by sourceware.org (Postfix) with ESMTP id 1BAFD3857C5C for ; Thu, 29 Sep 2022 10:42:11 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org 1BAFD3857C5C Authentication-Results: sourceware.org; dmarc=pass (p=none dis=none) header.from=arm.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=arm.com Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14]) by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id 89D3715BF for ; Thu, 29 Sep 2022 03:42:17 -0700 (PDT) Received: from localhost (e121540-lin.manchester.arm.com [10.32.98.62]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id 833293F73B for ; Thu, 29 Sep 2022 03:42:10 -0700 (PDT) From: Richard Sandiford To: gcc-patches@gcc.gnu.org Mail-Followup-To: gcc-patches@gcc.gnu.org, richard.sandiford@arm.com Subject: [PATCH 13/17] aarch64: Tweak constness of option-related data References: Date: Thu, 29 Sep 2022 11:42:09 +0100 In-Reply-To: (Richard Sandiford's message of "Thu, 29 Sep 2022 11:39:11 +0100") Message-ID: User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/26.3 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain X-Spam-Status: No, score=-45.9 required=5.0 tests=BAYES_00,GIT_PATCH_0,KAM_DMARC_NONE,KAM_DMARC_STATUS,KAM_LAZY_DOMAIN_SECURITY,SPF_HELO_NONE,SPF_NONE,TXREP autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org List-Id: Some of the option structures have all-const member variables. That doesn't seem necessary: we can just use const on the objects that are supposed to be read-only. Also, with the new, more C++-heavy option handling, it seems better to use constexpr for the static data, to make sure that we're not adding unexpected overhead. gcc/ * common/config/aarch64/aarch64-common.cc (aarch64_option_extension) (processor_name_to_arch, arch_to_arch_name): Remove const from member variables. (all_extensions, all_cores, all_architectures): Make a constexpr. * config/aarch64/aarch64.cc (processor): Remove const from member variables. (all_architectures): Make a constexpr. * config/aarch64/driver-aarch64.cc (aarch64_core_data) (aarch64_arch_driver_info): Remove const from member variables. (aarch64_cpu_data, aarch64_arches): Make a constexpr. (get_arch_from_id): Return a pointer to const. (host_detect_local_cpu): Update accordingly. --- gcc/common/config/aarch64/aarch64-common.cc | 26 ++++++++++----------- gcc/config/aarch64/aarch64.cc | 14 +++++------ gcc/config/aarch64/driver-aarch64.cc | 15 ++++++------ 3 files changed, 27 insertions(+), 28 deletions(-) diff --git a/gcc/common/config/aarch64/aarch64-common.cc b/gcc/common/config/aarch64/aarch64-common.cc index 8760e092064..918ac844dcf 100644 --- a/gcc/common/config/aarch64/aarch64-common.cc +++ b/gcc/common/config/aarch64/aarch64-common.cc @@ -127,14 +127,14 @@ aarch64_handle_option (struct gcc_options *opts, /* An ISA extension in the co-processor and main instruction set space. */ struct aarch64_option_extension { - const char *const name; - const uint64_t flag_canonical; - const uint64_t flags_on; - const uint64_t flags_off; + const char *name; + uint64_t flag_canonical; + uint64_t flags_on; + uint64_t flags_off; }; /* ISA extensions in AArch64. */ -static const struct aarch64_option_extension all_extensions[] = +static constexpr aarch64_option_extension all_extensions[] = { #define AARCH64_OPT_EXTENSION(NAME, IDENT, C, D, E, F) \ {NAME, AARCH64_FL_##IDENT, \ @@ -147,21 +147,21 @@ static const struct aarch64_option_extension all_extensions[] = struct processor_name_to_arch { - const char *const processor_name; - const enum aarch64_arch arch; - const uint64_t flags; + const char *processor_name; + aarch64_arch arch; + uint64_t flags; }; struct arch_to_arch_name { - const enum aarch64_arch arch; - const char *const arch_name; - const uint64_t flags; + aarch64_arch arch; + const char *arch_name; + uint64_t flags; }; /* Map processor names to the architecture revision they implement and the default set of architectural feature flags they support. */ -static const struct processor_name_to_arch all_cores[] = +static constexpr processor_name_to_arch all_cores[] = { #define AARCH64_CORE(NAME, CORE_IDENT, C, ARCH_IDENT, E, F, G, H, I) \ {NAME, AARCH64_ARCH_##ARCH_IDENT, feature_deps::cpu_##CORE_IDENT}, @@ -171,7 +171,7 @@ static const struct processor_name_to_arch all_cores[] = }; /* Map architecture revisions to their string representation. */ -static const struct arch_to_arch_name all_architectures[] = +static constexpr arch_to_arch_name all_architectures[] = { #define AARCH64_ARCH(NAME, B, ARCH_IDENT, D, E) \ {AARCH64_ARCH_##ARCH_IDENT, NAME, feature_deps::ARCH_IDENT ().enable}, diff --git a/gcc/config/aarch64/aarch64.cc b/gcc/config/aarch64/aarch64.cc index 398232433ce..70371afd1c5 100644 --- a/gcc/config/aarch64/aarch64.cc +++ b/gcc/config/aarch64/aarch64.cc @@ -2671,16 +2671,16 @@ aarch64_tuning_override_functions[] = /* A processor implementing AArch64. */ struct processor { - const char *const name; - enum aarch64_processor ident; - enum aarch64_processor sched_core; - enum aarch64_arch arch; - const uint64_t flags; - const struct tune_params *const tune; + const char *name; + aarch64_processor ident; + aarch64_processor sched_core; + aarch64_arch arch; + uint64_t flags; + const tune_params *tune; }; /* Architectures implementing AArch64. */ -static const struct processor all_architectures[] = +static constexpr processor all_architectures[] = { #define AARCH64_ARCH(NAME, CORE, ARCH_IDENT, D, E) \ {NAME, CORE, CORE, AARCH64_ARCH_##ARCH_IDENT, \ diff --git a/gcc/config/aarch64/driver-aarch64.cc b/gcc/config/aarch64/driver-aarch64.cc index 1c86d62ef80..be41e2923db 100644 --- a/gcc/config/aarch64/driver-aarch64.cc +++ b/gcc/config/aarch64/driver-aarch64.cc @@ -50,7 +50,7 @@ struct aarch64_core_data unsigned char implementer_id; /* Exactly 8 bits */ unsigned int part_no; /* 12 bits + 12 bits */ unsigned variant; - const uint64_t flags; + uint64_t flags; }; #define AARCH64_BIG_LITTLE(BIG, LITTLE) \ @@ -64,7 +64,7 @@ struct aarch64_core_data #define AARCH64_CORE(CORE_NAME, CORE_IDENT, SCHED, ARCH, FLAGS, COSTS, IMP, PART, VARIANT) \ { CORE_NAME, #ARCH, IMP, PART, VARIANT, feature_deps::cpu_##CORE_IDENT }, -static struct aarch64_core_data aarch64_cpu_data[] = +static constexpr aarch64_core_data aarch64_cpu_data[] = { #include "aarch64-cores.def" { NULL, NULL, INVALID_IMP, INVALID_CORE, ALL_VARIANTS, 0 } @@ -75,14 +75,14 @@ struct aarch64_arch_driver_info { const char* id; const char* name; - const uint64_t flags; + uint64_t flags; }; /* Skip the leading "V" in the architecture name. */ #define AARCH64_ARCH(NAME, CORE, ARCH_IDENT, ARCH_REV, FLAGS) \ { #ARCH_IDENT + 1, NAME, feature_deps::ARCH_IDENT ().enable }, -static struct aarch64_arch_driver_info aarch64_arches[] = +static constexpr aarch64_arch_driver_info aarch64_arches[] = { #include "aarch64-arches.def" {NULL, NULL, 0} @@ -92,7 +92,7 @@ static struct aarch64_arch_driver_info aarch64_arches[] = /* Return an aarch64_arch_driver_info for the architecture described by ID, or NULL if ID describes something we don't know about. */ -static struct aarch64_arch_driver_info* +static const aarch64_arch_driver_info * get_arch_from_id (const char* id) { unsigned int i = 0; @@ -396,8 +396,7 @@ host_detect_local_cpu (int argc, const char **argv) if (aarch64_cpu_data[i].name == NULL) { - aarch64_arch_driver_info* arch_info - = get_arch_from_id (DEFAULT_ARCH); + auto arch_info = get_arch_from_id (DEFAULT_ARCH); gcc_assert (arch_info); @@ -407,7 +406,7 @@ host_detect_local_cpu (int argc, const char **argv) else if (arch) { const char *arch_id = aarch64_cpu_data[i].arch; - aarch64_arch_driver_info* arch_info = get_arch_from_id (arch_id); + auto arch_info = get_arch_from_id (arch_id); /* We got some arch indentifier that's not in aarch64-arches.def? */ if (!arch_info) -- 2.25.1