[PATCH] D32624: Memory intrinsic value profile optimization: Avoid divide by 0
Teresa Johnson via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Fri Apr 28 06:24:31 PDT 2017
tejohnson added inline comments.
================
Comment at: lib/Transforms/Instrumentation/IndirectCallPromotion.cpp:877
+ // scale up the counts properly (and there is no profitable transformation).
+ if (TotalCount == 0)
+ return false;
----------------
davidxl wrote:
> tejohnson wrote:
> > davidxl wrote:
> > > Or change it to
> > >
> > > if (TotalCount < MemOpCountThreshold)
> > > return false;
> > >
> > > and move this check before the actual count check.
> > I could move this up, but note that the counts will be scaled up by ActualCount/SavedTotalCount (where SavedTotalCount == TotalCount at this point). So it is possible for TotalCount < MemOpCountThreshold but not ActualCount, and not the scaled counts. So that check seems overly conservative (and will have an effect other than just preventing 0 divides).
> The scale is actually to scale down for most the cases -- this is because BB's count will be updated after inlining, while value profiling total count will be updated. In other words, it won't cause conservative behavior for hot sites.
I checked in one of our large apps, and there are over 44K memory intrinsics where we scale up the counts. So at the least, I would like to consider that change separately from this bugfix.
https://reviews.llvm.org/D32624
More information about the llvm-commits
mailing list