This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
[PATCH][LTO] Move and rename data streamer stuff
- From: Richard Biener <rguenther at suse dot de>
- To: gcc-patches at gcc dot gnu dot org
- Date: Thu, 31 Jul 2014 09:44:26 +0200 (CEST)
- Subject: [PATCH][LTO] Move and rename data streamer stuff
- Authentication-results: sourceware.org; auth=none
This renames lto_output_data_stream to streamer_write_data_stream
and moves it, together with lto_append_block, to data-streamer-out.[ch]
where it belongs.
Bootstrapped and tested on x86_64-unknown-linux-gnu, applied.
Richard.
2014-07-31 Richard Biener <rguenther@suse.de>
* data-streamer.h (streamer_write_data_stream): Declare here,
renamed from ...
* lto-streamer.h (lto_output_data_stream): ... this. Remove.
* lto-cgraph.c (lto_output_node): Adjust.
(lto_output_varpool_node): Likewise.
* data-streamer-out.c (streamer_string_index): Likewise.
(streamer_write_data_stream, lto_append_block): Move from ...
* lto-section-out.c (lto_output_data_stream,
lto_append_block): ... here.
Index: gcc/data-streamer.h
===================================================================
*** gcc/data-streamer.h (revision 213253)
--- gcc/data-streamer.h (working copy)
*************** void streamer_write_uhwi_stream (struct
*** 70,75 ****
--- 70,77 ----
unsigned HOST_WIDE_INT);
void streamer_write_hwi_stream (struct lto_output_stream *, HOST_WIDE_INT);
void streamer_write_gcov_count_stream (struct lto_output_stream *, gcov_type);
+ void streamer_write_data_stream (struct lto_output_stream *, const void *,
+ size_t);
/* In data-streamer-in.c */
const char *string_for_index (struct data_in *, unsigned int, unsigned int *);
Index: gcc/lto-streamer.h
===================================================================
*** gcc/lto-streamer.h (revision 213253)
--- gcc/lto-streamer.h (working copy)
*************** extern void lto_begin_section (const cha
*** 779,786 ****
extern void lto_end_section (void);
extern void lto_write_data (const void *, unsigned int);
extern void lto_write_stream (struct lto_output_stream *);
- extern void lto_output_data_stream (struct lto_output_stream *, const void *,
- size_t);
extern bool lto_output_decl_index (struct lto_output_stream *,
struct lto_tree_ref_encoder *,
tree, unsigned int *);
--- 779,784 ----
Index: gcc/lto-cgraph.c
===================================================================
*** gcc/lto-cgraph.c (revision 213253)
--- gcc/lto-cgraph.c (working copy)
*************** lto_output_node (struct lto_simple_outpu
*** 488,494 ****
comdat = IDENTIFIER_POINTER (group);
else
comdat = "";
! lto_output_data_stream (ob->main_stream, comdat, strlen (comdat) + 1);
if (group)
{
--- 488,494 ----
comdat = IDENTIFIER_POINTER (group);
else
comdat = "";
! streamer_write_data_stream (ob->main_stream, comdat, strlen (comdat) + 1);
if (group)
{
*************** lto_output_node (struct lto_simple_outpu
*** 546,552 ****
bp_pack_enum (&bp, ld_plugin_symbol_resolution,
LDPR_NUM_KNOWN, node->resolution);
streamer_write_bitpack (&bp);
! lto_output_data_stream (ob->main_stream, section, strlen (section) + 1);
if (node->thunk.thunk_p && !boundary_p)
{
--- 546,552 ----
bp_pack_enum (&bp, ld_plugin_symbol_resolution,
LDPR_NUM_KNOWN, node->resolution);
streamer_write_bitpack (&bp);
! streamer_write_data_stream (ob->main_stream, section, strlen (section) + 1);
if (node->thunk.thunk_p && !boundary_p)
{
*************** lto_output_varpool_node (struct lto_simp
*** 622,628 ****
comdat = IDENTIFIER_POINTER (group);
else
comdat = "";
! lto_output_data_stream (ob->main_stream, comdat, strlen (comdat) + 1);
if (group)
{
--- 622,628 ----
comdat = IDENTIFIER_POINTER (group);
else
comdat = "";
! streamer_write_data_stream (ob->main_stream, comdat, strlen (comdat) + 1);
if (group)
{
*************** lto_output_varpool_node (struct lto_simp
*** 640,646 ****
section = node->get_section ();
if (!section)
section = "";
! lto_output_data_stream (ob->main_stream, section, strlen (section) + 1);
streamer_write_enum (ob->main_stream, ld_plugin_symbol_resolution,
LDPR_NUM_KNOWN, node->resolution);
--- 640,646 ----
section = node->get_section ();
if (!section)
section = "";
! streamer_write_data_stream (ob->main_stream, section, strlen (section) + 1);
streamer_write_enum (ob->main_stream, ld_plugin_symbol_resolution,
LDPR_NUM_KNOWN, node->resolution);
Index: gcc/data-streamer-out.c
===================================================================
*** gcc/data-streamer-out.c (revision 213253)
--- gcc/data-streamer-out.c (working copy)
*************** along with GCC; see the file COPYING3.
*** 32,37 ****
--- 32,80 ----
#include "gimple.h"
#include "data-streamer.h"
+
+ /* Adds a new block to output stream OBS. */
+
+ void
+ lto_append_block (struct lto_output_stream *obs)
+ {
+ struct lto_char_ptr_base *new_block;
+
+ gcc_assert (obs->left_in_block == 0);
+
+ if (obs->first_block == NULL)
+ {
+ /* This is the first time the stream has been written
+ into. */
+ obs->block_size = 1024;
+ new_block = (struct lto_char_ptr_base*) xmalloc (obs->block_size);
+ obs->first_block = new_block;
+ }
+ else
+ {
+ struct lto_char_ptr_base *tptr;
+ /* Get a new block that is twice as big as the last block
+ and link it into the list. */
+ obs->block_size *= 2;
+ new_block = (struct lto_char_ptr_base*) xmalloc (obs->block_size);
+ /* The first bytes of the block are reserved as a pointer to
+ the next block. Set the chain of the full block to the
+ pointer to the new block. */
+ tptr = obs->current_block;
+ tptr->ptr = (char *) new_block;
+ }
+
+ /* Set the place for the next char at the first position after the
+ chain to the next block. */
+ obs->current_pointer
+ = ((char *) new_block) + sizeof (struct lto_char_ptr_base);
+ obs->current_block = new_block;
+ /* Null out the newly allocated block's pointer to the next block. */
+ new_block->ptr = NULL;
+ obs->left_in_block = obs->block_size - sizeof (struct lto_char_ptr_base);
+ }
+
+
/* Return index used to reference STRING of LEN characters in the string table
in OB. The string might or might not include a trailing '\0'.
Then put the index onto the INDEX_STREAM.
*************** streamer_string_index (struct output_blo
*** 71,77 ****
new_slot->slot_num = start;
*slot = new_slot;
streamer_write_uhwi_stream (string_stream, len);
! lto_output_data_stream (string_stream, string, len);
return start + 1;
}
else
--- 114,120 ----
new_slot->slot_num = start;
*slot = new_slot;
streamer_write_uhwi_stream (string_stream, len);
! streamer_write_data_stream (string_stream, string, len);
return start + 1;
}
else
*************** streamer_write_gcov_count_stream (struct
*** 304,306 ****
--- 347,380 ----
gcc_assert ((HOST_WIDE_INT) work == work);
streamer_write_hwi_stream (obs, work);
}
+
+ /* Write raw DATA of length LEN to the output block OB. */
+
+ void
+ streamer_write_data_stream (struct lto_output_stream *obs, const void *data,
+ size_t len)
+ {
+ while (len)
+ {
+ size_t copy;
+
+ /* No space left. */
+ if (obs->left_in_block == 0)
+ lto_append_block (obs);
+
+ /* Determine how many bytes to copy in this loop. */
+ if (len <= obs->left_in_block)
+ copy = len;
+ else
+ copy = obs->left_in_block;
+
+ /* Copy the data and do bookkeeping. */
+ memcpy (obs->current_pointer, data, copy);
+ obs->current_pointer += copy;
+ obs->total_size += copy;
+ obs->left_in_block -= copy;
+ data = (const char *) data + copy;
+ len -= copy;
+ }
+ }
+
Index: gcc/lto-section-out.c
===================================================================
*** gcc/lto-section-out.c (revision 213253)
--- gcc/lto-section-out.c (working copy)
*************** lto_write_stream (struct lto_output_stre
*** 147,225 ****
}
- /* Adds a new block to output stream OBS. */
-
- void
- lto_append_block (struct lto_output_stream *obs)
- {
- struct lto_char_ptr_base *new_block;
-
- gcc_assert (obs->left_in_block == 0);
-
- if (obs->first_block == NULL)
- {
- /* This is the first time the stream has been written
- into. */
- obs->block_size = 1024;
- new_block = (struct lto_char_ptr_base*) xmalloc (obs->block_size);
- obs->first_block = new_block;
- }
- else
- {
- struct lto_char_ptr_base *tptr;
- /* Get a new block that is twice as big as the last block
- and link it into the list. */
- obs->block_size *= 2;
- new_block = (struct lto_char_ptr_base*) xmalloc (obs->block_size);
- /* The first bytes of the block are reserved as a pointer to
- the next block. Set the chain of the full block to the
- pointer to the new block. */
- tptr = obs->current_block;
- tptr->ptr = (char *) new_block;
- }
-
- /* Set the place for the next char at the first position after the
- chain to the next block. */
- obs->current_pointer
- = ((char *) new_block) + sizeof (struct lto_char_ptr_base);
- obs->current_block = new_block;
- /* Null out the newly allocated block's pointer to the next block. */
- new_block->ptr = NULL;
- obs->left_in_block = obs->block_size - sizeof (struct lto_char_ptr_base);
- }
-
-
- /* Write raw DATA of length LEN to the output block OB. */
-
- void
- lto_output_data_stream (struct lto_output_stream *obs, const void *data,
- size_t len)
- {
- while (len)
- {
- size_t copy;
-
- /* No space left. */
- if (obs->left_in_block == 0)
- lto_append_block (obs);
-
- /* Determine how many bytes to copy in this loop. */
- if (len <= obs->left_in_block)
- copy = len;
- else
- copy = obs->left_in_block;
-
- /* Copy the data and do bookkeeping. */
- memcpy (obs->current_pointer, data, copy);
- obs->current_pointer += copy;
- obs->total_size += copy;
- obs->left_in_block -= copy;
- data = (const char *) data + copy;
- len -= copy;
- }
- }
-
-
/* Lookup NAME in ENCODER. If NAME is not found, create a new entry in
ENCODER for NAME with the next available index of ENCODER, then
print the index to OBS. True is returned if NAME was added to
--- 147,152 ----