Fix option values for -march.
authorMartin Liska <mliska@suse.cz>
Thu, 22 Nov 2018 15:09:55 +0000 (16:09 +0100)
committerMartin Liska <marxin@gcc.gnu.org>
Thu, 22 Nov 2018 15:09:55 +0000 (15:09 +0000)
2018-11-22  Martin Liska  <mliska@suse.cz>

* common/config/i386/i386-common.c (processor_names): Add
static assert and add missing "znver2".
(ix86_get_valid_option_values): Add checking assert for null
values and add "native" value if feasible.
* config/i386/i386.h: Do not declare size of processor_names.
* common/config/i386/i386-common.c:
* config/i386/i386.c: Add static assert for size
of processor_cost_table.

From-SVN: r266381

gcc/ChangeLog
gcc/common/config/i386/i386-common.c
gcc/config/i386/i386.c
gcc/config/i386/i386.h

index fa41e7112e0f412d819a0fe72c339f59c95d1ac8..57962464f40eb6d5210b5e7b3e26d5bc6207dfc3 100644 (file)
@@ -1,3 +1,14 @@
+2018-11-22  Martin Liska  <mliska@suse.cz>
+
+       * common/config/i386/i386-common.c (processor_names): Add
+       static assert and add missing "znver2".
+       (ix86_get_valid_option_values): Add checking assert for null
+       values and add "native" value if feasible.
+       * config/i386/i386.h: Do not declare size of processor_names.
+       * common/config/i386/i386-common.c:
+       * config/i386/i386.c: Add static assert for size
+       of processor_cost_table.
+
 2018-11-22  Thomas Preud'homme  <thomas.preudhomme@linaro.org>
 
        * target-insns.def (stack_protect_combined_set): Define new standard
index 1017147599c5eceefc4ce356cef08ee13cd40dca..4238b43243127c773c5057ef1a98fdbd0da551a9 100644 (file)
@@ -1478,7 +1478,7 @@ i386_except_unwind_info (struct gcc_options *opts)
 #define TARGET_SUPPORTS_SPLIT_STACK ix86_supports_split_stack
 
 /* This table must be in sync with enum processor_type in i386.h.  */
-const char *const processor_names[PROCESSOR_max] =
+const char *const processor_names[] =
 {
   "generic",
   "i386",
@@ -1516,9 +1516,13 @@ const char *const processor_names[PROCESSOR_max] =
   "bdver4",
   "btver1",
   "btver2",
-  "znver1"
+  "znver1",
+  "znver2"
 };
 
+/* Guarantee that the array is aligned with enum processor_type.  */
+STATIC_ASSERT (ARRAY_SIZE (processor_names) == PROCESSOR_max);
+
 const pta processor_alias_table[] =
 {
   {"i386", PROCESSOR_I386, CPU_NONE, 0},
@@ -1734,11 +1738,24 @@ ix86_get_valid_option_values (int option_code,
     {
     case OPT_march_:
       for (unsigned i = 0; i < pta_size; i++)
-       v.safe_push (processor_alias_table[i].name);
+       {
+         const char *name = processor_alias_table[i].name;
+         gcc_checking_assert (name != NULL);
+         v.safe_push (name);
+       }
+#ifdef HAVE_LOCAL_CPU_DETECT
+      /* Add also "native" as possible value.  */
+      v.safe_push ("native");
+#endif
+
       break;
     case OPT_mtune_:
       for (unsigned i = 0; i < PROCESSOR_max; i++)
-       v.safe_push (processor_names[i]);
+       {
+         const char *name = processor_names[i];
+         gcc_checking_assert (name != NULL);
+         v.safe_push (name);
+       }
       break;
     default:
       break;
index 21eb6a2d42c7122fd73d0d3e2e6ff7a4666bb023..2f0d531427be93c5fbba51edb5dadf19aeb20392 100644 (file)
@@ -831,7 +831,7 @@ static tree ix86_veclibabi_svml (combined_fn, tree, tree);
 static tree ix86_veclibabi_acml (combined_fn, tree, tree);
 
 /* This table must be in sync with enum processor_type in i386.h.  */ 
-static const struct processor_costs *processor_cost_table[PROCESSOR_max] =
+static const struct processor_costs *processor_cost_table[] =
 {
   &generic_cost,
   &i386_cost,
@@ -872,6 +872,9 @@ static const struct processor_costs *processor_cost_table[PROCESSOR_max] =
   &znver1_cost,
   &znver2_cost
 };
+
+/* Guarantee that the array is aligned with enum processor_type.  */
+STATIC_ASSERT (ARRAY_SIZE (processor_cost_table) == PROCESSOR_max);
 \f
 static unsigned int
 rest_of_handle_insert_vzeroupper (void)
index 813c86dbdfa94cafe73d198de16ce14f1510d389..b9e726e3d2487e52a94136315d18ea1d41963a94 100644 (file)
@@ -2279,7 +2279,7 @@ enum processor_type
 };
 
 #if !defined(IN_LIBGCC2) && !defined(IN_TARGET_LIBS) && !defined(IN_RTS)
-extern const char *const processor_names[PROCESSOR_max];
+extern const char *const processor_names[];
 
 #include "wide-int-bitmask.h"