mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-01-27 14:34:58 +00:00
Move per-function inline threshold calculation to a method.
No functional change except the forgotten test for InlineLimit.getNumOccurrences() == 0 in the CurrentThreshold2 calculation. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@94007 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
32f6a8d923
commit
f8526cb711
@ -51,6 +51,12 @@ struct Inliner : public CallGraphSCCPass {
|
||||
///
|
||||
unsigned getInlineThreshold() const { return InlineThreshold; }
|
||||
|
||||
/// Calculate the inline threshold for given Caller. This threshold is lower
|
||||
/// if Caller is marked with OptimizeForSize and -inline-threshold is not
|
||||
/// given on the comand line.
|
||||
///
|
||||
unsigned getInlineThreshold(Function* Caller) const;
|
||||
|
||||
/// getInlineCost - This method must be implemented by the subclass to
|
||||
/// determine the cost of inlining the specified call site. If the cost
|
||||
/// returned is greater than the current inline threshold, the call site is
|
||||
|
@ -171,7 +171,16 @@ static bool InlineCallIfPossible(CallSite CS, CallGraph &CG,
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
unsigned Inliner::getInlineThreshold(Function* Caller) const {
|
||||
if (Caller && !Caller->isDeclaration() &&
|
||||
Caller->hasFnAttr(Attribute::OptimizeForSize) &&
|
||||
InlineLimit.getNumOccurrences() == 0)
|
||||
return 50;
|
||||
else
|
||||
return InlineThreshold;
|
||||
}
|
||||
|
||||
/// shouldInline - Return true if the inliner should attempt to inline
|
||||
/// at the given CallSite.
|
||||
bool Inliner::shouldInline(CallSite CS) {
|
||||
@ -190,14 +199,8 @@ bool Inliner::shouldInline(CallSite CS) {
|
||||
}
|
||||
|
||||
int Cost = IC.getValue();
|
||||
int CurrentThreshold = InlineThreshold;
|
||||
Function *Caller = CS.getCaller();
|
||||
if (Caller && !Caller->isDeclaration() &&
|
||||
Caller->hasFnAttr(Attribute::OptimizeForSize) &&
|
||||
InlineLimit.getNumOccurrences() == 0 &&
|
||||
InlineThreshold != 50)
|
||||
CurrentThreshold = 50;
|
||||
|
||||
int CurrentThreshold = getInlineThreshold(Caller);
|
||||
float FudgeFactor = getInlineFudgeFactor(CS);
|
||||
if (Cost >= (int)(CurrentThreshold * FudgeFactor)) {
|
||||
DEBUG(dbgs() << " NOT Inlining: cost=" << Cost
|
||||
@ -233,13 +236,8 @@ bool Inliner::shouldInline(CallSite CS) {
|
||||
|
||||
outerCallsFound = true;
|
||||
int Cost2 = IC2.getValue();
|
||||
int CurrentThreshold2 = InlineThreshold;
|
||||
Function *Caller2 = CS2.getCaller();
|
||||
if (Caller2 && !Caller2->isDeclaration() &&
|
||||
Caller2->hasFnAttr(Attribute::OptimizeForSize) &&
|
||||
InlineThreshold != 50)
|
||||
CurrentThreshold2 = 50;
|
||||
|
||||
int CurrentThreshold2 = getInlineThreshold(Caller2);
|
||||
float FudgeFactor2 = getInlineFudgeFactor(CS2);
|
||||
|
||||
if (Cost2 >= (int)(CurrentThreshold2 * FudgeFactor2))
|
||||
|
Loading…
x
Reference in New Issue
Block a user