[gcc(refs/users/marxin/heads/parse-opt-and-target-opts)] Add NewTargetVariables to *_eq and *_hash functutins.

Martin Liska marxin@gcc.gnu.org
Fri Mar 5 10:23:34 GMT 2021


https://gcc.gnu.org/g:acf89b9a1a46dc4c80612a0db8e3ea95312c8132

commit acf89b9a1a46dc4c80612a0db8e3ea95312c8132
Author: Martin Liska <mliska@suse.cz>
Date:   Fri Mar 5 11:15:54 2021 +0100

    Add NewTargetVariables to *_eq and *_hash functutins.

Diff:
---
 gcc/config/i386/i386-options.c |  1 +
 gcc/optc-save-gen.awk          | 34 ++++++++++++++++++++++++++++++++++
 gcc/opth-gen.awk               |  3 +++
 3 files changed, 38 insertions(+)

diff --git a/gcc/config/i386/i386-options.c b/gcc/config/i386/i386-options.c
index 47a4e79bcb4..99072512d29 100644
--- a/gcc/config/i386/i386-options.c
+++ b/gcc/config/i386/i386-options.c
@@ -917,6 +917,7 @@ ix86_valid_target_attribute_p (tree fndecl,
 
   new_optimize = build_optimization_node (&func_options, &func_options_set);
 
+  // FIXME
   if (new_target == error_mark_node)
     ret = false;
 
diff --git a/gcc/optc-save-gen.awk b/gcc/optc-save-gen.awk
index 3ec341c322f..a0516f268e5 100644
--- a/gcc/optc-save-gen.awk
+++ b/gcc/optc-save-gen.awk
@@ -1321,6 +1321,21 @@ for (i = 0; i < n_opt_val; i++) {
 	else
 		print "  hstate.add_hwi (ptr->" name");";
 }
+
+for (i = 0; i < n_extra_new_target_vars; i++) {
+	otype = extra_new_target_var_types[i];
+	name = "x_" extra_new_target_vars[i]
+	if (otype ~ "^const char \\**$")
+	{
+		print "  if (ptr->" name")";
+		print "    hstate.add (ptr->" name", strlen (ptr->" name"));";
+		print "  else";
+		print "    hstate.add_int (0);";
+	}
+	else
+		print "  hstate.add_hwi (ptr->" name ");";
+}
+
 print "  for (size_t i = 0; i < sizeof (ptr->explicit_mask) / sizeof (ptr->explicit_mask[0]); i++)";
 print "    hstate.add_hwi (ptr->explicit_mask[i]);";
 print "  return hstate.end ();";
@@ -1350,6 +1365,25 @@ for (i = 0; i < n_opt_val; i++) {
 		print "    return false;";
 	}
 }
+
+for (i = 0; i < n_extra_new_target_vars; i++) {
+	name = "x_" extra_new_target_vars[i]
+	otype = extra_new_target_var_types[i];
+	if (otype ~ "^const char \\**$")
+	{
+		print "  if (ptr1->" name" != ptr2->" name;
+		print "      && (!ptr1->" name" || !ptr2->" name
+		print "          || strcmp (ptr1->" name", ptr2->" name ")))";
+		print "    return false;";
+	}
+	else
+	{
+		print "  if (ptr1->" name" != ptr2->" name ")";
+		print "    return false;";
+	}
+}
+
+
 print "  for (size_t i = 0; i < sizeof (ptr1->explicit_mask) / sizeof (ptr1->explicit_mask[0]); i++)";
 print "    if (ptr1->explicit_mask[i] != ptr2->explicit_mask[i])";
 print "      return false;"
diff --git a/gcc/opth-gen.awk b/gcc/opth-gen.awk
index 72e551d3eab..434af6c3cd9 100644
--- a/gcc/opth-gen.awk
+++ b/gcc/opth-gen.awk
@@ -142,10 +142,13 @@ var_opt_char[1] = "unsigned char x_optimize_size";
 var_opt_char[2] = "unsigned char x_optimize_debug";
 var_opt_char[3] = "unsigned char x_optimize_fast";
 
+print "  /* Target variables */"
 # FIXME: sort by type - likely
 for (i = 0; i < n_new_target_save; i++) {
 	print "  " new_target_save_decl[i] ";";
 }
+print "  /* End target variables */"
+print ""
 
 
 for (i = 0; i < n_opts; i++) {


More information about the Gcc-cvs mailing list