[PATCH] D95988: [CSSPGO] Process functions in a top-down order on a dynamic call graph.
Hongtao Yu via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Sat Feb 6 09:36:25 PST 2021
hoy added a comment.
In D95988#2546697 <https://reviews.llvm.org/D95988#2546697>, @wmi wrote:
> What is the main difference between dynamic call graph based inlining vs static call graph + priority based inlining (https://reviews.llvm.org/D94001)?
The work in this change is an enhancement to the priority-based inliner in that:
1. Honor profile SCC traversal order for more inlining. E.g, where there is a circle in the static call graph say `A->B->C->A`, the static SCC traversal order could be any order but deterministic, let's. say `B->C->A`. If at runtime we see a context `A->B->C->A->B->C`, llvm-profgen may compress it into `A->B->C`. Therefore by walking the SCC in the `B->C->A` top-down order in the sample profile loader, we will not get `B` inlined into `A`. This change adjusts the SCC processing order to reflect what is in profile so that `A->B->C` will be walked in order.
2. Honor indirect call edge order. Similar given an indirect call `A->B` at runtime which is missing on the static call graph, `B` may end up being processed before `A`. We'd like `A` to be processed before `B` so that `B` gets a chance to be inlined into `A` after indirect call promotion.
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D95988/new/
https://reviews.llvm.org/D95988
More information about the llvm-commits
mailing list