[PATCH] D15245: Use a higher inlining threshold for hot callees.

Justin Bogner via llvm-commits llvm-commits at lists.llvm.org
Fri Dec 4 16:13:42 PST 2015


Easwaran Raman <eraman at google.com> writes:
> eraman created this revision.
> eraman added reviewers: davidxl, bogner.
> eraman added subscribers: dnovillo, llvm-commits.
> eraman set the repository for this revision to rL LLVM.
>
> This patch uses the higher inline-hint-threshold for callees that are
> considered hot. The threshold for hotness is the one used in CFE to
> apply inline hint on hot callees - callee's entry count >= 30% of max
> function entry count. The idea is to remove that code from the
> frontend and make the PGO based inlining decisions in the inliner
> itself. What we really want is callsite based hotness thresholds, but
> that is a heuristic change that needs tuning and will be done in a
> separate patch.
>
> Repository:
>   rL LLVM
>
> http://reviews.llvm.org/D15245
>
> Files:
>   lib/Transforms/IPO/Inliner.cpp
>
> Index: lib/Transforms/IPO/Inliner.cpp
> ===================================================================
> --- lib/Transforms/IPO/Inliner.cpp
> +++ lib/Transforms/IPO/Inliner.cpp
> @@ -296,6 +296,17 @@
>    if (InlineHint && HintThreshold > Threshold &&
>        !Caller->hasFnAttribute(Attribute::MinSize))
>      Threshold = HintThreshold;
> +  // If profile information is available, use that to prioritize hot functions.
> +  // FIXME: The heuristic used here is based on preliminary SPEC tuning and
> +  // may not be optimal. Replace this with a well-tuned heuristic based on
> +  // *callsite* hotness and not callee hotness.
> +  auto EntryCount = Callee->getEntryCount();
> +  auto MaxFunctionCount = Callee->getParent()->getMaximumFunctionCount();
> +  if (EntryCount && MaxFunctionCount &&
> +      EntryCount.getValue() >=
> +          (uint64_t)(0.3 * (double)MaxFunctionCount.getValue())) {
> +    Threshold = HintThreshold;
> +  }

Moving this out of the frontend to here makes sense, but I have a couple
of questions.

- Does this only apply when we've supplied actual profile data, or can
  we hit it based off of the heuristic counts in no-profile-data mode?
  If the latter, this isn't quite NFC.
  
- Can the same be done for the "cold" attribute the frontend also applies?

>  
>    // Listen to the cold attribute when it would decrease the threshold.
>    bool ColdCallee = Callee && !Callee->isDeclaration() &&




More information about the llvm-commits mailing list