[PATCH] D96806: [SampleFDO] Stop repeated indirect call promotion for the same target

Hongtao Yu via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Thu Feb 18 12:17:14 PST 2021


hoy added inline comments.


================
Comment at: llvm/lib/Transforms/IPO/SampleProfile.cpp:1201
+      Pair.first->second = Data.Count;
+    else if (Total > Data.Count)
+      Total -= Data.Count;
----------------
wmi wrote:
> wmi wrote:
> > hoy wrote:
> > > wmi wrote:
> > > > wmi wrote:
> > > > > wenlei wrote:
> > > > > > In what case do we have Total < Data.Count? And Total == Data.Count should be fine for subtraction too?
> > > > > Currently we won't have such case. It is just some extra protect in case of future change. I think assertion will be better. Will change it.
> > > > > 
> > > > > Right, Total == Data.Count should be added. will change it.
> > > > The assertion catches a case where we have Total < Data.Count when running the test test/Transforms/SampleProfile/csspgo-inline-icall.ll.
> > > > 
> > > > For CS profile, the sum computed in findIndirectCallFunctionSamples can be smaller than the sum of the target counts returned by findCallTargetMapAt. Is it expected?
> > > For CS profile, we use callsite count (including both inlined and non-inlined targets) instead of using entry counts, since there's yet a way to tell if an indirect call target is inlined or not from a CS profile. 
> > > 
> > > We have a fix for this to review. Haven't sent it out yet. It basically replaces this code
> > > 
> > > ```
> > >          uint64_t Sum = 0;
> > >           findIndirectCallFunctionSamples(I, Sum);
> > > ```
> > > 
> > > with
> > >           
> > > ```
> > > if (FunctionSamples::ProfileIsCS) {
> > >             // With CSSPGO all indirect call targets are counted towards the
> > >             // original indirect call site in the profile, including both
> > >             // inlined and non-inlined targets.
> > >             Sum = 0;
> > >             for (const auto &T_C : T.get())
> > >               Sum += T_C.second;
> > >           } else {
> > >             findIndirectCallFunctionSamples(I, Sum);
> > >           }
> > > ```
> > > 
> > > 
> > >  
> > findIndirectCallFunctionSamples
> Thanks. That fix makes sense to me. This change will depend on your fix if I keep the assumption Total >= Data.Count and the assertion. 
Sure, let me send out the fix.


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D96806/new/

https://reviews.llvm.org/D96806



More information about the llvm-commits mailing list