Commit 4fd94d1e by Martin Jambor Committed by Jan Hubicka

re PR ipa/65028 (450.soplex in SPEC CPU 2006 is miscompiled)


	PR ipa/65028
	* ipa-inline-transform.c (mark_all_inlined_calls_cdtor): New function.
	(inline_call): Use it.

From-SVN: r220693
parent e84abfa4
2015-02-13 Maritn Jambor <mjambor@suse.cz>
PR ipa/65028
* ipa-inline-transform.c (mark_all_inlined_calls_cdtor): New function.
(inline_call): Use it.
2015-02-13 Thomas Schwinge <thomas@codesourcery.com> 2015-02-13 Thomas Schwinge <thomas@codesourcery.com>
* config/nvptx/offload.h (ACCEL_COMPILER_acc_device): Define to * config/nvptx/offload.h (ACCEL_COMPILER_acc_device): Define to
......
...@@ -261,6 +261,22 @@ clone_inlined_nodes (struct cgraph_edge *e, bool duplicate, ...@@ -261,6 +261,22 @@ clone_inlined_nodes (struct cgraph_edge *e, bool duplicate,
} }
} }
/* Mark all call graph edges coming out of NODE and all nodes that have been
inlined to it as in_polymorphic_cdtor. */
static void
mark_all_inlined_calls_cdtor (cgraph_node *node)
{
for (cgraph_edge *cs = node->callees; cs; cs = cs->next_callee)
{
cs->in_polymorphic_cdtor = true;
if (!cs->inline_failed)
mark_all_inlined_calls_cdtor (cs->callee);
}
for (cgraph_edge *cs = node->indirect_calls; cs; cs = cs->next_callee)
cs->in_polymorphic_cdtor = true;
}
/* Mark edge E as inlined and update callgraph accordingly. UPDATE_ORIGINAL /* Mark edge E as inlined and update callgraph accordingly. UPDATE_ORIGINAL
specify whether profile of original function should be updated. If any new specify whether profile of original function should be updated. If any new
...@@ -332,6 +348,8 @@ inline_call (struct cgraph_edge *e, bool update_original, ...@@ -332,6 +348,8 @@ inline_call (struct cgraph_edge *e, bool update_original,
old_size = inline_summaries->get (to)->size; old_size = inline_summaries->get (to)->size;
inline_merge_summary (e); inline_merge_summary (e);
if (e->in_polymorphic_cdtor)
mark_all_inlined_calls_cdtor (e->callee);
if (opt_for_fn (e->caller->decl, optimize)) if (opt_for_fn (e->caller->decl, optimize))
new_edges_found = ipa_propagate_indirect_call_infos (curr, new_edges); new_edges_found = ipa_propagate_indirect_call_infos (curr, new_edges);
if (update_overall_summary) if (update_overall_summary)
......
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