Rietveld Code Review Tool
Help | Bug tracker | Discussion group | Source code | Sign in
(3)

Issue 5249058: [lto] Add streamer hooks for emitting location_t (Closed)

Can't Edit
Can't Publish+Mail
Start Review
Created:
13 years, 6 months ago by Diego Novillo
Modified:
13 years, 6 months ago
Reviewers:
CC:
rguenther_suse.de, gcc-patches_gcc.gnu.org
Visibility:
Public.

Patch Set 1 #

Unified diffs Side-by-side diffs Delta from patch set Stats (+33 lines, -8 lines) Patch
M gcc/lto-streamer-in.c View 2 chunks +13 lines, -4 lines 0 comments Download
M gcc/lto-streamer-out.c View 1 chunk +10 lines, -4 lines 0 comments Download
M gcc/streamer-hooks.h View 1 chunk +10 lines, -0 lines 0 comments Download

Messages

Total messages: 1
Diego Novillo
13 years, 6 months ago (2011-10-12 22:50:18 UTC) #1
The pph streamer does not write out expanded locations.  It emits the
line map tables exactly as it found them on the initial compile so
that it can recreate them when the pph image is restored.

This allows it to emit the location_t as integers and produce the same
line locations than the original compile.

This patch adds the two hooks needed to make sure that the tree
streamer writes locations using the pph routines.

Barring any objections, I'll commit this patch to mainline in the next
couple of days.


Diego.

	* 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.

diff --git a/gcc/lto-streamer-in.c b/gcc/lto-streamer-in.c
index d4e80c7..f18b944 100644
--- a/gcc/lto-streamer-in.c
+++ b/gcc/lto-streamer-in.c
@@ -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);
+    }
 }
 
 
diff --git a/gcc/lto-streamer-out.c b/gcc/lto-streamer-out.c
index c14b3a9..4d88f62 100644
--- a/gcc/lto-streamer-out.c
+++ b/gcc/lto-streamer-out.c
@@ -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);
+    }
 }
 
 
diff --git a/gcc/streamer-hooks.h b/gcc/streamer-hooks.h
index b4c6562..0c1d483 100644
--- a/gcc/streamer-hooks.h
+++ b/gcc/streamer-hooks.h
@@ -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) \

--
This patch is available for review at http://codereview.appspot.com/5249058
Sign in to reply to this message.

Powered by Google App Engine
RSS Feeds Recent Issues | This issue
This is Rietveld f62528b