Commit a183b5c7 by Diego Novillo Committed by Diego Novillo

lto-opts.c (input_data_block): Move to lto-streamer-in.c.

	* lto-opts.c (input_data_block): Move to lto-streamer-in.c.
	* lto-streamer-in.c (input_string_internal): Add clarifying
	comments.
	(lto_input_data_block): Move from lto-opts.c.  Make extern.
	Update all users.
	(lto_input_string): Rename from input_string.  Make extern.
	Update all users.
	* lto-streamer-out.c (lto_output_string_with_length): Rename from
	output_string_with_length.
	Output 0 to indicate a non-NULL string.  Update all callers to
	not emit 0.
	(lto_output_string): Rename from output_string.  Make extern.
	Update all users.
	(lto_output_decl_state_streams): Make extern.
	(lto_output_decl_state_refs): Make extern.
	* lto-streamer.h (lto_input_string): Declare.
	(lto_input_data_block): Declare.
	(lto_output_string): Declare.
	(lto_output_string_with_length): Declare.
	(lto_output_decl_state_streams): Declare.
	(lto_output_decl_state_refs): Declare.

From-SVN: r171387
parent cfef45c8
2011-03-24 Diego Novillo <dnovillo@google.com>
* lto-opts.c (input_data_block): Move to lto-streamer-in.c.
* lto-streamer-in.c (input_string_internal): Add clarifying
comments.
(lto_input_data_block): Move from lto-opts.c. Make extern.
Update all users.
(lto_input_string): Rename from input_string. Make extern.
Update all users.
* lto-streamer-out.c (lto_output_string_with_length): Rename from
output_string_with_length.
Output 0 to indicate a non-NULL string. Update all callers to
not emit 0.
(lto_output_string): Rename from output_string. Make extern.
Update all users.
(lto_output_decl_state_streams): Make extern.
(lto_output_decl_state_refs): Make extern.
* lto-streamer.h (lto_input_string): Declare.
(lto_input_data_block): Declare.
(lto_output_string): Declare.
(lto_output_string_with_length): Declare.
(lto_output_decl_state_streams): Declare.
(lto_output_decl_state_refs): Declare.
2011-03-24 Richard Guenther <rguenther@suse.de> 2011-03-24 Richard Guenther <rguenther@suse.de>
PR tree-optimization/46562 PR tree-optimization/46562
......
...@@ -162,18 +162,6 @@ output_string_stream (struct lto_output_stream *stream, const char *string) ...@@ -162,18 +162,6 @@ output_string_stream (struct lto_output_stream *stream, const char *string)
output_data_stream (stream, &flag, sizeof (flag)); output_data_stream (stream, &flag, sizeof (flag));
} }
/* Read LENGTH bytes from STREAM to ADDR. */
static void
input_data_block (struct lto_input_block *ib, void *addr, size_t length)
{
size_t i;
unsigned char *const buffer = (unsigned char *const) addr;
for (i = 0; i < length; i++)
buffer[i] = lto_input_1_unsigned (ib);
}
/* Return a string from IB. The string is allocated, and the caller is /* Return a string from IB. The string is allocated, and the caller is
responsible for freeing it. */ responsible for freeing it. */
...@@ -182,15 +170,15 @@ input_string_block (struct lto_input_block *ib) ...@@ -182,15 +170,15 @@ input_string_block (struct lto_input_block *ib)
{ {
bool flag; bool flag;
input_data_block (ib, &flag, sizeof (flag)); lto_input_data_block (ib, &flag, sizeof (flag));
if (flag) if (flag)
{ {
size_t length; size_t length;
char *string; char *string;
input_data_block (ib, &length, sizeof (length)); lto_input_data_block (ib, &length, sizeof (length));
string = (char *) xcalloc (1, length + 1); string = (char *) xcalloc (1, length + 1);
input_data_block (ib, string, length); lto_input_data_block (ib, string, length);
return string; return string;
} }
...@@ -336,16 +324,16 @@ input_options (struct lto_input_block *ib) ...@@ -336,16 +324,16 @@ input_options (struct lto_input_block *ib)
{ {
size_t length, i; size_t length, i;
input_data_block (ib, &length, sizeof (length)); lto_input_data_block (ib, &length, sizeof (length));
for (i = 0; i < length; i++) for (i = 0; i < length; i++)
{ {
opt_t o; opt_t o;
input_data_block (ib, &o.type, sizeof (o.type)); lto_input_data_block (ib, &o.type, sizeof (o.type));
input_data_block (ib, &o.code, sizeof (o.code)); lto_input_data_block (ib, &o.code, sizeof (o.code));
o.arg = input_string_block (ib); o.arg = input_string_block (ib);
input_data_block (ib, &o.value, sizeof (o.value)); lto_input_data_block (ib, &o.value, sizeof (o.value));
VEC_safe_push (opt_t, heap, file_options, &o); VEC_safe_push (opt_t, heap, file_options, &o);
} }
} }
......
...@@ -140,7 +140,10 @@ input_string_internal (struct data_in *data_in, struct lto_input_block *ib, ...@@ -140,7 +140,10 @@ input_string_internal (struct data_in *data_in, struct lto_input_block *ib,
unsigned int loc; unsigned int loc;
const char *result; const char *result;
/* Read the location of the string from IB. */
loc = lto_input_uleb128 (ib); loc = lto_input_uleb128 (ib);
/* Get the string stored at location LOC in DATA_IN->STRINGS. */
LTO_INIT_INPUT_BLOCK (str_tab, data_in->strings, loc, data_in->strings_len); LTO_INIT_INPUT_BLOCK (str_tab, data_in->strings, loc, data_in->strings_len);
len = lto_input_uleb128 (&str_tab); len = lto_input_uleb128 (&str_tab);
*rlen = len; *rlen = len;
...@@ -191,10 +194,24 @@ input_identifier (struct data_in *data_in, struct lto_input_block *ib) ...@@ -191,10 +194,24 @@ input_identifier (struct data_in *data_in, struct lto_input_block *ib)
return get_identifier_with_length (ptr, len); return get_identifier_with_length (ptr, len);
} }
/* Read LENGTH bytes from STREAM to ADDR. */
void
lto_input_data_block (struct lto_input_block *ib, void *addr, size_t length)
{
size_t i;
unsigned char *const buffer = (unsigned char *const) addr;
for (i = 0; i < length; i++)
buffer[i] = lto_input_1_unsigned (ib);
}
/* Read a NULL terminated string from the string table in DATA_IN. */ /* Read a NULL terminated string from the string table in DATA_IN. */
static const char * const char *
input_string (struct data_in *data_in, struct lto_input_block *ib) lto_input_string (struct data_in *data_in, struct lto_input_block *ib)
{ {
unsigned int len; unsigned int len;
const char *ptr; const char *ptr;
...@@ -275,7 +292,7 @@ lto_input_location (struct lto_input_block *ib, struct data_in *data_in) ...@@ -275,7 +292,7 @@ lto_input_location (struct lto_input_block *ib, struct data_in *data_in)
{ {
expanded_location xloc; expanded_location xloc;
xloc.file = input_string (data_in, ib); xloc.file = lto_input_string (data_in, ib);
if (xloc.file == NULL) if (xloc.file == NULL)
return UNKNOWN_LOCATION; return UNKNOWN_LOCATION;
...@@ -2307,7 +2324,7 @@ lto_input_ts_translation_unit_decl_tree_pointers (struct lto_input_block *ib, ...@@ -2307,7 +2324,7 @@ lto_input_ts_translation_unit_decl_tree_pointers (struct lto_input_block *ib,
struct data_in *data_in, struct data_in *data_in,
tree expr) tree expr)
{ {
TRANSLATION_UNIT_LANGUAGE (expr) = xstrdup (input_string (data_in, ib)); TRANSLATION_UNIT_LANGUAGE (expr) = xstrdup (lto_input_string (data_in, ib));
VEC_safe_push (tree, gc, all_translation_units, expr); VEC_safe_push (tree, gc, all_translation_units, expr);
} }
...@@ -2590,7 +2607,7 @@ lto_get_builtin_tree (struct lto_input_block *ib, struct data_in *data_in) ...@@ -2590,7 +2607,7 @@ lto_get_builtin_tree (struct lto_input_block *ib, struct data_in *data_in)
else else
gcc_unreachable (); gcc_unreachable ();
asmname = input_string (data_in, ib); asmname = lto_input_string (data_in, ib);
if (asmname) if (asmname)
set_builtin_user_assembler_name (result, asmname); set_builtin_user_assembler_name (result, asmname);
......
...@@ -154,11 +154,11 @@ destroy_output_block (struct output_block *ob) ...@@ -154,11 +154,11 @@ destroy_output_block (struct output_block *ob)
table in OB. The string might or might not include a trailing '\0'. table in OB. The string might or might not include a trailing '\0'.
Then put the index onto the INDEX_STREAM. */ Then put the index onto the INDEX_STREAM. */
static void void
output_string_with_length (struct output_block *ob, lto_output_string_with_length (struct output_block *ob,
struct lto_output_stream *index_stream, struct lto_output_stream *index_stream,
const char *s, const char *s,
unsigned int len) unsigned int len)
{ {
struct string_slot **slot; struct string_slot **slot;
struct string_slot s_slot; struct string_slot s_slot;
...@@ -170,6 +170,9 @@ output_string_with_length (struct output_block *ob, ...@@ -170,6 +170,9 @@ output_string_with_length (struct output_block *ob,
s_slot.len = len; s_slot.len = len;
s_slot.slot_num = 0; s_slot.slot_num = 0;
/* Indicate that this is not a NULL string. */
lto_output_uleb128_stream (index_stream, 0);
slot = (struct string_slot **) htab_find_slot (ob->string_hash_table, slot = (struct string_slot **) htab_find_slot (ob->string_hash_table,
&s_slot, INSERT); &s_slot, INSERT);
if (*slot == NULL) if (*slot == NULL)
...@@ -200,16 +203,14 @@ output_string_with_length (struct output_block *ob, ...@@ -200,16 +203,14 @@ output_string_with_length (struct output_block *ob,
/* Output the '\0' terminated STRING to the string /* Output the '\0' terminated STRING to the string
table in OB. Then put the index onto the INDEX_STREAM. */ table in OB. Then put the index onto the INDEX_STREAM. */
static void void
output_string (struct output_block *ob, lto_output_string (struct output_block *ob,
struct lto_output_stream *index_stream, struct lto_output_stream *index_stream,
const char *string) const char *string)
{ {
if (string) if (string)
{ lto_output_string_with_length (ob, index_stream, string,
lto_output_uleb128_stream (index_stream, 0); strlen (string) + 1);
output_string_with_length (ob, index_stream, string, strlen (string) + 1);
}
else else
lto_output_uleb128_stream (index_stream, 1); lto_output_uleb128_stream (index_stream, 1);
} }
...@@ -224,12 +225,9 @@ output_string_cst (struct output_block *ob, ...@@ -224,12 +225,9 @@ output_string_cst (struct output_block *ob,
tree string) tree string)
{ {
if (string) if (string)
{ lto_output_string_with_length (ob, index_stream,
lto_output_uleb128_stream (index_stream, 0); TREE_STRING_POINTER (string),
output_string_with_length (ob, index_stream, TREE_STRING_LENGTH (string ));
TREE_STRING_POINTER (string),
TREE_STRING_LENGTH (string));
}
else else
lto_output_uleb128_stream (index_stream, 1); lto_output_uleb128_stream (index_stream, 1);
} }
...@@ -244,12 +242,9 @@ output_identifier (struct output_block *ob, ...@@ -244,12 +242,9 @@ output_identifier (struct output_block *ob,
tree id) tree id)
{ {
if (id) if (id)
{ lto_output_string_with_length (ob, index_stream,
lto_output_uleb128_stream (index_stream, 0); IDENTIFIER_POINTER (id),
output_string_with_length (ob, index_stream, IDENTIFIER_LENGTH (id));
IDENTIFIER_POINTER (id),
IDENTIFIER_LENGTH (id));
}
else else
lto_output_uleb128_stream (index_stream, 1); lto_output_uleb128_stream (index_stream, 1);
} }
...@@ -611,13 +606,13 @@ lto_output_location (struct output_block *ob, location_t loc) ...@@ -611,13 +606,13 @@ lto_output_location (struct output_block *ob, location_t loc)
if (loc == UNKNOWN_LOCATION) if (loc == UNKNOWN_LOCATION)
{ {
output_string (ob, ob->main_stream, NULL); lto_output_string (ob, ob->main_stream, NULL);
return; return;
} }
xloc = expand_location (loc); xloc = expand_location (loc);
output_string (ob, ob->main_stream, xloc.file); lto_output_string (ob, ob->main_stream, xloc.file);
output_sleb128 (ob, xloc.line); output_sleb128 (ob, xloc.line);
output_sleb128 (ob, xloc.column); output_sleb128 (ob, xloc.column);
output_sleb128 (ob, xloc.sysp); output_sleb128 (ob, xloc.sysp);
...@@ -1155,7 +1150,7 @@ static void ...@@ -1155,7 +1150,7 @@ static void
lto_output_ts_translation_unit_decl_tree_pointers (struct output_block *ob, lto_output_ts_translation_unit_decl_tree_pointers (struct output_block *ob,
tree expr) tree expr)
{ {
output_string (ob, ob->main_stream, TRANSLATION_UNIT_LANGUAGE (expr)); lto_output_string (ob, ob->main_stream, TRANSLATION_UNIT_LANGUAGE (expr));
} }
/* Helper for lto_output_tree. Write all pointer fields in EXPR to output /* Helper for lto_output_tree. Write all pointer fields in EXPR to output
...@@ -1320,12 +1315,12 @@ lto_output_builtin_tree (struct output_block *ob, tree expr, int ix) ...@@ -1320,12 +1315,12 @@ lto_output_builtin_tree (struct output_block *ob, tree expr, int ix)
reader side from adding a second '*', we omit it here. */ reader side from adding a second '*', we omit it here. */
const char *str = IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (expr)); const char *str = IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (expr));
if (strlen (str) > 1 && str[0] == '*') if (strlen (str) > 1 && str[0] == '*')
output_string (ob, ob->main_stream, &str[1]); lto_output_string (ob, ob->main_stream, &str[1]);
else else
output_string (ob, ob->main_stream, NULL); lto_output_string (ob, ob->main_stream, NULL);
} }
else else
output_string (ob, ob->main_stream, NULL); lto_output_string (ob, ob->main_stream, NULL);
} }
...@@ -1745,7 +1740,7 @@ output_gimple_stmt (struct output_block *ob, gimple stmt) ...@@ -1745,7 +1740,7 @@ output_gimple_stmt (struct output_block *ob, gimple stmt)
lto_output_uleb128_stream (ob->main_stream, gimple_asm_noutputs (stmt)); lto_output_uleb128_stream (ob->main_stream, gimple_asm_noutputs (stmt));
lto_output_uleb128_stream (ob->main_stream, gimple_asm_nclobbers (stmt)); lto_output_uleb128_stream (ob->main_stream, gimple_asm_nclobbers (stmt));
lto_output_uleb128_stream (ob->main_stream, gimple_asm_nlabels (stmt)); lto_output_uleb128_stream (ob->main_stream, gimple_asm_nlabels (stmt));
output_string (ob, ob->main_stream, gimple_asm_string (stmt)); lto_output_string (ob, ob->main_stream, gimple_asm_string (stmt));
/* Fallthru */ /* Fallthru */
case GIMPLE_ASSIGN: case GIMPLE_ASSIGN:
...@@ -2342,7 +2337,7 @@ write_global_references (struct output_block *ob, ...@@ -2342,7 +2337,7 @@ write_global_references (struct output_block *ob,
/* Write all the streams in an lto_out_decl_state STATE using /* Write all the streams in an lto_out_decl_state STATE using
output block OB and output stream OUT_STREAM. */ output block OB and output stream OUT_STREAM. */
static void void
lto_output_decl_state_streams (struct output_block *ob, lto_output_decl_state_streams (struct output_block *ob,
struct lto_out_decl_state *state) struct lto_out_decl_state *state)
{ {
...@@ -2356,7 +2351,7 @@ lto_output_decl_state_streams (struct output_block *ob, ...@@ -2356,7 +2351,7 @@ lto_output_decl_state_streams (struct output_block *ob,
/* Write all the references in an lto_out_decl_state STATE using /* Write all the references in an lto_out_decl_state STATE using
output block OB and output stream OUT_STREAM. */ output block OB and output stream OUT_STREAM. */
static void void
lto_output_decl_state_refs (struct output_block *ob, lto_output_decl_state_refs (struct output_block *ob,
struct lto_output_stream *out_stream, struct lto_output_stream *out_stream,
struct lto_out_decl_state *state) struct lto_out_decl_state *state)
......
...@@ -862,6 +862,9 @@ extern struct data_in *lto_data_in_create (struct lto_file_decl_data *, ...@@ -862,6 +862,9 @@ extern struct data_in *lto_data_in_create (struct lto_file_decl_data *,
const char *, unsigned, const char *, unsigned,
VEC(ld_plugin_symbol_resolution_t,heap) *); VEC(ld_plugin_symbol_resolution_t,heap) *);
extern void lto_data_in_delete (struct data_in *); extern void lto_data_in_delete (struct data_in *);
extern const char *lto_input_string (struct data_in *,
struct lto_input_block *);
extern void lto_input_data_block (struct lto_input_block *, void *, size_t);
/* In lto-streamer-out.c */ /* In lto-streamer-out.c */
...@@ -870,6 +873,18 @@ extern struct output_block *create_output_block (enum lto_section_type); ...@@ -870,6 +873,18 @@ extern struct output_block *create_output_block (enum lto_section_type);
extern void destroy_output_block (struct output_block *); extern void destroy_output_block (struct output_block *);
extern void lto_output_tree (struct output_block *, tree, bool); extern void lto_output_tree (struct output_block *, tree, bool);
extern void produce_asm (struct output_block *ob, tree fn); extern void produce_asm (struct output_block *ob, tree fn);
extern void lto_output_string (struct output_block *,
struct lto_output_stream *,
const char *);
extern void lto_output_string_with_length (struct output_block *,
struct lto_output_stream *,
const char *,
unsigned int);
void lto_output_decl_state_streams (struct output_block *,
struct lto_out_decl_state *);
void lto_output_decl_state_refs (struct output_block *,
struct lto_output_stream *,
struct lto_out_decl_state *);
/* In lto-cgraph.c */ /* In lto-cgraph.c */
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment