]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
streamer-hooks.h (struct streamer_hooks): Add hooks input_location and output_location.
authorGabriel Charette <gchare@google.com>
Thu, 13 Oct 2011 15:40:29 +0000 (15:40 +0000)
committerDiego Novillo <dnovillo@gcc.gnu.org>
Thu, 13 Oct 2011 15:40:29 +0000 (11:40 -0400)
2011-10-12  Gabriel Charette  <gchare@google.com>
    Diego Novillo  <dnovillo@google.com>

* streamer-hooks.h (struct streamer_hooks): Add hooks
input_location and output_location.
* lto-streamer-in.c (lto_input_location): Use
streamer_hooks.input_location, if set.
* lto-streamer-out.c (lto_output_location): Use
streamer_hooks.output_location, if set.

Co-Authored-By: Diego Novillo <dnovillo@google.com>
From-SVN: r179927

gcc/ChangeLog
gcc/lto-streamer-in.c
gcc/lto-streamer-out.c
gcc/streamer-hooks.h

index 6b0423a541eb779549afbfc88da72577a130041a..bc917aec1f9c1466248abc8248b6b58b84f59a0f 100644 (file)
@@ -1,3 +1,13 @@
+2011-10-13  Gabriel Charette  <gchare@google.com>
+           Diego Novillo  <dnovillo@google.com>
+
+       * streamer-hooks.h (struct streamer_hooks): Add hooks
+       input_location and output_location.
+       * lto-streamer-in.c (lto_input_location): Use
+       streamer_hooks.input_location, if set.
+       * lto-streamer-out.c (lto_output_location): Use
+       streamer_hooks.output_location, if set.
+
 2011-10-13  Richard Guenther  <rguenther@suse.de>
 
        PR tree-optimization/50712
index d4e80c795735bba58301677f9dcc5ac98050dadc..f18b944ef95f753b754b9740f0a0fe62d13d0bc4 100644 (file)
@@ -50,6 +50,7 @@ along with GCC; see the file COPYING3.  If not see
 #include "lto-streamer.h"
 #include "tree-streamer.h"
 #include "tree-pass.h"
+#include "streamer-hooks.h"
 
 /* The table to hold the file names.  */
 static htab_t file_name_hash_table;
@@ -180,15 +181,23 @@ lto_input_location_bitpack (struct data_in *data_in, struct bitpack_d *bp)
 }
 
 
-/* Read a location from input block IB.  */
+/* Read a location from input block IB.
+   If the input_location streamer hook exists, call it.
+   Otherwise, proceed with reading the location from the
+   expanded location bitpack.  */
 
 location_t
 lto_input_location (struct lto_input_block *ib, struct data_in *data_in)
 {
-  struct bitpack_d bp;
+  if (streamer_hooks.input_location)
+    return streamer_hooks.input_location (ib, data_in);
+  else
+    {
+      struct bitpack_d bp;
 
-  bp = streamer_read_bitpack (ib);
-  return lto_input_location_bitpack (data_in, &bp);
+      bp = streamer_read_bitpack (ib);
+      return lto_input_location_bitpack (data_in, &bp);
+    }
 }
 
 
index c14b3a98df656c9cfcfa9a9021e5246fdb798091..4d88f62d0913df93a1866f948d28da636cf38d4a 100644 (file)
@@ -172,15 +172,21 @@ lto_output_location_bitpack (struct bitpack_d *bp,
 
 
 /* Emit location LOC to output block OB.
-   When bitpack is handy, it is more space effecient to call
+   If the output_location streamer hook exists, call it.
+   Otherwise, when bitpack is handy, it is more space efficient to call
    lto_output_location_bitpack with existing bitpack.  */
 
 void
 lto_output_location (struct output_block *ob, location_t loc)
 {
-  struct bitpack_d bp = bitpack_create (ob->main_stream);
-  lto_output_location_bitpack (&bp, ob, loc);
-  streamer_write_bitpack (&bp);
+  if (streamer_hooks.output_location)
+    streamer_hooks.output_location (ob, loc);
+  else
+    {
+      struct bitpack_d bp = bitpack_create (ob->main_stream);
+      lto_output_location_bitpack (&bp, ob, loc);
+      streamer_write_bitpack (&bp);
+    }
 }
 
 
index b4c65629e4758fe750ab6d6fb94fd548953c577b..0c1d483ac6ac763b06e2050cfe5e7cb578160f1b 100644 (file)
@@ -51,6 +51,16 @@ struct streamer_hooks {
      and descriptors needed by the unpickling routines.  It returns the
      tree instantiated from the stream.  */
   tree (*read_tree) (struct lto_input_block *, struct data_in *);
+
+  /* [OPT] Called by lto_input_location to retrieve the source location of the
+     tree currently being read. If this hook returns NULL, lto_input_location
+     defaults to calling lto_input_location_bitpack.  */
+  location_t (*input_location) (struct lto_input_block *, struct data_in *);
+
+  /* [OPT] Called by lto_output_location to write the source_location of the
+     tree currently being written. If this hook returns NULL,
+     lto_output_location defaults to calling lto_output_location_bitpack.  */
+  void (*output_location) (struct output_block *, location_t);
 };
 
 #define stream_write_tree(OB, EXPR, REF_P) \