[PATCH] D41604: Add a pass to generate synthetic function entry counts.

David Li via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Thu Jan 4 11:50:28 PST 2018

davidxl added inline comments.

Comment at: include/llvm/IR/Function.h:256
+  /// will execute.
+  Optional<uint64_t> getSyntheticEntryCount() const;
eraman wrote:
> davidxl wrote:
> > Is it better to let getEntryCount to take an optional flag to indicate 'is_synthetic'? The implementation of these two are mostly the same.
> I actually intended to remove this but this slipped in.  I have a follow up patch that makes EntryCount a class and make the  getEntryCount return it.  Using a boolean for synthetic feels brittle.  Shall I remove this get method?
The new interface that returns EntryCount seems a better approach. Yes, if you can unify the interfaces, this one should be removed. You can do it in two steps -- one takes the boolean flag, and then improved with a follow up patch.

Comment at: lib/Analysis/SyntheticCountsUtils.cpp:50
+  // Partition callsites so that those in the same SCC come first.
+  auto Mid = partition(CallSites, [&](CallSite &CS) {
Nit: callsites that call into the SCC come first.

Comment at: lib/Analysis/SyntheticCountsUtils.cpp:64
+  // traversal of functions within the SCC doesn't affect the computation.
+  DenseMap<Function *, uint64_t> PropagatedCounts;
+  for (auto It = CallSites.begin(); It != Mid; It++) {
PropagatedCounts --> ExtraSCCEntryCountFromCycles ? or just ExtraSCCEntryCounts?

Also modify the comments to say:
1) first update the global count of nodes with SCC using cyclic edges first.
2) the update is done in two steps ..

Comment at: lib/Analysis/SyntheticCountsUtils.cpp:67
+    auto &CS = *It;
+    auto Weight = GetCallSiteWeight(CS);
+    Function *Callee = CS.getCalledFunction();
Weight --> RelativeFreq

It is confusing to see Weight multiplied by Count

Comment at: lib/Transforms/IPO/SyntheticCountsPropagation.cpp:106
+  // and not integers since the relative block frequency could be less than 1.
+  auto GetCallSiteWeight = [&](CallSite CS) {
+    Function *Caller = CS.getCaller();
Call it CallSiteRelFreq may make the code more readable.


More information about the llvm-commits mailing list