re PR lto/47162 (LTO is broken)
Fix PR lto/47162. 2011-01-05 Martin Jambor <mjambor@suse.cz> PR lto/47162 * lto-cgraph.c (output_cgraph_opt_summary_p): Also check for thunk deltas on streamed outgoing edges. (output_node_opt_summary): Output info for outgoing edges only when the node is in new parameter set. (output_cgraph_opt_summary): New parameter set, passed to the two aforementioned functions. Update its forward declaration and its callee too. From-SVN: r168515
This commit is contained in:
parent
7bd1115736
commit
644e637fca
@ -1,3 +1,14 @@
|
|||||||
|
2011-01-05 Martin Jambor <mjambor@suse.cz>
|
||||||
|
|
||||||
|
PR lto/47162
|
||||||
|
* lto-cgraph.c (output_cgraph_opt_summary_p): Also check for thunk
|
||||||
|
deltas on streamed outgoing edges.
|
||||||
|
(output_node_opt_summary): Output info for outgoing edges only when
|
||||||
|
the node is in new parameter set.
|
||||||
|
(output_cgraph_opt_summary): New parameter set, passed to the two
|
||||||
|
aforementioned functions. Update its forward declaration and its
|
||||||
|
callee too.
|
||||||
|
|
||||||
2011-01-05 Tom Tromey <tromey@redhat.com>
|
2011-01-05 Tom Tromey <tromey@redhat.com>
|
||||||
|
|
||||||
* c-parser.c (c_parser_omp_atomic): Pass location of assignment
|
* c-parser.c (c_parser_omp_atomic): Pass location of assignment
|
||||||
|
@ -46,7 +46,7 @@ along with GCC; see the file COPYING3. If not see
|
|||||||
#include "gcov-io.h"
|
#include "gcov-io.h"
|
||||||
|
|
||||||
static void output_varpool (cgraph_node_set, varpool_node_set);
|
static void output_varpool (cgraph_node_set, varpool_node_set);
|
||||||
static void output_cgraph_opt_summary (void);
|
static void output_cgraph_opt_summary (cgraph_node_set set);
|
||||||
static void input_cgraph_opt_summary (VEC (cgraph_node_ptr, heap) * nodes);
|
static void input_cgraph_opt_summary (VEC (cgraph_node_ptr, heap) * nodes);
|
||||||
|
|
||||||
|
|
||||||
@ -861,7 +861,7 @@ output_cgraph (cgraph_node_set set, varpool_node_set vset)
|
|||||||
static bool asm_nodes_output = false;
|
static bool asm_nodes_output = false;
|
||||||
|
|
||||||
if (flag_wpa)
|
if (flag_wpa)
|
||||||
output_cgraph_opt_summary ();
|
output_cgraph_opt_summary (set);
|
||||||
|
|
||||||
ob = lto_create_simple_output_block (LTO_section_cgraph);
|
ob = lto_create_simple_output_block (LTO_section_cgraph);
|
||||||
|
|
||||||
@ -1596,13 +1596,26 @@ input_cgraph (void)
|
|||||||
/* True when we need optimization summary for NODE. */
|
/* True when we need optimization summary for NODE. */
|
||||||
|
|
||||||
static int
|
static int
|
||||||
output_cgraph_opt_summary_p (struct cgraph_node *node)
|
output_cgraph_opt_summary_p (struct cgraph_node *node, cgraph_node_set set)
|
||||||
{
|
{
|
||||||
if (!node->clone_of)
|
struct cgraph_edge *e;
|
||||||
return false;
|
|
||||||
return (node->clone.tree_map
|
if (cgraph_node_in_set_p (node, set))
|
||||||
|
{
|
||||||
|
for (e = node->callees; e; e = e->next_callee)
|
||||||
|
if (e->indirect_info
|
||||||
|
&& e->indirect_info->thunk_delta != 0)
|
||||||
|
return true;
|
||||||
|
|
||||||
|
for (e = node->indirect_calls; e; e = e->next_callee)
|
||||||
|
if (e->indirect_info->thunk_delta != 0)
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
return (node->clone_of
|
||||||
|
&& (node->clone.tree_map
|
||||||
|| node->clone.args_to_skip
|
|| node->clone.args_to_skip
|
||||||
|| node->clone.combined_args_to_skip);
|
|| node->clone.combined_args_to_skip));
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Output optimization summary for EDGE to OB. */
|
/* Output optimization summary for EDGE to OB. */
|
||||||
@ -1621,7 +1634,8 @@ output_edge_opt_summary (struct output_block *ob,
|
|||||||
|
|
||||||
static void
|
static void
|
||||||
output_node_opt_summary (struct output_block *ob,
|
output_node_opt_summary (struct output_block *ob,
|
||||||
struct cgraph_node *node)
|
struct cgraph_node *node,
|
||||||
|
cgraph_node_set set)
|
||||||
{
|
{
|
||||||
unsigned int index;
|
unsigned int index;
|
||||||
bitmap_iterator bi;
|
bitmap_iterator bi;
|
||||||
@ -1659,17 +1673,21 @@ output_node_opt_summary (struct output_block *ob,
|
|||||||
bp_pack_value (&bp, map->ref_p, 1);
|
bp_pack_value (&bp, map->ref_p, 1);
|
||||||
lto_output_bitpack (&bp);
|
lto_output_bitpack (&bp);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (cgraph_node_in_set_p (node, set))
|
||||||
|
{
|
||||||
for (e = node->callees; e; e = e->next_callee)
|
for (e = node->callees; e; e = e->next_callee)
|
||||||
output_edge_opt_summary (ob, e);
|
output_edge_opt_summary (ob, e);
|
||||||
for (e = node->indirect_calls; e; e = e->next_callee)
|
for (e = node->indirect_calls; e; e = e->next_callee)
|
||||||
output_edge_opt_summary (ob, e);
|
output_edge_opt_summary (ob, e);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Output optimization summaries stored in callgraph.
|
/* Output optimization summaries stored in callgraph.
|
||||||
At the moment it is the clone info structure. */
|
At the moment it is the clone info structure. */
|
||||||
|
|
||||||
static void
|
static void
|
||||||
output_cgraph_opt_summary (void)
|
output_cgraph_opt_summary (cgraph_node_set set)
|
||||||
{
|
{
|
||||||
struct cgraph_node *node;
|
struct cgraph_node *node;
|
||||||
int i, n_nodes;
|
int i, n_nodes;
|
||||||
@ -1681,16 +1699,17 @@ output_cgraph_opt_summary (void)
|
|||||||
encoder = ob->decl_state->cgraph_node_encoder;
|
encoder = ob->decl_state->cgraph_node_encoder;
|
||||||
n_nodes = lto_cgraph_encoder_size (encoder);
|
n_nodes = lto_cgraph_encoder_size (encoder);
|
||||||
for (i = 0; i < n_nodes; i++)
|
for (i = 0; i < n_nodes; i++)
|
||||||
if (output_cgraph_opt_summary_p (lto_cgraph_encoder_deref (encoder, i)))
|
if (output_cgraph_opt_summary_p (lto_cgraph_encoder_deref (encoder, i),
|
||||||
|
set))
|
||||||
count++;
|
count++;
|
||||||
lto_output_uleb128_stream (ob->main_stream, count);
|
lto_output_uleb128_stream (ob->main_stream, count);
|
||||||
for (i = 0; i < n_nodes; i++)
|
for (i = 0; i < n_nodes; i++)
|
||||||
{
|
{
|
||||||
node = lto_cgraph_encoder_deref (encoder, i);
|
node = lto_cgraph_encoder_deref (encoder, i);
|
||||||
if (output_cgraph_opt_summary_p (node))
|
if (output_cgraph_opt_summary_p (node, set))
|
||||||
{
|
{
|
||||||
lto_output_uleb128_stream (ob->main_stream, i);
|
lto_output_uleb128_stream (ob->main_stream, i);
|
||||||
output_node_opt_summary (ob, node);
|
output_node_opt_summary (ob, node, set);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
produce_asm (ob, NULL);
|
produce_asm (ob, NULL);
|
||||||
|
Loading…
Reference in New Issue
Block a user