gcc/arc: Make arc_selected_cpu global
authorAndrew Burgess <andrew.burgess@embecosm.com>
Thu, 9 Feb 2017 00:34:00 +0000 (00:34 +0000)
committerAndrew Burgess <aburgess@gcc.gnu.org>
Thu, 9 Feb 2017 00:34:00 +0000 (00:34 +0000)
Currently we only make the base_architecture globally available, this
means we can tell if we have selected arc700/archs/etc but it's not
possible to tell if the user has selected a specific cpu variant, for
example nps400.

One problem this causes is, for example, in arc-c.def, if we want to add
an __NPS400__ define then we need a flag we can check to determine if
this is the right thing to do.

In this commit the arc_selected_cpu variable (previously local within
arc.c) has been made global.  Two other variables arc_base_cpu and
arc_selected_arch have been deleted, all of this information can be
found within (or through) arc_selected_cpu.

All uses of arc_base_cpu and arc_selected_arch have been updated.  This
commit does not introduce any new defines (like __NPS400__), this is
just a restructuring commit.

The declaration of arc_selected_cpu has moved into arc-arch.h, in
contrast to the declaration of arc_base_cpu which was previously in
arc.h.  This avoids a compilation issue when building libgcc, as the
structure and enums declared in arc-arch.h are not included for libgcc
then declaring an arc_selected_cpu (a struct type) in arc.h would result
in an unknown struct error.  We got away with this for arc_base_cpu as
that was an enum type.  The declaration of arc_selected_cpu in
arc.h could have been wrapped in a '#ifndef IN_LIBGCC2 ... #endif', but
it felt neater to simply move the declaration into arc-arch.h.

gcc/ChangeLog:

* config/arc/arc-arch.h (arc_arch_t): Move unchanged to earlier in
file.
(arc_cpu_t): Change base_architecture field, arch, to a arc_arc_t
pointer, arch_info.
(arc_cpu_types): Fill the arch_info field with a pointer into the
arc_arch_types table.
(arc_selected_cpu): Declare.
* config/arc/arc.c (arc_selected_cpu): Make global.
(arc_selected_arch): Delete.
(arc_base_cpu): Delete.
(arc_override_options): Remove references to deleted variables,
update access to arch information.
(ARC_OPT): Update access to arch information.
(ARC_OPTX): Likewise.
* config/arc/arc.h (arc_base_cpu): Remove declaration.
(TARGET_ARC600): Update access to arch information.
(TARGET_ARC601): Likewise.
(TARGET_ARC700): Likewise.
(TARGET_EM): Likewise.
(TARGET_HS): Likewise.
* config/arc/driver-arc.c (arc_cpu_to_as): Update access to arch
information.

From-SVN: r245293

gcc/ChangeLog
gcc/config/arc/arc-arch.h
gcc/config/arc/arc.c
gcc/config/arc/arc.h
gcc/config/arc/driver-arc.c

index 11c96925491c862c490c6d474417c24364b990e6..4d8e92932557745a8079ec226987f7d820b75fb8 100644 (file)
@@ -1,3 +1,28 @@
+2017-02-09  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+       * config/arc/arc-arch.h (arc_arch_t): Move unchanged to earlier in
+       file.
+       (arc_cpu_t): Change base_architecture field, arch, to a arc_arc_t
+       pointer, arch_info.
+       (arc_cpu_types): Fill the arch_info field with a pointer into the
+       arc_arch_types table.
+       (arc_selected_cpu): Declare.
+       * config/arc/arc.c (arc_selected_cpu): Make global.
+       (arc_selected_arch): Delete.
+       (arc_base_cpu): Delete.
+       (arc_override_options): Remove references to deleted variables,
+       update access to arch information.
+       (ARC_OPT): Update access to arch information.
+       (ARC_OPTX): Likewise.
+       * config/arc/arc.h (arc_base_cpu): Remove declaration.
+       (TARGET_ARC600): Update access to arch information.
+       (TARGET_ARC601): Likewise.
+       (TARGET_ARC700): Likewise.
+       (TARGET_EM): Likewise.
+       (TARGET_HS): Likewise.
+       * config/arc/driver-arc.c (arc_cpu_to_as): Update access to arch
+       information.
+
 2017-02-08  Pat Haugen  <pthaugen@us.ibm.com>
 
        PR target/78604
index 832338b0370cc663bac06a1cc8320f4e574061a1..2344a4b14a29d1cc1d645f46b48822067314cf4d 100644 (file)
@@ -47,6 +47,23 @@ enum base_architecture
     BASE_ARCH_END
   };
 
+/* Architecture specific propoerties.  */
+
+typedef struct
+{
+  /* Architecture name.  */
+  const char *const name;
+
+  /* Architecture class.  */
+  enum base_architecture arch_id;
+
+  /* All allowed flags for this architecture.  */
+  const unsigned long long flags;
+
+  /* Default flags for this architecture.  It is a subset of
+     FLAGS.  */
+  const unsigned long long dflags;
+} arc_arch_t;
 
 /* Tune variants.  Needs to match the attr_tune enum.  */
 
@@ -66,7 +83,7 @@ typedef struct
   const char *const name;
 
   /* Architecture class.  */
-  enum base_architecture arch;
+  const arc_arch_t *arch_info;
 
   /* Specific processor type.  */
   enum processor_type processor;
@@ -76,28 +93,8 @@ typedef struct
 
   /* Tune value.  */
   enum arc_tune_attr tune;
-} arc_cpu_t;
-
-
-/* Architecture specific propoerties.  */
-
-typedef struct
-{
-  /* Architecture name.  */
-  const char *const name;
-
-  /* Architecture class.  */
-  enum base_architecture arch;
-
-  /* All allowed flags for this architecture.  */
-  const unsigned long long flags;
-
-  /* Default flags for this architecture.  It is a subset of
-     FLAGS.  */
-  const unsigned long long dflags;
-} arc_arch_t;
-
 
+} arc_cpu_t;
 
 const arc_arch_t arc_arch_types[] =
   {
@@ -111,13 +108,16 @@ const arc_arch_t arc_arch_types[] =
 
 const arc_cpu_t arc_cpu_types[] =
   {
-    {"none", BASE_ARCH_NONE, PROCESSOR_NONE, 0, ARC_TUNE_NONE},
+    {"none", NULL, PROCESSOR_NONE, 0, ARC_TUNE_NONE},
 #define ARC_CPU(NAME, ARCH, FLAGS, TUNE)       \
-    {#NAME, BASE_ARCH_##ARCH, PROCESSOR_##NAME, FLAGS, ARC_TUNE_##TUNE},
+    {#NAME, &arc_arch_types [BASE_ARCH_##ARCH], PROCESSOR_##NAME, FLAGS, ARC_TUNE_##TUNE },
 #include "arc-cpus.def"
 #undef ARC_CPU
-    {NULL, BASE_ARCH_END, PROCESSOR_NONE, 0, ARC_TUNE_NONE}
+    {NULL, NULL, PROCESSOR_NONE, 0, ARC_TUNE_NONE}
   };
 
+/* Currently selected cpu type.  */
+extern const arc_cpu_t *arc_selected_cpu;
+
 #endif
 #endif /* GCC_ARC_ARCH_H */
index 9089ef4e3acebe122217d3aa478ed5f6cf0e97e7..8a838f93c0b3a301ec710a78eb6b87528d0186a9 100644 (file)
@@ -243,11 +243,8 @@ static bool arc_use_by_pieces_infrastructure_p (unsigned HOST_WIDE_INT,
                                                enum by_pieces_operation op,
                                                bool);
 
-static const arc_cpu_t *arc_selected_cpu;
-static const arc_arch_t *arc_selected_arch;
-
-/* Global var which sets the current compilation architecture.  */
-enum base_architecture arc_base_cpu;
+/* Globally visible information about currently selected cpu.  */
+const arc_cpu_t *arc_selected_cpu;
 
 /* Implements target hook vector_mode_supported_p.  */
 
@@ -787,11 +784,9 @@ arc_override_options (void)
 
   /* Set the default cpu options.  */
   arc_selected_cpu = &arc_cpu_types[(int) arc_cpu];
-  arc_selected_arch = &arc_arch_types[(int) arc_selected_cpu->arch];
-  arc_base_cpu = arc_selected_arch->arch;
 
   /* Set the architectures.  */
-  switch (arc_selected_arch->arch)
+  switch (arc_selected_cpu->arch_info->arch_id)
     {
     case BASE_ARCH_em:
       arc_cpu_string = "EM";
@@ -822,16 +817,16 @@ arc_override_options (void)
     if ((arc_selected_cpu->flags & CODE)               \
        && ((target_flags_explicit & MASK) == 0))       \
       target_flags |= MASK;                            \
-    if (arc_selected_arch->dflags & CODE)              \
+    if (arc_selected_cpu->arch_info->dflags & CODE)    \
       target_flags |= MASK;                            \
   } while (0);
-#define ARC_OPTX(NAME, CODE, VAR, VAL, DOC)    \
-  do {                                         \
-    if ((arc_selected_cpu->flags & CODE)       \
-       && (VAR == DEFAULT_##VAR))              \
-      VAR = VAL;                               \
-    if (arc_selected_arch->dflags & CODE)      \
-      VAR = VAL;                               \
+#define ARC_OPTX(NAME, CODE, VAR, VAL, DOC)            \
+  do {                                                 \
+    if ((arc_selected_cpu->flags & CODE)               \
+       && (VAR == DEFAULT_##VAR))                      \
+      VAR = VAL;                                       \
+    if (arc_selected_cpu->arch_info->dflags & CODE)    \
+      VAR = VAL;                                       \
   } while (0);
 
 #include "arc-options.def"
@@ -844,18 +839,18 @@ arc_override_options (void)
 #define ARC_OPTX(NAME, CODE, VAR, VAL, DOC)                    \
   do {                                                         \
     if ((VAR == VAL)                                           \
-       && (!(arc_selected_arch->flags & CODE)))                \
+       && (!(arc_selected_cpu->arch_info->flags & CODE)))      \
       {                                                                \
        error ("%s is not available for %s architecture",       \
-              DOC, arc_selected_arch->name);                   \
+              DOC, arc_selected_cpu->arch_info->name);         \
       }                                                                \
   } while (0);
 #define ARC_OPT(NAME, CODE, MASK, DOC)                         \
   do {                                                         \
     if ((target_flags & MASK)                                  \
-       && (!(arc_selected_arch->flags & CODE)))                \
+       && (!(arc_selected_cpu->arch_info->flags & CODE)))      \
       error ("%s is not available for %s architecture",                \
-            DOC, arc_selected_arch->name);                     \
+            DOC, arc_selected_cpu->arch_info->name);           \
   } while (0);
 
 #include "arc-options.def"
index b6464f18007f3166d2f3da6c82859dd5b9d57f3f..64a3724b6ccf0ed32d1946c64b69d8bf653dc066 100644 (file)
@@ -215,15 +215,16 @@ extern const char *arc_cpu_to_as (int argc, const char **argv);
    use conditional execution?  */
 #define TARGET_AT_DBR_CONDEXEC  (!TARGET_ARC700 && !TARGET_V2)
 
-extern enum base_architecture arc_base_cpu;
-
-#define TARGET_ARC600 ((arc_base_cpu == BASE_ARCH_6xx) \
+#define TARGET_ARC600 ((arc_selected_cpu->arch_info->arch_id   \
+                       == BASE_ARCH_6xx)                       \
                       && (TARGET_BARREL_SHIFTER))
-#define TARGET_ARC601 ((arc_base_cpu == BASE_ARCH_6xx) \
+#define TARGET_ARC601 ((arc_selected_cpu->arch_info->arch_id   \
+                       == BASE_ARCH_6xx)                       \
                       && (!TARGET_BARREL_SHIFTER))
-#define TARGET_ARC700 (arc_base_cpu == BASE_ARCH_700)
-#define TARGET_EM (arc_base_cpu == BASE_ARCH_em)
-#define TARGET_HS (arc_base_cpu == BASE_ARCH_hs)
+#define TARGET_ARC700 (arc_selected_cpu->arch_info->arch_id    \
+                      == BASE_ARCH_700)
+#define TARGET_EM (arc_selected_cpu->arch_info->arch_id == BASE_ARCH_em)
+#define TARGET_HS (arc_selected_cpu->arch_info->arch_id == BASE_ARCH_hs)
 #define TARGET_V2 (TARGET_EM || TARGET_HS)
 
 #ifdef ARC_MULTILIB_CPU_DEFAULT
index 4b816e668bc5576f4df30add0e7ec8405c7619cf..0e13878ff732a0b4e825ceac4fa186b0bb73bdb4 100644 (file)
@@ -47,7 +47,7 @@ arc_cpu_to_as (int argc, const char **argv)
        }
     }
 
-  switch (arc_selected_cpu->arch)
+  switch (arc_selected_cpu->arch_info->arch_id)
     {
     case BASE_ARCH_em:
       if (arc_selected_cpu->flags & FL_CD)