diff options
| -rw-r--r-- | src/compiler_llvm/compilation_unit.cc | 18 | ||||
| -rw-r--r-- | src/compiler_llvm/compiler_llvm.cc | 9 |
2 files changed, 22 insertions, 5 deletions
diff --git a/src/compiler_llvm/compilation_unit.cc b/src/compiler_llvm/compilation_unit.cc index 32f17869cb..b976fd2b0f 100644 --- a/src/compiler_llvm/compilation_unit.cc +++ b/src/compiler_llvm/compilation_unit.cc @@ -204,7 +204,7 @@ bool CompilationUnit::Materialize() { llvm::TargetMachine* target_machine = target->createTargetMachine(target_triple, "", target_attr, target_options, llvm::Reloc::Static, llvm::CodeModel::Small, - llvm::CodeGenOpt::None); + llvm::CodeGenOpt::Less); CHECK(target_machine != NULL) << "Failed to create target machine"; @@ -220,6 +220,14 @@ bool CompilationUnit::Materialize() { llvm::FunctionPassManager fpm(module_); fpm.add(new llvm::TargetData(*target_data)); + // Add optimization pass + llvm::PassManagerBuilder pm_builder; + pm_builder.Inliner = NULL; // TODO: add some inline in the future + pm_builder.OptLevel = 1; + pm_builder.DisableSimplifyLibCalls = 1; + pm_builder.populateModulePassManager(pm); + pm_builder.populateFunctionPassManager(fpm); + // Add passes to emit ELF image { llvm::formatted_raw_ostream formatted_os( @@ -237,6 +245,14 @@ bool CompilationUnit::Materialize() { // Add pass to update the frame_size_in_bytes_ pm.add(new ::UpdateFrameSizePass(this)); + // Run the per-function optimization + fpm.doInitialization(); + for (llvm::Module::iterator F = module_->begin(), E = module_->end(); + F != E; ++F) { + fpm.run(*F); + } + fpm.doFinalization(); + // Run the code generation passes pm.run(*module_); } diff --git a/src/compiler_llvm/compiler_llvm.cc b/src/compiler_llvm/compiler_llvm.cc index c89000357f..443950df07 100644 --- a/src/compiler_llvm/compiler_llvm.cc +++ b/src/compiler_llvm/compiler_llvm.cc @@ -42,11 +42,12 @@ namespace llvm { extern bool TimePassesIsEnabled; } -extern llvm::cl::opt<bool> ReserveR9; -// ReserveR9 is defined in llvm/lib/Target/ARM/ARMSubtarget.cpp -extern llvm::cl::opt<bool> EnableARMLongCalls; // NOTE: Although EnableARMLongCalls is defined in llvm/lib/Target/ARM/ // ARMISelLowering.cpp, however, it is not in the llvm namespace. +extern llvm::cl::opt<bool> EnableARMLongCalls; + +// ReserveR9 is defined in llvm/lib/Target/ARM/ARMSubtarget.cpp +extern llvm::cl::opt<bool> ReserveR9; namespace { @@ -68,7 +69,7 @@ void InitializeLLVM() { // TODO: Maybe we don't have to initialize "all" targets. // Enable -arm-long-calls - EnableARMLongCalls = true; + EnableARMLongCalls = false; // Initialize LLVM optimization passes llvm::PassRegistry ®istry = *llvm::PassRegistry::getPassRegistry(); |