From: Jan Hubicka Date: Fri, 13 Feb 2015 20:05:39 +0000 (+0100) Subject: re PR ipa/65028 (450.soplex in SPEC CPU 2006 is miscompiled) X-Git-Tag: upstream/12.2.0~56670 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=d05022766b7e692567e24198d44b91253c4a2625;p=platform%2Fupstream%2Fgcc.git 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 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 269bcf0..290d3ac 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2015-02-13 Jan Hubicka + + 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 PR ipa/65028 diff --git a/gcc/ipa-prop.c b/gcc/ipa-prop.c index 878e94f..908b5ee 100644 --- a/gcc/ipa-prop.c +++ b/gcc/ipa-prop.c @@ -3143,25 +3143,31 @@ update_indirect_edges_after_inlining (struct cgraph_edge *cs, if (jfunc->type == IPA_JF_PASS_THROUGH && ipa_get_jf_pass_through_operation (jfunc) == NOP_EXPR) { - if ((ici->agg_contents - && !ipa_get_jf_pass_through_agg_preserved (jfunc)) - || (ici->polymorphic - && !ipa_get_jf_pass_through_type_preserved (jfunc))) + if (ici->agg_contents + && !ipa_get_jf_pass_through_agg_preserved (jfunc) + && !ici->polymorphic) ici->param_index = -1; 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) { - if ((ici->agg_contents - && !ipa_get_jf_ancestor_agg_preserved (jfunc)) - || (ici->polymorphic - && !ipa_get_jf_ancestor_type_preserved (jfunc))) + if (ici->agg_contents + && !ipa_get_jf_ancestor_agg_preserved (jfunc) + && !ici->polymorphic) ici->param_index = -1; else { ici->param_index = ipa_get_jf_ancestor_formal_id (jfunc); ici->offset += ipa_get_jf_ancestor_offset (jfunc); + if (ici->polymorphic + && !ipa_get_jf_ancestor_type_preserved (jfunc)) + ici->vptr_changed = true; } } else