Commit d0502276 by Jan Hubicka Committed by Jan Hubicka

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

	PR ipa/65028
	* ipa-prop.c (update_indirect_edges_after_inlining): Do not drop
	polymorphic call info when type is not known to be preserved.

From-SVN: r220694
parent 4fd94d1e
2015-02-13 Jan Hubicka <hubicka@ucw.cz>
PR ipa/65028
* ipa-prop.c (update_indirect_edges_after_inlining): Do not drop
polymorphic call info when type is not known to be preserved.
2015-02-13 Maritn Jambor <mjambor@suse.cz> 2015-02-13 Maritn Jambor <mjambor@suse.cz>
PR ipa/65028 PR ipa/65028
......
...@@ -3143,25 +3143,31 @@ update_indirect_edges_after_inlining (struct cgraph_edge *cs, ...@@ -3143,25 +3143,31 @@ update_indirect_edges_after_inlining (struct cgraph_edge *cs,
if (jfunc->type == IPA_JF_PASS_THROUGH if (jfunc->type == IPA_JF_PASS_THROUGH
&& ipa_get_jf_pass_through_operation (jfunc) == NOP_EXPR) && ipa_get_jf_pass_through_operation (jfunc) == NOP_EXPR)
{ {
if ((ici->agg_contents if (ici->agg_contents
&& !ipa_get_jf_pass_through_agg_preserved (jfunc)) && !ipa_get_jf_pass_through_agg_preserved (jfunc)
|| (ici->polymorphic && !ici->polymorphic)
&& !ipa_get_jf_pass_through_type_preserved (jfunc)))
ici->param_index = -1; ici->param_index = -1;
else else
ici->param_index = ipa_get_jf_pass_through_formal_id (jfunc); {
ici->param_index = ipa_get_jf_pass_through_formal_id (jfunc);
if (ici->polymorphic
&& !ipa_get_jf_pass_through_type_preserved (jfunc))
ici->vptr_changed = true;
}
} }
else if (jfunc->type == IPA_JF_ANCESTOR) else if (jfunc->type == IPA_JF_ANCESTOR)
{ {
if ((ici->agg_contents if (ici->agg_contents
&& !ipa_get_jf_ancestor_agg_preserved (jfunc)) && !ipa_get_jf_ancestor_agg_preserved (jfunc)
|| (ici->polymorphic && !ici->polymorphic)
&& !ipa_get_jf_ancestor_type_preserved (jfunc)))
ici->param_index = -1; ici->param_index = -1;
else else
{ {
ici->param_index = ipa_get_jf_ancestor_formal_id (jfunc); ici->param_index = ipa_get_jf_ancestor_formal_id (jfunc);
ici->offset += ipa_get_jf_ancestor_offset (jfunc); ici->offset += ipa_get_jf_ancestor_offset (jfunc);
if (ici->polymorphic
&& !ipa_get_jf_ancestor_type_preserved (jfunc))
ici->vptr_changed = true;
} }
} }
else else
......
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