optc-save-gen.awk: Generate cl_target_option_free and cl_optimization_option_free.
authorJan Hubicka <jh@suse.cz>
Thu, 7 Nov 2019 17:06:43 +0000 (18:06 +0100)
committerJan Hubicka <hubicka@gcc.gnu.org>
Thu, 7 Nov 2019 17:06:43 +0000 (17:06 +0000)
* optc-save-gen.awk: Generate cl_target_option_free
and cl_optimization_option_free.
* opth-en.awk: Declare cl_target_option_free
and cl_optimization_option_free.
* tree.c (free_node): Use it.

From-SVN: r277926

gcc/ChangeLog
gcc/optc-save-gen.awk
gcc/opth-gen.awk
gcc/tree.c

index 6fb0facd878c8c5b1cc79737252269c8d654b202..bfe0ebcb010a6d5945f12a122b1820c95e9954c1 100644 (file)
@@ -1,3 +1,11 @@
+2019-11-07  Jan Hubicka  <jh@suse.cz>
+
+       * optc-save-gen.awk: Generate cl_target_option_free
+       and cl_optimization_option_free.
+       * opth-en.awk: Declare cl_target_option_free
+       and cl_optimization_option_free.
+       * tree.c (free_node): Use it.
+
 2019-11-06  Jan Hubicka  <jh@suse.cz>
 
        * lto-streamer-in.c: Include alloc-pool.h.
index cf1c3689effd3f6ea95e0a1df8828f44d7737459..1c23836c7f11be25d86b545c42607de14ca2df85 100644 (file)
@@ -802,6 +802,17 @@ for (i = 0; i < n_target_val; i++) {
 
 print "}";
 
+print "/* free heap memory used by target options  */";
+print "void";
+print "cl_target_option_free (struct cl_target_option *ptr ATTRIBUTE_UNUSED)";
+print "{";
+for (i = 0; i < n_target_str; i++) {
+       name = var_target_str[i]
+       print "  if (ptr->" name")";
+       print "    free (const_cast <char *>(ptr->" name"));";
+}
+print "}";
+
 n_opt_val = 4;
 var_opt_val[0] = "x_optimize"
 var_opt_val_type[0] = "char "
@@ -921,4 +932,18 @@ for (i = 0; i < n_opt_val; i++) {
              print "  ptr->" name" = (" var_opt_val_type[i] ") bp_unpack_value (bp, 64);";
 }
 print "}";
+print "/* Free heap memory used by optimization options  */";
+print "void";
+print "cl_optimization_option_free (struct cl_optimization *ptr ATTRIBUTE_UNUSED)";
+print "{";
+for (i = 0; i < n_opt_val; i++) {
+       name = var_opt_val[i]
+       otype = var_opt_val_type[i];
+       if (otype ~ "^const char \\**$")
+       {
+             print "  if (ptr->" name")";
+             print "    free (const_cast <char *>(ptr->" name"));";
+       }
+}
+print "}";
 }
index e19626a02dfd9e0a586aba6273ea1b027f7a02cd..218e772810e89fb13b9e5f711d7a171727d09ec5 100644 (file)
@@ -303,6 +303,9 @@ print "";
 print "/* Compare two target option variables from a structure.  */";
 print "extern bool cl_target_option_eq (const struct cl_target_option *, const struct cl_target_option *);";
 print "";
+print "/* Free heap memory used by target option variables.  */";
+print "extern void cl_target_option_free (struct cl_target_option *);";
+print "";
 print "/* Hash option variables from a structure.  */";
 print "extern hashval_t cl_target_option_hash (const struct cl_target_option *);";
 print "";
@@ -312,6 +315,9 @@ print "";
 print "/* Compare two optimization options.  */";
 print "extern bool cl_optimization_option_eq (cl_optimization const *ptr1, cl_optimization const *ptr2);"
 print "";
+print "/* Free heap memory used by optimization options.  */";
+print "extern void cl_optimization_option_free (cl_optimization *ptr1);"
+print "";
 print "/* Generator files may not have access to location_t, and don't need these.  */"
 print "#if defined(UNKNOWN_LOCATION)"
 print "bool                                                                  "
index d08141bcfc2bdc467962a550b77d6a6dc713d3c8..d2c9fe35995332eb31e91f1157cef558698a61d8 100644 (file)
@@ -1170,6 +1170,10 @@ free_node (tree node)
     vec_free (BLOCK_NONLOCALIZED_VARS (node));
   else if (code == TREE_BINFO)
     vec_free (BINFO_BASE_ACCESSES (node));
+  else if (code == OPTIMIZATION_NODE)
+    cl_optimization_option_free (TREE_OPTIMIZATION (node));
+  else if (code == TARGET_OPTION_NODE)
+    cl_target_option_free (TREE_TARGET_OPTION (node));
   ggc_free (node);
 }
 \f