summaryrefslogtreecommitdiff
path: root/0121-Backport-SME-aarch64-Tweak-constness-of-option-relat.patch
diff options
context:
space:
mode:
Diffstat (limited to '0121-Backport-SME-aarch64-Tweak-constness-of-option-relat.patch')
-rw-r--r--0121-Backport-SME-aarch64-Tweak-constness-of-option-relat.patch195
1 files changed, 195 insertions, 0 deletions
diff --git a/0121-Backport-SME-aarch64-Tweak-constness-of-option-relat.patch b/0121-Backport-SME-aarch64-Tweak-constness-of-option-relat.patch
new file mode 100644
index 0000000..4ababc2
--- /dev/null
+++ b/0121-Backport-SME-aarch64-Tweak-constness-of-option-relat.patch
@@ -0,0 +1,195 @@
+From 99c5eb58e898417632b6d9a7b2b3d288b50e9b65 Mon Sep 17 00:00:00 2001
+From: Richard Sandiford <richard.sandiford@arm.com>
+Date: Thu, 29 Sep 2022 11:32:55 +0100
+Subject: [PATCH 022/157] [Backport][SME] aarch64: Tweak constness of
+ option-related data
+
+Reference: https://gcc.gnu.org/git/?p=gcc.git;a=commit;h=60dee638c8a7ae59c033868de7e7638c88b38ed2
+
+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 2bdf51b8b..ac3486d71 100644
+--- a/gcc/common/config/aarch64/aarch64-common.cc
++++ b/gcc/common/config/aarch64/aarch64-common.cc
+@@ -203,14 +203,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, \
+@@ -223,21 +223,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},
+@@ -247,7 +247,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 1363873b1..71db7ace1 100644
+--- a/gcc/config/aarch64/aarch64.cc
++++ b/gcc/config/aarch64/aarch64.cc
+@@ -2925,16 +2925,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 ddfc9451f..ee9cb65a5 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.33.0
+