-fsave-optimization-record: compress the output using zlib
authorDavid Malcolm <dmalcolm@redhat.com>
Tue, 13 Nov 2018 15:52:45 +0000 (15:52 +0000)
committerDavid Malcolm <dmalcolm@gcc.gnu.org>
Tue, 13 Nov 2018 15:52:45 +0000 (15:52 +0000)
gcc/ChangeLog:
* doc/invoke.texi (-fsave-optimization-record): Note that the
output is compressed.
* optinfo-emit-json.cc: Include <zlib.h>.
(optrecord_json_writer::write): Compress the output.

From-SVN: r266078

gcc/ChangeLog
gcc/doc/invoke.texi
gcc/optinfo-emit-json.cc

index 670b1623ed8487a1bafdeb1888a7cc230a3b50b0..18acf495a31ec3ea47bbfad153e131fbbaa6a218 100644 (file)
@@ -1,3 +1,10 @@
+2018-11-13  David Malcolm  <dmalcolm@redhat.com>
+
+       * doc/invoke.texi (-fsave-optimization-record): Note that the
+       output is compressed.
+       * optinfo-emit-json.cc: Include <zlib.h>.
+       (optrecord_json_writer::write): Compress the output.
+
 2018-11-13  Aldy Hernandez  <aldyh@redhat.com>
 
        * tree-vrp.c (value_range_base::dump): Dump type.
index 755a00017f71a04cee1742dca8c57172573a87fa..283d20fa29620c703991e344d80eefb5af5a9acd 100644 (file)
@@ -14524,11 +14524,11 @@ dumps from the vectorizer about missed opportunities.
 
 @item -fsave-optimization-record
 @opindex fsave-optimization-record
-Write a SRCFILE.opt-record.json file detailing what optimizations
+Write a SRCFILE.opt-record.json.gz file detailing what optimizations
 were performed, for those optimizations that support @option{-fopt-info}.
 
-This option is experimental and the format of the data within the JSON
-file is subject to change.
+This option is experimental and the format of the data within the
+compressed JSON file is subject to change.
 
 It is roughly equivalent to a machine-readable version of
 @option{-fopt-info-all}, as a collection of messages with source file,
index 31029ad8479f96142fabc2db5c5d63b05b653a1b..6d4502c512940a015f610376461099545318a2ef 100644 (file)
@@ -45,6 +45,7 @@ along with GCC; see the file COPYING3.  If not see
 #include "pass_manager.h"
 #include "selftest.h"
 #include "dump-context.h"
+#include <zlib.h>
 
 /* A class for writing out optimization records in JSON format.  */
 
@@ -133,16 +134,34 @@ optrecord_json_writer::~optrecord_json_writer ()
 void
 optrecord_json_writer::write () const
 {
-  char *filename = concat (dump_base_name, ".opt-record.json", NULL);
-  FILE *outfile = fopen (filename, "w");
-  if (outfile)
+  pretty_printer pp;
+  m_root_tuple->print (&pp);
+
+  bool emitted_error = false;
+  char *filename = concat (dump_base_name, ".opt-record.json.gz", NULL);
+  gzFile outfile = gzopen (filename, "w");
+  if (outfile == NULL)
     {
-      m_root_tuple->dump (outfile);
-      fclose (outfile);
+      error_at (UNKNOWN_LOCATION, "cannot open file %qs for writing optimization records",
+               filename); // FIXME: more info?
+      goto cleanup;
     }
-  else
-    error_at (UNKNOWN_LOCATION, "unable to write optimization records to %qs",
-             filename); // FIXME: more info?
+
+  if (gzputs (outfile, pp_formatted_text (&pp)) <= 0)
+    {
+      int tmp;
+      error_at (UNKNOWN_LOCATION, "error writing optimization records to %qs: %s",
+               filename, gzerror (outfile, &tmp));
+      emitted_error = true;
+    }
+
+ cleanup:
+  if (outfile)
+    if (gzclose (outfile) != Z_OK)
+      if (!emitted_error)
+       error_at (UNKNOWN_LOCATION, "error closing optimization records %qs",
+                 filename);
+
   free (filename);
 }