[llvm] r259915 - CallAnalyzer::analyzeCall: change the condition back to "Cost < Threshold"
Easwaran Raman via llvm-commits
llvm-commits at lists.llvm.org
Wed Feb 24 21:49:43 PST 2016
The scenario you describe would result in analyzeCall to return true even
after r259915 since Cost == 0 and Threshold == 0 implies Cost < max(1,
Threshold). Since this change has addressed the size regression, there must
have been other inline decisions which had returned true before r259915 and
returned false with this and those are the ones I was curious about.
On Wed, Feb 24, 2016 at 4:55 PM, Xinliang David Li <xinliangli at gmail.com>
> As Akira's case shows, the following can happen:
> 1) under certain conditions (unreachable path etc), the threshold was
> adjusted to 0
> 2) in analyzeCall, in the worklist loop, the threshold can further be
> adjusted to negative number (single BB bonus)
> 3) in AnalyzeBlock, it bails out early when cost == 0 -- even the real
> cost of the function is much higher
> 4) outside the worklist loop, with Hans's change, the 'zero' cost is
> compared with the max(0, threshold), and the result will be true.
> On Wed, Feb 24, 2016 at 4:19 PM, Easwaran Raman via llvm-commits <
> llvm-commits at lists.llvm.org> wrote:
>> I'm curious about the cause of the size regression. The effect of
>> r252595 is two-fold:
>> 1. Inline zero-cost callees even if the threshold is negative or 0.
>> 2. Inline positive-cost callees when they equal to the threshold (as
>> opposed to less than the threshold).
>> This change only reverts the effect 2 above. If that fixes the size
>> regression, is it the case that a lot of callees had cost equal to
>> threshold and the inlining decision got reversed? That could happen of
>> course, but I doubt that should cause a significant regression. I suspect
>> there are other subtle bugs in the code, so looking at specific instances
>> will be useful.
>> - Easwaran
>> On Fri, Feb 5, 2016 at 12:32 PM, Hans Wennborg via llvm-commits <
>> llvm-commits at lists.llvm.org> wrote:
>>> Author: hans
>>> Date: Fri Feb 5 14:32:42 2016
>>> New Revision: 259915
>>> URL: http://llvm.org/viewvc/llvm-project?rev=259915&view=rev
>>> CallAnalyzer::analyzeCall: change the condition back to "Cost <
>>> In r252595, I inadvertently changed the condition to "Cost <= Threshold",
>>> which caused a significant size regression in Chrome. This commit
>>> Modified: llvm/trunk/lib/Analysis/InlineCost.cpp
>>> --- llvm/trunk/lib/Analysis/InlineCost.cpp (original)
>>> +++ llvm/trunk/lib/Analysis/InlineCost.cpp Fri Feb 5 14:32:42 2016
>>> @@ -1392,7 +1392,7 @@ bool CallAnalyzer::analyzeCall(CallSite
>>> else if (NumVectorInstructions <= NumInstructions / 2)
>>> Threshold -= (FiftyPercentVectorBonus - TenPercentVectorBonus);
>>> - return Cost <= std::max(0, Threshold);
>>> + return Cost < std::max(1, Threshold);
>>> #if !defined(NDEBUG) || defined(LLVM_ENABLE_DUMP)
>>> llvm-commits mailing list
>>> llvm-commits at lists.llvm.org
>> llvm-commits mailing list
>> llvm-commits at lists.llvm.org
-------------- next part --------------
An HTML attachment was scrubbed...
More information about the llvm-commits