re PR lto/50490 (ICE when compiling libglib2.0 with LTO, tree code 'optimization_node' is not supported in LTO streams)
2012-01-05 Richard Guenther <rguenther@suse.de> PR lto/50490 * tree-streamer-out.c (write_ts_optimization): New function. (streamer_write_tree_body): Call it. * tree-streamer-in.c (lto_input_ts_optimization): New function. (streamer_read_tree_body): Call it. * lto-streamer-out.c (lto_is_streamable): Handle OPTIMIZATION_NODE. From-SVN: r182917
This commit is contained in:
parent
c4207e25d3
commit
10d12a3eeb
@ -1,3 +1,12 @@
|
||||
2012-01-05 Richard Guenther <rguenther@suse.de>
|
||||
|
||||
PR lto/50490
|
||||
* tree-streamer-out.c (write_ts_optimization): New function.
|
||||
(streamer_write_tree_body): Call it.
|
||||
* tree-streamer-in.c (lto_input_ts_optimization): New function.
|
||||
(streamer_read_tree_body): Call it.
|
||||
* lto-streamer-out.c (lto_is_streamable): Handle OPTIMIZATION_NODE.
|
||||
|
||||
2012-01-05 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
PR middle-end/51761
|
||||
|
@ -304,7 +304,6 @@ lto_is_streamable (tree expr)
|
||||
&& code != WITH_CLEANUP_EXPR
|
||||
&& code != STATEMENT_LIST
|
||||
&& code != OMP_CLAUSE
|
||||
&& code != OPTIMIZATION_NODE
|
||||
&& (code == CASE_LABEL_EXPR
|
||||
|| code == DECL_EXPR
|
||||
|| TREE_CODE_CLASS (code) != tcc_statement);
|
||||
|
@ -903,6 +903,23 @@ lto_input_ts_target_option (struct lto_input_block *ib, tree expr)
|
||||
fatal_error ("cl_target_option size mismatch in LTO reader and writer");
|
||||
}
|
||||
|
||||
/* Input a TS_OPTIMIZATION tree from IB into EXPR. */
|
||||
|
||||
static void
|
||||
lto_input_ts_optimization (struct lto_input_block *ib, tree expr)
|
||||
{
|
||||
unsigned i, len;
|
||||
struct bitpack_d bp;
|
||||
struct cl_optimization *t = TREE_OPTIMIZATION (expr);
|
||||
|
||||
bp = streamer_read_bitpack (ib);
|
||||
len = sizeof (struct cl_optimization);
|
||||
for (i = 0; i < len; i++)
|
||||
((unsigned char *)t)[i] = bp_unpack_value (&bp, 8);
|
||||
if (bp_unpack_value (&bp, 32) != 0x12345678)
|
||||
fatal_error ("cl_optimization size mismatch in LTO reader and writer");
|
||||
}
|
||||
|
||||
/* Input a TS_TRANSLATION_UNIT_DECL tree from IB and DATA_IN into EXPR. */
|
||||
|
||||
static void
|
||||
@ -979,6 +996,9 @@ streamer_read_tree_body (struct lto_input_block *ib, struct data_in *data_in,
|
||||
if (CODE_CONTAINS_STRUCT (code, TS_TARGET_OPTION))
|
||||
lto_input_ts_target_option (ib, expr);
|
||||
|
||||
if (CODE_CONTAINS_STRUCT (code, TS_OPTIMIZATION))
|
||||
lto_input_ts_optimization (ib, expr);
|
||||
|
||||
if (CODE_CONTAINS_STRUCT (code, TS_TRANSLATION_UNIT_DECL))
|
||||
lto_input_ts_translation_unit_decl_tree_pointers (ib, data_in, expr);
|
||||
}
|
||||
|
@ -767,6 +767,27 @@ write_ts_target_option (struct output_block *ob, tree expr)
|
||||
streamer_write_bitpack (&bp);
|
||||
}
|
||||
|
||||
/* Write a TS_OPTIMIZATION tree in EXPR to OB. */
|
||||
|
||||
static void
|
||||
write_ts_optimization (struct output_block *ob, tree expr)
|
||||
{
|
||||
struct cl_optimization *t = TREE_OPTIMIZATION (expr);
|
||||
struct bitpack_d bp;
|
||||
unsigned i, len;
|
||||
|
||||
/* The cl_optimizaation is generated by the options
|
||||
awk script, so we just recreate a byte-by-byte copy here. */
|
||||
|
||||
bp = bitpack_create (ob->main_stream);
|
||||
len = sizeof (struct cl_optimization);
|
||||
for (i = 0; i < len; i++)
|
||||
bp_pack_value (&bp, ((unsigned char *)t)[i], 8);
|
||||
/* Catch struct size mismatches between reader and writer. */
|
||||
bp_pack_value (&bp, 0x12345678, 32);
|
||||
streamer_write_bitpack (&bp);
|
||||
}
|
||||
|
||||
/* Write a TS_TRANSLATION_UNIT_DECL tree in EXPR to OB. */
|
||||
|
||||
static void
|
||||
@ -841,6 +862,9 @@ streamer_write_tree_body (struct output_block *ob, tree expr, bool ref_p)
|
||||
if (CODE_CONTAINS_STRUCT (code, TS_TARGET_OPTION))
|
||||
write_ts_target_option (ob, expr);
|
||||
|
||||
if (CODE_CONTAINS_STRUCT (code, TS_OPTIMIZATION))
|
||||
write_ts_optimization (ob, expr);
|
||||
|
||||
if (CODE_CONTAINS_STRUCT (code, TS_TRANSLATION_UNIT_DECL))
|
||||
write_ts_translation_unit_decl_tree_pointers (ob, expr);
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user