Changeset View
Changeset View
Standalone View
Standalone View
tools/opt/opt.cpp
Show First 20 Lines • Show All 44 Lines • ▼ Show 20 Lines | |||||
#include "llvm/Support/PrettyStackTrace.h" | #include "llvm/Support/PrettyStackTrace.h" | ||||
#include "llvm/Support/Signals.h" | #include "llvm/Support/Signals.h" | ||||
#include "llvm/Support/SourceMgr.h" | #include "llvm/Support/SourceMgr.h" | ||||
#include "llvm/Support/SystemUtils.h" | #include "llvm/Support/SystemUtils.h" | ||||
#include "llvm/Support/TargetRegistry.h" | #include "llvm/Support/TargetRegistry.h" | ||||
#include "llvm/Support/TargetSelect.h" | #include "llvm/Support/TargetSelect.h" | ||||
#include "llvm/Support/ToolOutputFile.h" | #include "llvm/Support/ToolOutputFile.h" | ||||
#include "llvm/Target/TargetMachine.h" | #include "llvm/Target/TargetMachine.h" | ||||
#include "llvm/Transforms/Coroutines.h" | |||||
#include "llvm/Transforms/IPO/PassManagerBuilder.h" | #include "llvm/Transforms/IPO/PassManagerBuilder.h" | ||||
#include "llvm/Transforms/Utils/Cloning.h" | #include "llvm/Transforms/Utils/Cloning.h" | ||||
#include <algorithm> | #include <algorithm> | ||||
#include <memory> | #include <memory> | ||||
using namespace llvm; | using namespace llvm; | ||||
using namespace opt_tool; | using namespace opt_tool; | ||||
// The OptimizationList is automatically populated with registered Passes by the | // The OptimizationList is automatically populated with registered Passes by the | ||||
▲ Show 20 Lines • Show All 149 Lines • ▼ Show 20 Lines | RunTwice("run-twice", | ||||
cl::desc("Run all passes twice, re-using the same pass manager."), | cl::desc("Run all passes twice, re-using the same pass manager."), | ||||
cl::init(false), cl::Hidden); | cl::init(false), cl::Hidden); | ||||
static cl::opt<bool> DiscardValueNames( | static cl::opt<bool> DiscardValueNames( | ||||
"discard-value-names", | "discard-value-names", | ||||
cl::desc("Discard names from Value (other than GlobalValue)."), | cl::desc("Discard names from Value (other than GlobalValue)."), | ||||
cl::init(false), cl::Hidden); | cl::init(false), cl::Hidden); | ||||
static cl::opt<bool> Coroutines( | |||||
"enable-coroutines", | |||||
cl::desc("Enable coroutine passes."), | |||||
cl::init(false), cl::Hidden); | |||||
static cl::opt<bool> PassRemarksWithHotness( | static cl::opt<bool> PassRemarksWithHotness( | ||||
"pass-remarks-with-hotness", | "pass-remarks-with-hotness", | ||||
cl::desc("With PGO, include profile count in optimization remarks"), | cl::desc("With PGO, include profile count in optimization remarks"), | ||||
cl::Hidden); | cl::Hidden); | ||||
static inline void addPass(legacy::PassManagerBase &PM, Pass *P) { | static inline void addPass(legacy::PassManagerBase &PM, Pass *P) { | ||||
// Add the pass to the pass manager... | // Add the pass to the pass manager... | ||||
PM.add(P); | PM.add(P); | ||||
▲ Show 20 Lines • Show All 43 Lines • ▼ Show 20 Lines | static void AddOptimizationPasses(legacy::PassManagerBase &MPM, | ||||
// Add target-specific passes that need to run as early as possible. | // Add target-specific passes that need to run as early as possible. | ||||
if (TM) | if (TM) | ||||
Builder.addExtension( | Builder.addExtension( | ||||
PassManagerBuilder::EP_EarlyAsPossible, | PassManagerBuilder::EP_EarlyAsPossible, | ||||
[&](const PassManagerBuilder &, legacy::PassManagerBase &PM) { | [&](const PassManagerBuilder &, legacy::PassManagerBase &PM) { | ||||
TM->addEarlyAsPossiblePasses(PM); | TM->addEarlyAsPossiblePasses(PM); | ||||
}); | }); | ||||
if (Coroutines) | |||||
addCoroutinePassesToExtensionPoints(Builder); | |||||
Builder.populateFunctionPassManager(FPM); | Builder.populateFunctionPassManager(FPM); | ||||
Builder.populateModulePassManager(MPM); | Builder.populateModulePassManager(MPM); | ||||
} | } | ||||
static void AddStandardLinkPasses(legacy::PassManagerBase &PM) { | static void AddStandardLinkPasses(legacy::PassManagerBase &PM) { | ||||
PassManagerBuilder Builder; | PassManagerBuilder Builder; | ||||
Builder.VerifyInput = true; | Builder.VerifyInput = true; | ||||
if (DisableOptimizations) | if (DisableOptimizations) | ||||
▲ Show 20 Lines • Show All 58 Lines • ▼ Show 20 Lines | int main(int argc, char **argv) { | ||||
InitializeAllTargets(); | InitializeAllTargets(); | ||||
InitializeAllTargetMCs(); | InitializeAllTargetMCs(); | ||||
InitializeAllAsmPrinters(); | InitializeAllAsmPrinters(); | ||||
// Initialize passes | // Initialize passes | ||||
PassRegistry &Registry = *PassRegistry::getPassRegistry(); | PassRegistry &Registry = *PassRegistry::getPassRegistry(); | ||||
initializeCore(Registry); | initializeCore(Registry); | ||||
initializeCoroutines(Registry); | |||||
initializeScalarOpts(Registry); | initializeScalarOpts(Registry); | ||||
initializeObjCARCOpts(Registry); | initializeObjCARCOpts(Registry); | ||||
initializeVectorization(Registry); | initializeVectorization(Registry); | ||||
initializeIPO(Registry); | initializeIPO(Registry); | ||||
initializeAnalysis(Registry); | initializeAnalysis(Registry); | ||||
initializeTransformUtils(Registry); | initializeTransformUtils(Registry); | ||||
initializeInstCombine(Registry); | initializeInstCombine(Registry); | ||||
initializeInstrumentation(Registry); | initializeInstrumentation(Registry); | ||||
▲ Show 20 Lines • Show All 345 Lines • Show Last 20 Lines |