mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-09-24 23:28:41 +00:00
Increasing the inline limit from (overly conservative) 200 to 300. Given each BB costs 20 and each instruction costs 5, 200 means a 4 BB function + 24 instructions (actually less because caller's size also contributes to it).
Furthermore, double the limit when more than 10% of the callee instructions are vector instructions. Multimedia kernels tend to love inlining. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@48725 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@@ -55,6 +55,11 @@ struct Inliner : public CallGraphSCCPass {
|
||||
///
|
||||
virtual int getInlineCost(CallSite CS) = 0;
|
||||
|
||||
// getInlineFudgeFactor - Return a > 1.0 factor if the inliner should use a
|
||||
// higher threshold to determine if the function call should be inlined.
|
||||
///
|
||||
virtual float getInlineFudgeFactor(CallSite CS) = 0;
|
||||
|
||||
private:
|
||||
// InlineThreshold - Cache the value here for easy access.
|
||||
unsigned InlineThreshold;
|
||||
|
@@ -41,6 +41,10 @@ namespace llvm {
|
||||
// NumInsts, NumBlocks - Keep track of how large each function is, which is
|
||||
// used to estimate the code size cost of inlining it.
|
||||
unsigned NumInsts, NumBlocks;
|
||||
|
||||
// NumVectorInsts - Keep track how many instrctions produce vector values.
|
||||
// The inliner is being more aggressive with inlining vector kernels.
|
||||
unsigned NumVectorInsts;
|
||||
|
||||
// ArgumentWeights - Each formal argument of the function is inspected to
|
||||
// see if it is used in any contexts where making it a constant or alloca
|
||||
@@ -48,7 +52,7 @@ namespace llvm {
|
||||
// entry here.
|
||||
std::vector<ArgInfo> ArgumentWeights;
|
||||
|
||||
FunctionInfo() : NumInsts(0), NumBlocks(0) {}
|
||||
FunctionInfo() : NumInsts(0), NumBlocks(0), NumVectorInsts(0) {}
|
||||
|
||||
/// analyzeFunction - Fill in the current structure with information gleaned
|
||||
/// from the specified function.
|
||||
@@ -73,7 +77,12 @@ namespace llvm {
|
||||
// getInlineCost - The heuristic used to determine if we should inline the
|
||||
// function call or not.
|
||||
//
|
||||
int getInlineCost(CallSite CS, SmallPtrSet<const Function *, 16> &NeverInline);
|
||||
int getInlineCost(CallSite CS,
|
||||
SmallPtrSet<const Function *, 16> &NeverInline);
|
||||
|
||||
// getInlineFudgeFactor - Return a > 1.0 factor if the inliner should use a
|
||||
// higher threshold to determine if the function call should be inlined.
|
||||
float getInlineFudgeFactor(CallSite CS);
|
||||
};
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user