From 83e221ce01a798d99f071b250807af7c1458004e Mon Sep 17 00:00:00 2001 From: arphaman Date: Thu, 18 Jul 2013 09:38:42 +0100 Subject: added optimization passes to the driver --- tools/driver/Main.cpp | 29 +++++++++++++++++++++++++++-- 1 file changed, 27 insertions(+), 2 deletions(-) (limited to 'tools') diff --git a/tools/driver/Main.cpp b/tools/driver/Main.cpp index 383ac6c79e..093bdf203a 100644 --- a/tools/driver/Main.cpp +++ b/tools/driver/Main.cpp @@ -23,6 +23,9 @@ #include "llvm/IR/Module.h" #include "llvm/ExecutionEngine/ExecutionEngine.h" #include "llvm/PassManager.h" +#include "llvm/Transforms/IPO.h" +#include "llvm/Transforms/IPO/PassManagerBuilder.h" +#include "llvm/Transforms/Instrumentation.h" #include "llvm/Analysis/Verifier.h" #include "llvm/Analysis/Passes.h" #include "llvm/Transforms/Scalar.h" @@ -94,14 +97,17 @@ namespace { cl::opt OutputFile("o", cl::desc(""), cl::init("")); + cl::opt + OptLevel("O", cl::desc("optimization level"), cl::init(0), cl::Prefix); + cl::opt EmitDebugInfo("g", cl::desc("Emit debugging info"), cl::init(false)); cl::list - LinkDirectories("L", cl::desc("Additional directories for library files")); + LinkDirectories("L", cl::desc("Additional directories for library files"), cl::Prefix); cl::list - LinkLibraries("l", cl::desc("Additional libraries")); + LinkLibraries("l", cl::desc("Additional libraries"), cl::Prefix); cl::opt CompileOnly("c", cl::desc("compile only, do not link"), cl::init(false)); @@ -252,6 +258,25 @@ static bool ParseFile(const std::string &Filename, if(EmitASM) BA = Backend_EmitAssembly; if(EmitLLVM) BA = Backend_EmitLL; + if(!(EmitLLVM && OptLevel == 0)) { + auto PM = new PassManager(); + + PM->add(createPromoteMemoryToRegisterPass()); + + PassManagerBuilder PMBuilder; + PMBuilder.OptLevel = OptLevel; + PMBuilder.SizeLevel = 0; + unsigned Threshold = 225; + if (OptLevel > 2) + Threshold = 275; + PMBuilder.Inliner = createFunctionInliningPass(Threshold); + + PMBuilder.populateModulePassManager(*PM); + + PM->run(*CG->GetModule()); + delete PM; + } + llvm::Triple TheTriple(llvm::sys::getDefaultTargetTriple()); const llvm::Target *TheTarget = 0; std::string Err; -- cgit v1.2.1