196 lines
6.9 KiB
Diff
196 lines
6.9 KiB
Diff
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
|
|
|