> Hi, > > in IPA-CP, a few functions look at callees of cgraph edges to see if > they still lead to the original node (those still need to be examined > or re-examined) or to a clone (those are considered already decided > and should be left alone). The problem is that currently, when > looking at an SCC, these functions decide not to "close" the SCC by > switching the last edge from a specialized clone to a specialized > clone because it already leads to a clone, albeit one for all > contexts. > > In the testcase ipcp-agg-7.c that is part of this patch, this leads to > two copies of foo, one of them not specialized for known aggregate > values, even though there should have been just one. > > The patch fixes this by introducing another flag is_all_contexts_clone > and testing it in the necessary functions. In order to avoid > confusion, I renamed already existing flag clone_for_all_contexts to > do_clone_for_all_contexts. > > Additionally, I discovered that decide_whether_version_node contains a > bogus "|| !plats->aggs" in a test, which is harmless but just should > not be there, so I removed it. > > Bootstrapped and tested on x86_64-linux. OK for trunk? > > Martin > > > 2012-11-20 Martin Jambor <mjam...@suse.cz> > > * ipa-prop.h (struct ipa_node_params): Rename clone_for_all_contexts to > do_clone_for_all_contexts. Update all uses. New flag > is_all_contexts_clone. > > * ipa-cp.c (cgraph_edge_brings_value_p): Also consider the case when cs > leads to the clone for all contexts. > (perhaps_add_new_callers): Likewise. > (decide_whether_version_node): Remove bogus !plats->aggs test. Set > is_all_contexts_clone when cloning for all contexts. > > * testsuite/gcc.dg/ipa/ipcp-agg-7.c: New test. > * testsuite/gcc.dg/ipa/ipcp-agg-8.c: Likewise.
OK, thanks! Honza