[PATCH] D57082: [HotColdSplit] Move splitting earlier in the pipeline

Vedant Kumar via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Tue Jan 22 20:12:42 PST 2019


vsk created this revision.
vsk added reviewers: hiraditya, tejohnson, thegameg, sebpop.
Herald added subscribers: dexonsmith, steven_wu, eraman, mehdi_amini.

Performing splitting early has several advantages:

- Inhibiting inlining of cold code early improves code size. Compared to scheduling splitting at the end of the pipeline, this cuts code size growth in half within the iOS shared cache (0.69% to 0.34%).
- Inhibiting inlining of cold code improves compile time. There's no need to inline split cold functions, or to inline as much *within* those split functions as they are marked `minsize`.
- During LTO, extra work is only done in the pre-link step. Less code must be inlined during cross-module inlining.
- The most common cold regions identified by the static/conservative splitting heuristic can (a) be found before inlining and (b) do not grow after inlining. E.g. __assert_fail, os_log_error.

The disadvantages are:

- Some opportunities for splitting out cold code may be missed. This gap can potentially be narrowed by adding a worklist algorithm to the splitting pass.
- Some opportunities to reduce code size may be lost (e.g. store sinking, when one side of the CFG diamond is split). This does not outweigh the code size benefits of splitting earlier.

On net, splitting early in the pipeline has substantial code size
benefits, and no major effects on memory locality or performance. We
measured memory locality using ktrace data, and consistently found that
10% fewer pages were needed to capture 95% of text page faults in key
iOS benchmarks. We measured performance on frequency-stabilized iOS
devices using LNT+externals.

This reverses course on the decision made to schedule splitting late in
r344869 (D53437 <https://reviews.llvm.org/D53437>).


https://reviews.llvm.org/D57082

Files:
  llvm/lib/Passes/PassBuilder.cpp
  llvm/lib/Transforms/IPO/PassManagerBuilder.cpp
  llvm/test/Other/new-pm-thinlto-defaults.ll
  llvm/test/Other/opt-hot-cold-split.ll

-------------- next part --------------
A non-text attachment was scrubbed...
Name: D57082.183030.patch
Type: text/x-patch
Size: 23545 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20190123/8ce88bb2/attachment.bin>


More information about the llvm-commits mailing list