This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[PATCH 0/6] Cgraph changes and various devirtualizations


Hi,

this patch series introduces a number of changes to the call graph
handling, improves how we fold calls to OBJ_TYPE_REFs and then uses
these structural improvements to implement inlining of virtual calls
which have a known callee because of previous inlining and
devirtualization as a part of IPA-CP.

The individual patches have comments describing them in detail in
their separate emails.  All of them - with a potential exception of
the first one - are intended for 4.6 and even though that means they
are in an RFC stage I consider them rather complete.

As far as performance impact is concerned, I expect to find out what
exactly it is from pretty-ipa branch automated tester.  Nevertheless,
today I have manually measured ~3.5% improvement in 483.xalancbmk run
time.  In the same benchmark, these changes bring about 96 new call
graph edges created by indirect inlining (and so potentially inlined)
and IPA-CP devirtualizes further 70 calls.  In our libstdc++ testsuite
there are 70 devirtualizations, 96 new indirect inlining edges for
virtual functions and 2603 more OBJ_TYPE_REF calls are folded in
fold_gimple_call in tree-ssa-ccp.c.

I have seen no change in DLV and tramp3D, which I more or less
expected, and none in xpdf as well, which surprised me a bit.  On the
whole, however, I do believe that at least the ability to inline
virtual calls is very important for quite a lot of applications.

I'll be grateful for any comments (and approval to commit to
pretty-ipa).

Thanks,

Martin


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]