llvm-project/llvm/test/Transforms/Inline
Dehao Chen 9232f98279 Implement callsite-hotness based inline cost for Sample-based PGO
Summary:
For sample-based PGO, using BFI to calculate callsite count is sometime not accurate. This is because with sampling based approach, if a callsite resides in a hot loop deeply nested in a bunch of cold branches, the callsite's BFI frequency would be inaccurately calculated due to lack of samples in the cold branch.

E.g.

if (A1 && A2 && A3 && ..... && A10) {
  for (i=0; i < 100000000; i++) {
    callsite();
  }
}

Assume that A1 to A100 are all 100% taken, and callsite has 1000 samples and thus is considerred hot. Because the loop's trip count is huge, it's normal that all branches outside the loop has no sample at all. As a result, we can only use static branch probability to derive the the frequency of the loop header. Assuming that static heuristic thinks each branch is 50% taken, then the count calculated from BFI will be 1/(2^10) of the actual value.

In order to get more accurate callsite count, we directly annotate the weight on the call instruction, and directly use it when checking callsite hotness.

Note that this mechanism can also be shared by instrumentation based callsite hotness analysis. The side benefit is that it breaks the dependency from Inliner to BFI as call count is embedded in the IR.

Reviewers: davidxl, eraman, dnovillo

Subscribers: llvm-commits

Differential Revision: http://reviews.llvm.org/D22118

llvm-svn: 275073
2016-07-11 16:48:54 +00:00
..
X86 Make an X86 specific directory and put the recent X86 tti specific 2015-07-02 01:36:31 +00:00
2003-09-14-InlineValue.ll Move the personality function from LandingPadInst to Function 2015-06-17 20:52:32 +00:00
2003-09-22-PHINodeInlineFail.ll Move the personality function from LandingPadInst to Function 2015-06-17 20:52:32 +00:00
2003-09-22-PHINodesInExceptionDest.ll Move the personality function from LandingPadInst to Function 2015-06-17 20:52:32 +00:00
2003-09-22-PHINodesInNormalInvokeDest.ll Move the personality function from LandingPadInst to Function 2015-06-17 20:52:32 +00:00
2003-10-13-AllocaDominanceProblem.ll
2004-04-15-InlineDeletesCall.ll
2004-04-20-InlineLinkOnce.ll
2004-10-17-InlineFunctionWithoutReturn.ll
2006-01-14-CallGraphUpdate.ll
2006-07-12-InlinePruneCGUpdate.ll [opaque pointer type] Add textual IR support for explicit type parameter to load instruction 2015-02-27 21:17:42 +00:00
2006-11-09-InlineCGUpdate-2.ll Move the personality function from LandingPadInst to Function 2015-06-17 20:52:32 +00:00
2006-11-09-InlineCGUpdate.ll Move the personality function from LandingPadInst to Function 2015-06-17 20:52:32 +00:00
2007-04-15-InlineEH.ll Move the personality function from LandingPadInst to Function 2015-06-17 20:52:32 +00:00
2007-06-25-WeakInline.ll
2007-12-19-InlineNoUnwind.ll
2008-09-02-NoInline.ll
2009-01-08-NoInlineDynamicAlloca.ll [opaque pointer type] Add textual IR support for explicit type parameter to load instruction 2015-02-27 21:17:42 +00:00
2009-01-13-RecursiveInlineCrash.ll [opaque pointer type] Add textual IR support for explicit type parameter to load instruction 2015-02-27 21:17:42 +00:00
2009-05-07-CallUsingSelfCrash.ll
2010-05-12-ValueMap.ll
PR4909.ll [PM] Port PartialInlining to the new PM 2016-06-27 16:50:18 +00:00
align.ll [opaque pointer type] Add textual IR support for explicit type parameter to load instruction 2015-02-27 21:17:42 +00:00
alloca-bonus.ll [opaque pointer type] Add textual IR support for explicit type parameter to load instruction 2015-02-27 21:17:42 +00:00
alloca-dbgdeclare-merge.ll [PR27284] Reverse the ownership between DICompileUnit and DISubprogram. 2016-04-15 15:57:41 +00:00
alloca-dbgdeclare.ll DebugInfo: Remove MDString-based type references 2016-04-23 21:08:00 +00:00
alloca-in-scc.ll [opaque pointer type] Add textual IR support for explicit type parameter to getelementptr instruction 2015-02-27 19:29:02 +00:00
alloca-merge-align.ll Make DataLayout Non-Optional in the Module 2015-03-04 18:43:29 +00:00
alloca_test.ll [Inliner] don't assume that a Constant alloca size is a ConstantInt (PR27277) 2016-05-09 21:51:53 +00:00
always-inline.ll
array-alloca.ll Fix size computation of array allocation in inline cost analysis 2016-06-27 22:31:53 +00:00
array_merge.ll
attributes.ll Don't inline functions with different SafeStack attributes. 2016-05-10 00:33:07 +00:00
basictest.ll Remove the ScalarReplAggregates pass 2016-06-15 00:19:09 +00:00
blockaddress.ll ValueMapper: Fix delayed blockaddress handling after r265273 2016-04-06 02:25:12 +00:00
byval-tail-call.ll Reapply 239795 - [InstCombine] Propagate non-null facts to call parameters 2015-06-16 20:24:25 +00:00
byval.ll [opaque pointer type] Add textual IR support for explicit type parameter to gep operator 2015-03-13 18:20:45 +00:00
byval_lifetime.ll [opaque pointer type] Add textual IR support for explicit type parameter to load instruction 2015-02-27 21:17:42 +00:00
callgraph-update.ll Move the personality function from LandingPadInst to Function 2015-06-17 20:52:32 +00:00
casts.ll
cfg_preserve_test.ll
comdat-ipo.ll Don't IPO over functions that can be de-refined 2016-04-08 00:48:30 +00:00
crash-lifetime-marker.ll [InlineFunction] Don't add lifetime markers for zero-sized allocas. 2015-04-20 16:11:05 +00:00
crash.ll Move the personality function from LandingPadInst to Function 2015-06-17 20:52:32 +00:00
crash2.ll Remove the ScalarReplAggregates pass 2016-06-15 00:19:09 +00:00
debug-info-duplicate-calls.ll [PR27284] Reverse the ownership between DICompileUnit and DISubprogram. 2016-04-15 15:57:41 +00:00
debug-invoke.ll [PR27284] Reverse the ownership between DICompileUnit and DISubprogram. 2016-04-15 15:57:41 +00:00
delete-call.ll
deopt-bundles.ll Nonnull elements in OperandBundleCallSites are not all Instructions 2015-12-19 22:40:28 +00:00
deoptimize-intrinsic-cconv.ll All llvm.deoptimize declarations must use the same calling convention 2016-05-12 01:17:38 +00:00
deoptimize-intrinsic.ll All llvm.deoptimize declarations must use the same calling convention 2016-05-12 01:17:38 +00:00
devirtualize-2.ll [opaque pointer type] Add textual IR support for explicit type parameter to the call instruction 2015-04-16 23:24:18 +00:00
devirtualize-3.ll Remove the ScalarReplAggregates pass 2016-06-15 00:19:09 +00:00
devirtualize.ll [opaque pointer type] Add textual IR support for explicit type parameter to gep operator 2015-03-13 18:20:45 +00:00
dynamic_alloca_test.ll
ephemeral.ll [opaque pointer type] Add textual IR support for explicit type parameter to load instruction 2015-02-27 21:17:42 +00:00
externally_available.ll
frameescape.ll Rename llvm.frameescape and llvm.framerecover to localescape and localrecover 2015-07-07 22:25:32 +00:00
guard-intrinsic.ll Introduce a @llvm.experimental.guard intrinsic 2016-03-31 00:18:46 +00:00
gvn-inline-iteration.ll [opaque pointer type] Add textual IR support for explicit type parameter to load instruction 2015-02-27 21:17:42 +00:00
ignore-debug-info.ll [PR27284] Reverse the ownership between DICompileUnit and DISubprogram. 2016-04-15 15:57:41 +00:00
inline-assume.ll [Inline] Use AssumptionCache from the right Function 2015-09-23 15:49:08 +00:00
inline-byval-bonus.ll [opaque pointer type] Add textual IR support for explicit type parameter to load instruction 2015-02-27 21:17:42 +00:00
inline-cold-callee.ll Use ProfileSummaryInfo in inline cost analysis. 2016-06-09 22:23:21 +00:00
inline-cold.ll [opaque pointer type] Add textual IR support for explicit type parameter to load instruction 2015-02-27 21:17:42 +00:00
inline-constexpr-addrspacecast-argument.ll Fix assert when inlining a constantexpr addrspacecast 2015-07-27 18:31:03 +00:00
inline-fast-math-flags.ll [opaque pointer type] Add textual IR support for explicit type parameter to load instruction 2015-02-27 21:17:42 +00:00
inline-fp.ll [opaque pointer type] Add textual IR support for explicit type parameter to load instruction 2015-02-27 21:17:42 +00:00
inline-funclets.ll [Inliner/WinEH] Honor implicit nounwinds 2016-01-20 02:15:15 +00:00
inline-hot-callee.ll Use ProfileSummaryInfo in inline cost analysis. 2016-06-09 22:23:21 +00:00
inline-hot-callsite.ll Implement callsite-hotness based inline cost for Sample-based PGO 2016-07-11 16:48:54 +00:00
inline-indirect.ll Fix a crash in the assumption cache when inlining indirect function calls 2015-02-12 21:04:22 +00:00
inline-invoke-tail.ll Upgrade old memset/memcpy signatures (without isVolatile argument) in tests 2016-06-22 15:16:06 +00:00
inline-invoke-with-asm-call.ll Move the personality function from LandingPadInst to Function 2015-06-17 20:52:32 +00:00
inline-musttail-varargs.ll [opaque pointer type] Add textual IR support for explicit type parameter to the call instruction 2015-04-16 23:24:18 +00:00
inline-optnone.ll
inline-optsize.ll Lower inlining threshold when the caller has minsize attribute. 2016-01-28 23:44:41 +00:00
inline-tail.ll
inline-threshold.ll Allow -inline-threshold to override default threshold. 2016-05-19 23:02:09 +00:00
inline-vla.ll Revert "Change memcpy/memset/memmove to have dest and source alignments." 2015-11-19 05:56:52 +00:00
inline_cleanup.ll
inline_constprop.ll [opaque pointer type] Add textual IR support for explicit type parameter to load instruction 2015-02-27 21:17:42 +00:00
inline_dbg_declare.ll [PR27284] Reverse the ownership between DICompileUnit and DISubprogram. 2016-04-15 15:57:41 +00:00
inline_dce.ll
inline_invoke.ll Sort the enums in Attributes.h in case insensitive alphabetical order. 2015-11-11 02:11:46 +00:00
inline_minisize.ll [opaque pointer type] Add textual IR support for explicit type parameter to load instruction 2015-02-27 21:17:42 +00:00
inline_prune.ll
inline_returns_twice.ll Move the personality function from LandingPadInst to Function 2015-06-17 20:52:32 +00:00
inline_ssp.ll [opaque pointer type] Add textual IR support for explicit type parameter to the call instruction 2015-04-16 23:24:18 +00:00
inline_unreachable-2.ll Test case for r265852. 2016-04-13 19:43:31 +00:00
inline_unreachable.ll Avoid inlining call sites in unreachable-terminated block 2016-02-01 20:55:11 +00:00
invoke-cleanup.ll Move the personality function from LandingPadInst to Function 2015-06-17 20:52:32 +00:00
invoke-combine-clauses.ll Move the personality function from LandingPadInst to Function 2015-06-17 20:52:32 +00:00
invoke-cost.ll Move the personality function from LandingPadInst to Function 2015-06-17 20:52:32 +00:00
invoke_test-1.ll Move the personality function from LandingPadInst to Function 2015-06-17 20:52:32 +00:00
invoke_test-2.ll Move the personality function from LandingPadInst to Function 2015-06-17 20:52:32 +00:00
invoke_test-3.ll Move the personality function from LandingPadInst to Function 2015-06-17 20:52:32 +00:00
lifetime-no-datalayout.ll Make DataLayout Non-Optional in the Module 2015-03-04 18:43:29 +00:00
lifetime.ll
local-as-metadata-undominated-use.ll [PR27284] Reverse the ownership between DICompileUnit and DISubprogram. 2016-04-15 15:57:41 +00:00
nested-inline.ll
noalias-calls.ll Revert "Change memcpy/memset/memmove to have dest and source alignments." 2015-11-19 05:56:52 +00:00
noalias-cs.ll Have a single way for creating unique value names. 2015-11-22 00:16:24 +00:00
noalias.ll [opaque pointer type] Add textual IR support for explicit type parameter to load instruction 2015-02-27 21:17:42 +00:00
noalias2.ll Have a single way for creating unique value names. 2015-11-22 00:16:24 +00:00
noinline-recursive-fn.ll
noinline.ll
nonnull.ll Teach InlineCost to account for a null check which can be folded away 2015-06-26 20:51:17 +00:00
null-function.ll
optimization-remarks.ll [opaque pointer type] Add textual IR support for explicit type parameter to load instruction 2015-02-27 21:17:42 +00:00
parallel-loop-md.ll [Inliner] Preserve llvm.mem.parallel_loop_access metadata 2016-04-28 23:00:04 +00:00
pr21206.ll
pr22285.ll [Inliner] Discard empty COMDAT groups 2015-05-05 20:14:22 +00:00
pr26698.ll [WinEH] Don't inline an 'unwinds to caller' cleanupret into funclets which locally unwind 2016-02-23 17:11:04 +00:00
pr28298.ll Reinstate r273711 2016-06-25 00:04:10 +00:00
profile-meta.ll add checks for 'unpredictable' metadata preservation 2016-03-16 18:15:34 +00:00
ptr-diff.ll [opaque pointer type] Add textual IR support for explicit type parameter to load instruction 2015-02-27 21:17:42 +00:00
recursive.ll
store-sroa.ll Correctly estimate SROA savings for store operands in inline cost analysis. 2015-03-20 18:33:12 +00:00
switch.ll
vector-bonus.ll [inliner] Fix the early-exit of the inline cost analysis to correctly 2015-05-27 02:49:05 +00:00
zero-cost.ll Inliner: Do zero-cost inlines even if above a negative threshold (PR24851) 2015-11-10 09:47:48 +00:00