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:
parent
fcbbf14a65
commit
807b7d6209
|
@ -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>
|
2014-06-27 Jakub Jelinek <jakub@redhat.com>
|
||||||
|
|
||||||
PR tree-optimization/57233
|
PR tree-optimization/57233
|
||||||
|
|
|
@ -906,7 +906,7 @@ walk_polymorphic_call_targets (pointer_set_t *reachable_call_targets,
|
||||||
}
|
}
|
||||||
if (dump_enabled_p ())
|
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,
|
dump_printf_loc (MSG_OPTIMIZED_LOCATIONS, locus,
|
||||||
"devirtualizing call in %s to %s\n",
|
"devirtualizing call in %s to %s\n",
|
||||||
edge->caller->name (), target->name ());
|
edge->caller->name (), target->name ());
|
||||||
|
|
|
@ -387,7 +387,7 @@ fold_gimple_assign (gimple_stmt_iterator *si)
|
||||||
fndecl = builtin_decl_implicit (BUILT_IN_UNREACHABLE);
|
fndecl = builtin_decl_implicit (BUILT_IN_UNREACHABLE);
|
||||||
if (dump_enabled_p ())
|
if (dump_enabled_p ())
|
||||||
{
|
{
|
||||||
location_t loc = gimple_location (stmt);
|
location_t loc = gimple_location_safe (stmt);
|
||||||
dump_printf_loc (MSG_OPTIMIZED_LOCATIONS, loc,
|
dump_printf_loc (MSG_OPTIMIZED_LOCATIONS, loc,
|
||||||
"resolving virtual function address "
|
"resolving virtual function address "
|
||||||
"reference to function %s\n",
|
"reference to function %s\n",
|
||||||
|
@ -1131,7 +1131,7 @@ gimple_fold_call (gimple_stmt_iterator *gsi, bool inplace)
|
||||||
tree lhs = gimple_call_lhs (stmt);
|
tree lhs = gimple_call_lhs (stmt);
|
||||||
if (dump_enabled_p ())
|
if (dump_enabled_p ())
|
||||||
{
|
{
|
||||||
location_t loc = gimple_location (stmt);
|
location_t loc = gimple_location_safe (stmt);
|
||||||
dump_printf_loc (MSG_OPTIMIZED_LOCATIONS, loc,
|
dump_printf_loc (MSG_OPTIMIZED_LOCATIONS, loc,
|
||||||
"folding virtual function call to %s\n",
|
"folding virtual function call to %s\n",
|
||||||
targets.length () == 1
|
targets.length () == 1
|
||||||
|
|
|
@ -1501,6 +1501,15 @@ gimple_location (const_gimple g)
|
||||||
return g->location;
|
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. */
|
/* Return pointer to location information for statement G. */
|
||||||
|
|
||||||
static inline const location_t *
|
static inline const location_t *
|
||||||
|
|
|
@ -2080,7 +2080,7 @@ ipa_devirt (void)
|
||||||
{
|
{
|
||||||
if (dump_enabled_p ())
|
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,
|
dump_printf_loc (MSG_OPTIMIZED_LOCATIONS, locus,
|
||||||
"speculatively devirtualizing call in %s/%i to %s/%i\n",
|
"speculatively devirtualizing call in %s/%i to %s/%i\n",
|
||||||
n->name (), n->order,
|
n->name (), n->order,
|
||||||
|
|
|
@ -2673,17 +2673,11 @@ ipa_make_edge_direct_to_target (struct cgraph_edge *ie, tree target)
|
||||||
|
|
||||||
if (dump_enabled_p ())
|
if (dump_enabled_p ())
|
||||||
{
|
{
|
||||||
const char *fmt = "discovered direct call to non-function in %s/%i, "
|
location_t loc = gimple_location_safe (ie->call_stmt);
|
||||||
"making it __builtin_unreachable\n";
|
dump_printf_loc (MSG_OPTIMIZED_LOCATIONS, loc,
|
||||||
|
"discovered direct call to non-function in %s/%i, "
|
||||||
if (ie->call_stmt)
|
"making it __builtin_unreachable\n",
|
||||||
{
|
ie->caller->name (), ie->caller->order);
|
||||||
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);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
target = builtin_decl_implicit (BUILT_IN_UNREACHABLE);
|
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 ())
|
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)
|
dump_printf_loc (MSG_OPTIMIZED_LOCATIONS, loc,
|
||||||
{
|
"converting indirect call in %s to direct call to %s\n",
|
||||||
location_t loc = gimple_location (ie->call_stmt);
|
ie->caller->name (), callee->name ());
|
||||||
|
|
||||||
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 ());
|
|
||||||
}
|
}
|
||||||
ie = cgraph_make_edge_direct (ie, callee);
|
ie = cgraph_make_edge_direct (ie, callee);
|
||||||
es = inline_edge_summary (ie);
|
es = inline_edge_summary (ie);
|
||||||
|
|
|
@ -198,7 +198,7 @@ walk_polymorphic_call_targets (pointer_set_t *reachable_call_targets,
|
||||||
|
|
||||||
if (dump_enabled_p ())
|
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,
|
dump_printf_loc (MSG_OPTIMIZED_LOCATIONS, locus,
|
||||||
"devirtualizing call in %s/%i to %s/%i\n",
|
"devirtualizing call in %s/%i to %s/%i\n",
|
||||||
edge->caller->name (), edge->caller->order,
|
edge->caller->name (), edge->caller->order,
|
||||||
|
|
|
@ -4367,7 +4367,7 @@ eliminate_dom_walker::before_dom_children (basic_block b)
|
||||||
{
|
{
|
||||||
if (dump_enabled_p ())
|
if (dump_enabled_p ())
|
||||||
{
|
{
|
||||||
location_t loc = gimple_location (stmt);
|
location_t loc = gimple_location_safe (stmt);
|
||||||
dump_printf_loc (MSG_OPTIMIZED_LOCATIONS, loc,
|
dump_printf_loc (MSG_OPTIMIZED_LOCATIONS, loc,
|
||||||
"converting indirect call to "
|
"converting indirect call to "
|
||||||
"function %s\n",
|
"function %s\n",
|
||||||
|
|
Loading…
Reference in New Issue