From d05022766b7e692567e24198d44b91253c4a2625 Mon Sep 17 00:00:00 2001 From: Jan Hubicka Date: Fri, 13 Feb 2015 21:05:39 +0100 Subject: [PATCH] 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 --- gcc/ChangeLog | 6 ++++++ gcc/ipa-prop.c | 24 +++++++++++++++--------- 2 files changed, 21 insertions(+), 9 deletions(-) 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 -- 2.7.4