diff options
Diffstat (limited to 'llvm/lib/Transforms/Utils')
| -rw-r--r-- | llvm/lib/Transforms/Utils/SizeOpts.cpp | 68 |
1 files changed, 15 insertions, 53 deletions
diff --git a/llvm/lib/Transforms/Utils/SizeOpts.cpp b/llvm/lib/Transforms/Utils/SizeOpts.cpp index f819c67d69d..1519751197d 100644 --- a/llvm/lib/Transforms/Utils/SizeOpts.cpp +++ b/llvm/lib/Transforms/Utils/SizeOpts.cpp @@ -10,66 +10,28 @@ // //===----------------------------------------------------------------------===// +#include "llvm/Analysis/BlockFrequencyInfo.h" +#include "llvm/Analysis/ProfileSummaryInfo.h" +#include "llvm/Support/CommandLine.h" #include "llvm/Transforms/Utils/SizeOpts.h" - using namespace llvm; -cl::opt<bool> EnablePGSO( +static cl::opt<bool> ProfileGuidedSizeOpt( "pgso", cl::Hidden, cl::init(true), - cl::desc("Enable the profile guided size optimizations. ")); - -cl::opt<bool> PGSOLargeWorkingSetSizeOnly( - "pgso-lwss-only", cl::Hidden, cl::init(true), - cl::desc("Apply the profile guided size optimizations only " - "if the working set size is large (except for cold code.)")); - -cl::opt<bool> ForcePGSO( - "force-pgso", cl::Hidden, cl::init(false), - cl::desc("Force the (profiled-guided) size optimizations. ")); - -cl::opt<int> PgsoCutoffInstrProf( - "pgso-cutoff-instr-prof", cl::Hidden, cl::init(250000), cl::ZeroOrMore, - cl::desc("The profile guided size optimization profile summary cutoff " - "for instrumentation profile.")); - -cl::opt<int> PgsoCutoffSampleProf( - "pgso-cutoff-sample-prof", cl::Hidden, cl::init(800000), cl::ZeroOrMore, - cl::desc("The profile guided size optimization profile summary cutoff " - "for sample profile.")); - -namespace { -struct BasicBlockBFIAdapter { - static bool isFunctionColdInCallGraph(const Function *F, - ProfileSummaryInfo *PSI, - BlockFrequencyInfo &BFI) { - return PSI->isFunctionColdInCallGraph(F, BFI); - } - static bool isFunctionHotInCallGraphNthPercentile(int CutOff, - const Function *F, - ProfileSummaryInfo *PSI, - BlockFrequencyInfo &BFI) { - return PSI->isFunctionHotInCallGraphNthPercentile(CutOff, F, BFI); - } - static bool isColdBlock(const BasicBlock *BB, - ProfileSummaryInfo *PSI, - BlockFrequencyInfo *BFI) { - return PSI->isColdBlock(BB, BFI); - } - static bool isHotBlockNthPercentile(int CutOff, - const BasicBlock *BB, - ProfileSummaryInfo *PSI, - BlockFrequencyInfo *BFI) { - return PSI->isHotBlockNthPercentile(CutOff, BB, BFI); - } -}; -} // end anonymous namespace + cl::desc("Enable the profile guided size optimization. ")); -bool llvm::shouldOptimizeForSize(const Function *F, ProfileSummaryInfo *PSI, +bool llvm::shouldOptimizeForSize(Function *F, ProfileSummaryInfo *PSI, BlockFrequencyInfo *BFI) { - return shouldFuncOptimizeForSizeImpl<BasicBlockBFIAdapter>(F, PSI, BFI); + assert(F); + if (!PSI || !BFI || !PSI->hasProfileSummary()) + return false; + return ProfileGuidedSizeOpt && PSI->isFunctionColdInCallGraph(F, *BFI); } -bool llvm::shouldOptimizeForSize(const BasicBlock *BB, ProfileSummaryInfo *PSI, +bool llvm::shouldOptimizeForSize(BasicBlock *BB, ProfileSummaryInfo *PSI, BlockFrequencyInfo *BFI) { - return shouldOptimizeForSizeImpl<BasicBlockBFIAdapter>(BB, PSI, BFI); + assert(BB); + if (!PSI || !BFI || !PSI->hasProfileSummary()) + return false; + return ProfileGuidedSizeOpt && PSI->isColdBlock(BB, BFI); } |

