This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
LTO inliner -- sensitivity to increasing register pressure
- From: Aaron Sawdey <acsawdey at linux dot vnet dot ibm dot com>
- To: hubicka at ucw dot cz
- Cc: gcc-patches at gcc dot gnu dot org, davidxl at google dot com
- Date: Fri, 18 Apr 2014 11:43:16 -0500
- Subject: LTO inliner -- sensitivity to increasing register pressure
- Authentication-results: sourceware.org; auth=none
Honza,
Seeing your recent patches relating to inliner heuristics for LTO, I
thought I should mention some related work I'm doing.
By way of introduction, I've recently joined the IBM LTC's PPC Toolchain
team, working on gcc performance.
We have not generally seen good results using LTO on IBM power processors
and one of the problems seems to be excessive inlining that results in the
generation of excessive spill code. So, I have set out to tackle this by
doing some analysis at the time of the inliner pass to compute something
analogous to register pressure, which is then used to shut down inlining of
routines that have a lot of pressure.
The analysis is basically a liveness analysis on the SSA names per basic
block and looking for the maximum number live in any block. I've been using
"liveness pressure" as a shorthand name for this.
This can then be used in two ways.
1) want_inline_function_to_all_callers_p at present always says to inline
things that have only one call site without regard to size or what this may
do to the register allocator downstream. In particular, BZ2_decompress in
bzip2 gets inlined and this causes the pressure reported downstream for the
int register class to increase 10x. Looking at some combination of pressure
in caller/callee may help avoid this kind of situation.
2) I also want to experiment with adding the liveness pressure in the
callee into the badness calculation in edge_badness used by
inline_small_functions. The idea here is to try to inline functions that
are less likely to cause register allocator difficulty downstream first.
I am just at the point of getting a prototype working, I will get a patch
you could take a look at posted next week. In the meantime, do you have any
comments or feedback?
Thanks,
Aaron
--
Aaron Sawdey, Ph.D. acsawdey@linux.vnet.ibm.com
050-2/C113 (507) 253-7520 home: 507/263-0782
IBM Linux Technology Center - PPC Toolchain