LLVM API Documentation
#include <PassManagerBuilder.h>
Public Types | |
enum | ExtensionPointTy { EP_EarlyAsPossible, EP_ModuleOptimizerEarly, EP_LoopOptimizerEnd, EP_ScalarOptimizerLate, EP_OptimizerLast, EP_EnabledOnOptLevel0 } |
typedef void(* | ExtensionFn )(const PassManagerBuilder &Builder, PassManagerBase &PM) |
Public Member Functions | |
PassManagerBuilder () | |
~PassManagerBuilder () | |
void | addExtension (ExtensionPointTy Ty, ExtensionFn Fn) |
void | populateFunctionPassManager (FunctionPassManager &FPM) |
void | populateModulePassManager (PassManagerBase &MPM) |
populateModulePassManager - This sets up the primary pass manager. More... | |
void | populateLTOPassManager (PassManagerBase &PM, bool Internalize, bool RunInliner, bool DisableGVNLoadPRE=false) |
Static Public Member Functions | |
static void | addGlobalExtension (ExtensionPointTy Ty, ExtensionFn Fn) |
PassManagerBuilder - This class is used to set up a standard optimization sequence for languages like C and C++, allowing some APIs to customize the pass sequence in various ways. A simple example of using it would be:
PassManagerBuilder Builder; Builder.OptLevel = 2; Builder.populateFunctionPassManager(FPM); Builder.populateModulePassManager(MPM);
In addition to setting up the basic passes, PassManagerBuilder allows frontends to vend a plugin API, where plugins are allowed to add extensions to the default pass manager. They do this by specifying where in the pass pipeline they want to be added, along with a callback function that adds the pass(es). For example, a plugin that wanted to add a loop optimization could do something like this:
static void addMyLoopPass(const PMBuilder &Builder, PassManagerBase &PM) { if (Builder.getOptLevel() > 2 && Builder.getOptSizeLevel() == 0) PM.add(createMyAwesomePass()); } ... Builder.addExtension(PassManagerBuilder::EP_LoopOptimizerEnd, addMyLoopPass); ...
Definition at line 56 of file Transforms/IPO/PassManagerBuilder.h.
typedef void(* llvm::PassManagerBuilder::ExtensionFn)(const PassManagerBuilder &Builder, PassManagerBase &PM) |
Extensions are passed the builder itself (so they can see how it is configured) as well as the pass manager to add stuff to.
Definition at line 61 of file Transforms/IPO/PassManagerBuilder.h.
Definition at line 63 of file Transforms/IPO/PassManagerBuilder.h.
PassManagerBuilder::PassManagerBuilder | ( | ) |
Definition at line 61 of file PassManagerBuilder.cpp.
References BBVectorize, DisableUnitAtATime, DisableUnrollLoops, LateVectorization, LateVectorize, LibraryInfo, LoopVectorize, OptLevel, RerollLoops, RunBBVectorization, RunLoopRerolling, RunLoopVectorization, RunSLPVectorization, SizeLevel, and SLPVectorize.
PassManagerBuilder::~PassManagerBuilder | ( | ) |
Definition at line 75 of file PassManagerBuilder.cpp.
References Inliner, and LibraryInfo.
void PassManagerBuilder::addExtension | ( | ExtensionPointTy | Ty, |
ExtensionFn | Fn | ||
) |
Definition at line 90 of file PassManagerBuilder.cpp.
|
static |
Adds an extension that will be used by all PassManagerBuilder instances. This is intended to be used by plugins, to register a set of optimisations to run automatically.
Definition at line 84 of file PassManagerBuilder.cpp.
References GlobalExtensions.
Referenced by llvm::RegisterStandardPasses::RegisterStandardPasses().
void PassManagerBuilder::populateFunctionPassManager | ( | FunctionPassManager & | FPM | ) |
populateFunctionPassManager - This fills in the function pass manager, which is expected to be run on each function immediately as it is generated. The idea is to reduce the size of the IR in memory.
Definition at line 113 of file PassManagerBuilder.cpp.
References llvm::createCFGSimplificationPass(), llvm::createEarlyCSEPass(), llvm::createLowerExpectIntrinsicPass(), llvm::createScalarReplAggregatesPass(), llvm::createSROAPass(), EP_EarlyAsPossible, LibraryInfo, OptLevel, and UseNewSROA.
Referenced by LLVMPassManagerBuilderPopulateFunctionPassManager().
void PassManagerBuilder::populateLTOPassManager | ( | PassManagerBase & | PM, |
bool | Internalize, | ||
bool | RunInliner, | ||
bool | DisableGVNLoadPRE = false |
||
) |
Definition at line 276 of file PassManagerBuilder.cpp.
References llvm::createArgumentPromotionPass(), llvm::createCFGSimplificationPass(), llvm::createConstantMergePass(), llvm::createDeadArgEliminationPass(), llvm::createDeadStoreEliminationPass(), llvm::createFunctionAttrsPass(), llvm::createFunctionInliningPass(), llvm::createGlobalDCEPass(), llvm::createGlobalOptimizerPass(), llvm::createGlobalsModRefPass(), llvm::createGVNPass(), llvm::createInstructionCombiningPass(), llvm::createInternalizePass(), llvm::createIPSCCPPass(), llvm::createJumpThreadingPass(), llvm::createLICMPass(), llvm::createMemCpyOptPass(), llvm::createPruneEHPass(), llvm::createScalarReplAggregatesPass(), llvm::createSROAPass(), and UseNewSROA.
Referenced by LLVMPassManagerBuilderPopulateLTOPassManager().
void PassManagerBuilder::populateModulePassManager | ( | PassManagerBase & | MPM | ) |
populateModulePassManager - This sets up the primary pass manager.
Definition at line 132 of file PassManagerBuilder.cpp.
References BBVectorize, llvm::createAggressiveDCEPass(), llvm::createArgumentPromotionPass(), llvm::createBarrierNoopPass(), llvm::createBBVectorizePass(), llvm::createCFGSimplificationPass(), llvm::createConstantMergePass(), llvm::createCorrelatedValuePropagationPass(), llvm::createDeadArgEliminationPass(), llvm::createDeadStoreEliminationPass(), llvm::createEarlyCSEPass(), llvm::createFunctionAttrsPass(), llvm::createGlobalDCEPass(), llvm::createGlobalOptimizerPass(), llvm::createGVNPass(), llvm::createIndVarSimplifyPass(), llvm::createInstructionCombiningPass(), llvm::createIPSCCPPass(), llvm::createJumpThreadingPass(), llvm::createLICMPass(), llvm::createLoopDeletionPass(), llvm::createLoopIdiomPass(), llvm::createLoopRerollPass(), llvm::createLoopRotatePass(), llvm::createLoopUnrollPass(), llvm::createLoopUnswitchPass(), llvm::createLoopVectorizePass(), llvm::createMemCpyOptPass(), llvm::createPruneEHPass(), llvm::createReassociatePass(), llvm::createScalarReplAggregatesPass(), llvm::createSCCPPass(), llvm::createSLPVectorizerPass(), llvm::createSROAPass(), llvm::createStripDeadPrototypesPass(), llvm::createTailCallEliminationPass(), DisableUnitAtATime, DisableUnrollLoops, EP_EnabledOnOptLevel0, EP_LoopOptimizerEnd, EP_ModuleOptimizerEarly, EP_OptimizerLast, EP_ScalarOptimizerLate, GlobalExtensions, LateVectorize, LibraryInfo, LoopVectorize, OptLevel, RerollLoops, SizeLevel, SLPVectorize, UseGVNAfterVectorization, and UseNewSROA.
Referenced by LLVMPassManagerBuilderPopulateModulePassManager().
bool llvm::PassManagerBuilder::BBVectorize |
Definition at line 111 of file Transforms/IPO/PassManagerBuilder.h.
Referenced by PassManagerBuilder(), and populateModulePassManager().
bool llvm::PassManagerBuilder::DisableUnitAtATime |
Definition at line 109 of file Transforms/IPO/PassManagerBuilder.h.
Referenced by LLVMPassManagerBuilderSetDisableUnitAtATime(), PassManagerBuilder(), and populateModulePassManager().
bool llvm::PassManagerBuilder::DisableUnrollLoops |
Definition at line 110 of file Transforms/IPO/PassManagerBuilder.h.
Referenced by LLVMPassManagerBuilderSetDisableUnrollLoops(), PassManagerBuilder(), and populateModulePassManager().
Pass* llvm::PassManagerBuilder::Inliner |
Inliner - Specifies the inliner to use. If this is non-null, it is added to the per-module passes.
Definition at line 107 of file Transforms/IPO/PassManagerBuilder.h.
Referenced by LLVMPassManagerBuilderUseInlinerWithThreshold(), and ~PassManagerBuilder().
bool llvm::PassManagerBuilder::LateVectorize |
Definition at line 114 of file Transforms/IPO/PassManagerBuilder.h.
Referenced by PassManagerBuilder(), and populateModulePassManager().
TargetLibraryInfo* llvm::PassManagerBuilder::LibraryInfo |
LibraryInfo - Specifies information about the runtime library for the optimizer. If this is non-null, it is added to both the function and per-module pass pipeline.
Definition at line 103 of file Transforms/IPO/PassManagerBuilder.h.
Referenced by PassManagerBuilder(), populateFunctionPassManager(), populateModulePassManager(), and ~PassManagerBuilder().
bool llvm::PassManagerBuilder::LoopVectorize |
Definition at line 113 of file Transforms/IPO/PassManagerBuilder.h.
Referenced by PassManagerBuilder(), and populateModulePassManager().
unsigned llvm::PassManagerBuilder::OptLevel |
The Optimization Level - Specify the basic optimization level. 0 = -O0, 1 = -O1, 2 = -O2, 3 = -O3
Definition at line 94 of file Transforms/IPO/PassManagerBuilder.h.
Referenced by LLVMPassManagerBuilderSetOptLevel(), PassManagerBuilder(), populateFunctionPassManager(), and populateModulePassManager().
bool llvm::PassManagerBuilder::RerollLoops |
Definition at line 115 of file Transforms/IPO/PassManagerBuilder.h.
Referenced by PassManagerBuilder(), and populateModulePassManager().
unsigned llvm::PassManagerBuilder::SizeLevel |
SizeLevel - How much we're optimizing for size. 0 = none, 1 = -Os, 2 = -Oz
Definition at line 98 of file Transforms/IPO/PassManagerBuilder.h.
Referenced by LLVMPassManagerBuilderSetSizeLevel(), PassManagerBuilder(), and populateModulePassManager().
bool llvm::PassManagerBuilder::SLPVectorize |
Definition at line 112 of file Transforms/IPO/PassManagerBuilder.h.
Referenced by PassManagerBuilder(), and populateModulePassManager().