Allow specific optimization passes to be requested from the command line.

Now you can run "`ldc test.d -c -mem2reg -simplifycfg`" if you feel the urge.
The -O<N> options are still supported, and are inserted in the passes list in
the position where they appear on the command line.
(so -simplifycfg -O1 -instcombine does the "right thing")

One small change: -inline is renamed to -enable-inlining due to a naming
conflict with the option to add the -inline pass. -inline now inserts the
inlining pass in the position specified, not in the middle of -O<N>.
(ldmd has been updated to translate -inline to -enable-inlining)
This commit is contained in:
Frits van Bommel
2009-03-29 15:46:55 +02:00
parent f179acda32
commit e129494812
8 changed files with 115 additions and 54 deletions

View File

@@ -49,6 +49,7 @@
#include "gen/runtime.h"
#include "gen/abi.h"
#include "gen/cl_options.h"
#include "gen/optimizer.h"
#include "ir/irvar.h"
#include "ir/irmodule.h"
@@ -61,9 +62,6 @@ static llvm::cl::opt<bool> noVerify("noverify",
//////////////////////////////////////////////////////////////////////////////////////////
// in gen/optimize.cpp
void ldc_optimize_module(llvm::Module* m, char lvl, bool doinline);
// fwd decl
void write_asm_to_file(llvm::TargetMachine &Target, llvm::Module& m, llvm::raw_fd_ostream& Out);
void assemble(const llvm::sys::Path& asmpath, const llvm::sys::Path& objpath);
@@ -189,10 +187,10 @@ llvm::Module* Module::genLLVMModule(Ir* sir)
void writeModule(llvm::Module* m, std::string filename)
{
// run optimizer
ldc_optimize_module(m, global.params.optimizeLevel, global.params.llvmInline);
bool reverify = ldc_optimize_module(m);
// verify the llvm
if (!noVerify && (global.params.optimizeLevel >= 0 || global.params.llvmInline)) {
if (!noVerify && reverify) {
std::string verifyErr;
Logger::println("Verifying module... again...");
LOG_SCOPE;