Fix for devirtualization dump functions

* gimple.h (gimple_location_safe): New function introduced.
	* cgraphunit.c (walk_polymorphic_call_targets): Usage
	of gimple_location_safe replaces gimple_location.
	(gimple_fold_call): Likewise.
	* ipa-devirt.c (ipa_devirt): Likewise.
	* ipa-prop.c (ipa_make_edge_direct_to_target): Likewise.
	* ipa.c (walk_polymorphic_call_targets): Likewise.
	* tree-ssa-pre.c (eliminate_dom_walker::before_dom_children): Likewise.

From-SVN: r212067
This commit is contained in:
Martin Liska 2014-06-27 11:24:45 +02:00 committed by Martin Liska
parent fcbbf14a65
commit 807b7d6209
8 changed files with 35 additions and 28 deletions

View File

@ -1,3 +1,14 @@
2014-06-27 Martin Liska <mliska@suse.cz>
* gimple.h (gimple_location_safe): New function introduced.
* cgraphunit.c (walk_polymorphic_call_targets): Usage
of gimple_location_safe replaces gimple_location.
(gimple_fold_call): Likewise.
* ipa-devirt.c (ipa_devirt): Likewise.
* ipa-prop.c (ipa_make_edge_direct_to_target): Likewise.
* ipa.c (walk_polymorphic_call_targets): Likewise.
* tree-ssa-pre.c (eliminate_dom_walker::before_dom_children): Likewise.
2014-06-27 Jakub Jelinek <jakub@redhat.com>
PR tree-optimization/57233

View File

@ -906,7 +906,7 @@ walk_polymorphic_call_targets (pointer_set_t *reachable_call_targets,
}
if (dump_enabled_p ())
{
location_t locus = gimple_location (edge->call_stmt);
location_t locus = gimple_location_safe (edge->call_stmt);
dump_printf_loc (MSG_OPTIMIZED_LOCATIONS, locus,
"devirtualizing call in %s to %s\n",
edge->caller->name (), target->name ());

View File

@ -387,7 +387,7 @@ fold_gimple_assign (gimple_stmt_iterator *si)
fndecl = builtin_decl_implicit (BUILT_IN_UNREACHABLE);
if (dump_enabled_p ())
{
location_t loc = gimple_location (stmt);
location_t loc = gimple_location_safe (stmt);
dump_printf_loc (MSG_OPTIMIZED_LOCATIONS, loc,
"resolving virtual function address "
"reference to function %s\n",
@ -1131,7 +1131,7 @@ gimple_fold_call (gimple_stmt_iterator *gsi, bool inplace)
tree lhs = gimple_call_lhs (stmt);
if (dump_enabled_p ())
{
location_t loc = gimple_location (stmt);
location_t loc = gimple_location_safe (stmt);
dump_printf_loc (MSG_OPTIMIZED_LOCATIONS, loc,
"folding virtual function call to %s\n",
targets.length () == 1

View File

@ -1501,6 +1501,15 @@ gimple_location (const_gimple g)
return g->location;
}
/* Return location information for statement G if g is not NULL.
Otherwise, UNKNOWN_LOCATION is returned. */
static inline location_t
gimple_location_safe (const_gimple g)
{
return g ? gimple_location (g) : UNKNOWN_LOCATION;
}
/* Return pointer to location information for statement G. */
static inline const location_t *

View File

@ -2080,7 +2080,7 @@ ipa_devirt (void)
{
if (dump_enabled_p ())
{
location_t locus = gimple_location (e->call_stmt);
location_t locus = gimple_location_safe (e->call_stmt);
dump_printf_loc (MSG_OPTIMIZED_LOCATIONS, locus,
"speculatively devirtualizing call in %s/%i to %s/%i\n",
n->name (), n->order,

View File

@ -2673,17 +2673,11 @@ ipa_make_edge_direct_to_target (struct cgraph_edge *ie, tree target)
if (dump_enabled_p ())
{
const char *fmt = "discovered direct call to non-function in %s/%i, "
"making it __builtin_unreachable\n";
if (ie->call_stmt)
{
location_t loc = gimple_location (ie->call_stmt);
dump_printf_loc (MSG_OPTIMIZED_LOCATIONS, loc, fmt,
ie->caller->name (), ie->caller->order);
}
else if (dump_file)
fprintf (dump_file, fmt, ie->caller->name (), ie->caller->order);
location_t loc = gimple_location_safe (ie->call_stmt);
dump_printf_loc (MSG_OPTIMIZED_LOCATIONS, loc,
"discovered direct call to non-function in %s/%i, "
"making it __builtin_unreachable\n",
ie->caller->name (), ie->caller->order);
}
target = builtin_decl_implicit (BUILT_IN_UNREACHABLE);
@ -2745,18 +2739,11 @@ ipa_make_edge_direct_to_target (struct cgraph_edge *ie, tree target)
}
if (dump_enabled_p ())
{
const char *fmt = "converting indirect call in %s to direct call to %s\n";
location_t loc = gimple_location_safe (ie->call_stmt);
if (ie->call_stmt)
{
location_t loc = gimple_location (ie->call_stmt);
dump_printf_loc (MSG_OPTIMIZED_LOCATIONS, loc, fmt,
ie->caller->name (), callee->name ());
}
else if (dump_file)
fprintf (dump_file, fmt, ie->caller->name (), callee->name ());
dump_printf_loc (MSG_OPTIMIZED_LOCATIONS, loc,
"converting indirect call in %s to direct call to %s\n",
ie->caller->name (), callee->name ());
}
ie = cgraph_make_edge_direct (ie, callee);
es = inline_edge_summary (ie);

View File

@ -198,7 +198,7 @@ walk_polymorphic_call_targets (pointer_set_t *reachable_call_targets,
if (dump_enabled_p ())
{
location_t locus = gimple_location (edge->call_stmt);
location_t locus = gimple_location_safe (edge->call_stmt);
dump_printf_loc (MSG_OPTIMIZED_LOCATIONS, locus,
"devirtualizing call in %s/%i to %s/%i\n",
edge->caller->name (), edge->caller->order,

View File

@ -4367,7 +4367,7 @@ eliminate_dom_walker::before_dom_children (basic_block b)
{
if (dump_enabled_p ())
{
location_t loc = gimple_location (stmt);
location_t loc = gimple_location_safe (stmt);
dump_printf_loc (MSG_OPTIMIZED_LOCATIONS, loc,
"converting indirect call to "
"function %s\n",