Commit 82d618d3 by Jan Hubicka Committed by Jan Hubicka

lto-cgraph.c: Include ipa-utils.h.



	* lto-cgraph.c: Include ipa-utils.h.
	(compute_ltrans_boundary): Also add possible targets into the boundary.

From-SVN: r202447
parent 668b6894
2013-09-10 Jan Hubicka <jh@suse.cz>
* lto-cgraph.c: Include ipa-utils.h.
(compute_ltrans_boundary): Also add possible targets into the boundary.
2013-09-10 Jan Hubicka <jh@suse.cz>
* gimple-fold.c (gimple_get_virt_method_for_binfo): Pass real
VAR_DECL of vtable rather than full expression.
......
......@@ -2194,7 +2194,7 @@ lto-cgraph.o: lto-cgraph.c $(CONFIG_H) $(SYSTEM_H) coretypes.h \
$(TREE_FLOW_H) $(CGRAPH_H) $(FUNCTION_H) $(GGC_H) $(DIAGNOSTIC_CORE_H) \
$(EXCEPT_H) $(TIMEVAR_H) pointer-set.h $(LTO_STREAMER_H) \
$(GCOV_IO_H) $(DATA_STREAMER_H) $(TREE_STREAMER_H) $(TREE_PASS_H) \
profile.h $(CONTEXT_H) $(PASS_MANAGER_H)
profile.h $(CONTEXT_H) $(PASS_MANAGER_H) ipa-utils.h
lto-streamer-in.o: lto-streamer-in.c $(CONFIG_H) $(SYSTEM_H) coretypes.h \
$(TM_H) toplev.h $(DIAGNOSTIC_CORE_H) $(EXPR_H) $(FLAGS_H) $(PARAMS_H) \
input.h $(HASHTAB_H) $(BASIC_BLOCK_H) $(TREE_FLOW_H) $(TREE_PASS_H) \
......
......@@ -49,6 +49,7 @@ along with GCC; see the file COPYING3. If not see
#include "profile.h"
#include "context.h"
#include "pass_manager.h"
#include "ipa-utils.h"
static void output_cgraph_opt_summary (void);
static void input_cgraph_opt_summary (vec<symtab_node> nodes);
......@@ -766,6 +767,7 @@ compute_ltrans_boundary (lto_symtab_encoder_t in_encoder)
int i;
lto_symtab_encoder_t encoder;
lto_symtab_encoder_iterator lsei;
struct pointer_set_t *reachable_call_targets = pointer_set_create ();
encoder = lto_symtab_encoder_new (false);
......@@ -837,9 +839,40 @@ compute_ltrans_boundary (lto_symtab_encoder_t in_encoder)
add_node_to (encoder, callee, false);
}
}
/* Add all possible targets for late devirtualization. */
if (flag_devirtualize)
for (edge = node->indirect_calls; edge; edge = edge->next_callee)
if (edge->indirect_info->polymorphic)
{
unsigned int i;
void *cache_token;
bool final;
vec <cgraph_node *>targets
= possible_polymorphic_call_targets
(edge, &final, &cache_token);
if (!pointer_set_insert (reachable_call_targets,
cache_token))
{
for (i = 0; i < targets.length(); i++)
{
struct cgraph_node *callee = targets[i];
/* Adding an external declarations into the unit serves
no purpose and just increases its boundary. */
if (callee->symbol.definition
&& !lto_symtab_encoder_in_partition_p
(encoder, (symtab_node)callee))
{
gcc_assert (!callee->global.inlined_to);
add_node_to (encoder, callee, false);
}
}
}
}
}
lto_symtab_encoder_delete (in_encoder);
return encoder;
lto_symtab_encoder_delete (in_encoder);
pointer_set_destroy (reachable_call_targets);
return encoder;
}
/* Output the part of the symtab in SET and VSET. */
......
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