Commit f1395d4a by Jan Hubicka Committed by Jan Hubicka

lto-cgraph.c (lto_output_edge): Use gimple_has_body_p instead of flag_wpa.


	* lto-cgraph.c (lto_output_edge): Use gimple_has_body_p instead of flag_wpa.
	* lto-streamer-out.c (lto_output): Likewise.
	* passes.c (ipa_write_optimization_summaries): Initialize statement uids.
	
	* lto.c (lto_1_to_1_map): Be prepared for node to have no file data.
	(lto_wpa_write_files): Update comments.

From-SVN: r163438
parent 12523de0
2010-08-20 Jan Hubicka <jh@suse.cz>
* lto-cgraph.c (lto_output_edge): Use gimple_has_body_p instead of flag_wpa.
* lto-streamer-out.c (lto_output): Likewise.
* passes.c (ipa_write_optimization_summaries): Initialize statement uids.
2010-08-20 Olivier Hainque <hainque@adacore.com> 2010-08-20 Olivier Hainque <hainque@adacore.com>
* tree.h (alias_diag_flags): New enum. * tree.h (alias_diag_flags): New enum.
......
...@@ -281,7 +281,8 @@ lto_output_edge (struct lto_simple_output_block *ob, struct cgraph_edge *edge, ...@@ -281,7 +281,8 @@ lto_output_edge (struct lto_simple_output_block *ob, struct cgraph_edge *edge,
lto_output_sleb128_stream (ob->main_stream, edge->count); lto_output_sleb128_stream (ob->main_stream, edge->count);
bp = bitpack_create (ob->main_stream); bp = bitpack_create (ob->main_stream);
uid = flag_wpa ? edge->lto_stmt_uid : gimple_uid (edge->call_stmt); uid = (!gimple_has_body_p (edge->caller->decl)
? edge->lto_stmt_uid : gimple_uid (edge->call_stmt));
bp_pack_value (&bp, uid, HOST_BITS_PER_INT); bp_pack_value (&bp, uid, HOST_BITS_PER_INT);
bp_pack_value (&bp, edge->inline_failed, HOST_BITS_PER_INT); bp_pack_value (&bp, edge->inline_failed, HOST_BITS_PER_INT);
bp_pack_value (&bp, edge->frequency, HOST_BITS_PER_INT); bp_pack_value (&bp, edge->frequency, HOST_BITS_PER_INT);
......
...@@ -2122,7 +2122,7 @@ lto_output (cgraph_node_set set, varpool_node_set vset) ...@@ -2122,7 +2122,7 @@ lto_output (cgraph_node_set set, varpool_node_set vset)
#endif #endif
decl_state = lto_new_out_decl_state (); decl_state = lto_new_out_decl_state ();
lto_push_out_decl_state (decl_state); lto_push_out_decl_state (decl_state);
if (!flag_wpa) if (gimple_has_body_p (node->decl))
output_function (node); output_function (node);
else else
copy_function (node); copy_function (node);
......
2010-08-20 Jan Hubicka <jh@suse.cz>
* lto.c (lto_1_to_1_map): Be prepared for node to have no file data.
(lto_wpa_write_files): Update comments.
2010-08-20 H.J. Lu <hongjiu.lu@intel.com> 2010-08-20 H.J. Lu <hongjiu.lu@intel.com>
PR bootstrap/45357 PR bootstrap/45357
......
...@@ -835,15 +835,28 @@ lto_1_to_1_map (void) ...@@ -835,15 +835,28 @@ lto_1_to_1_map (void)
continue; continue;
file_data = node->local.lto_file_data; file_data = node->local.lto_file_data;
gcc_assert (!node->same_body_alias && file_data); gcc_assert (!node->same_body_alias);
slot = pointer_map_contains (pmap, file_data); if (file_data)
if (slot) {
partition = (ltrans_partition) *slot; slot = pointer_map_contains (pmap, file_data);
if (slot)
partition = (ltrans_partition) *slot;
else
{
partition = new_partition (file_data->file_name);
slot = pointer_map_insert (pmap, file_data);
*slot = partition;
npartitions++;
}
}
else if (!file_data
&& VEC_length (ltrans_partition, ltrans_partitions))
partition = VEC_index (ltrans_partition, ltrans_partitions, 0);
else else
{ {
partition = new_partition (file_data->file_name); partition = new_partition ("");
slot = pointer_map_insert (pmap, file_data); slot = pointer_map_insert (pmap, NULL);
*slot = partition; *slot = partition;
npartitions++; npartitions++;
} }
...@@ -1089,16 +1102,13 @@ lto_wpa_write_files (void) ...@@ -1089,16 +1102,13 @@ lto_wpa_write_files (void)
timevar_push (TV_WHOPR_WPA); timevar_push (TV_WHOPR_WPA);
/* Include all inlined functions and determine what sets need to be
compiled by LTRANS. After this loop, only those sets that
contain callgraph nodes from more than one file will need to be
compiled by LTRANS. */
FOR_EACH_VEC_ELT (ltrans_partition, ltrans_partitions, i, part) FOR_EACH_VEC_ELT (ltrans_partition, ltrans_partitions, i, part)
lto_stats.num_output_cgraph_nodes += VEC_length (cgraph_node_ptr, lto_stats.num_output_cgraph_nodes += VEC_length (cgraph_node_ptr,
part->cgraph_set->nodes); part->cgraph_set->nodes);
/* After adding all inlinees, find out statics that need to be promoted /* Find out statics that need to be promoted
to globals because of cross-file inlining. */ to globals with hidden visibility because they are accessed from multiple
partitions. */
lto_promote_cross_file_statics (); lto_promote_cross_file_statics ();
timevar_pop (TV_WHOPR_WPA); timevar_pop (TV_WHOPR_WPA);
......
...@@ -1792,9 +1792,26 @@ void ...@@ -1792,9 +1792,26 @@ void
ipa_write_optimization_summaries (cgraph_node_set set, varpool_node_set vset) ipa_write_optimization_summaries (cgraph_node_set set, varpool_node_set vset)
{ {
struct lto_out_decl_state *state = lto_new_out_decl_state (); struct lto_out_decl_state *state = lto_new_out_decl_state ();
cgraph_node_set_iterator csi;
compute_ltrans_boundary (state, set, vset); compute_ltrans_boundary (state, set, vset);
lto_push_out_decl_state (state); lto_push_out_decl_state (state);
for (csi = csi_start (set); !csi_end_p (csi); csi_next (&csi))
{
struct cgraph_node *node = csi_node (csi);
/* When streaming out references to statements as part of some IPA
pass summary, the statements need to have uids assigned.
For functions newly born at WPA stage we need to initialize
the uids here. */
if (node->analyzed
&& gimple_has_body_p (node->decl))
{
push_cfun (DECL_STRUCT_FUNCTION (node->decl));
renumber_gimple_stmt_uids ();
pop_cfun ();
}
}
gcc_assert (flag_wpa); gcc_assert (flag_wpa);
ipa_write_optimization_summaries_1 (all_regular_ipa_passes, set, vset, state); ipa_write_optimization_summaries_1 (all_regular_ipa_passes, set, vset, state);
......
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