Use fast regalloc and codegen at OptLevel=0.
This commit is contained in:
parent
a6e188f8bf
commit
64513808ca
@ -138,6 +138,30 @@ mod write {
|
||||
let int LLVMAssemblyFile = 0;
|
||||
let int LLVMObjectFile = 1;
|
||||
let int LLVMNullFile = 2;
|
||||
let int LLVMOptNone = 0; // -O0
|
||||
let int LLVMOptLess = 1; // -O1
|
||||
let int LLVMOptDefault = 2; // -O2, -Os
|
||||
let int LLVMOptAggressive = 3; // -O3
|
||||
|
||||
auto CodeGenOptLevel;
|
||||
alt (opts.optimize) {
|
||||
case (0u) {
|
||||
CodeGenOptLevel = LLVMOptNone;
|
||||
}
|
||||
case (1u) {
|
||||
CodeGenOptLevel = LLVMOptLess;
|
||||
}
|
||||
case (2u) {
|
||||
CodeGenOptLevel = LLVMOptDefault;
|
||||
}
|
||||
case (3u) {
|
||||
CodeGenOptLevel = LLVMOptAggressive;
|
||||
}
|
||||
case (_) {
|
||||
fail;
|
||||
}
|
||||
}
|
||||
|
||||
auto FileType;
|
||||
if (opts.output_type == output_type_object ||
|
||||
opts.output_type == output_type_exe) {
|
||||
@ -159,7 +183,8 @@ mod write {
|
||||
llvm::LLVMRustWriteOutputFile(pm.llpm, llmod,
|
||||
str::buf(triple),
|
||||
str::buf(output),
|
||||
LLVMAssemblyFile);
|
||||
LLVMAssemblyFile,
|
||||
CodeGenOptLevel);
|
||||
}
|
||||
|
||||
// Save the object file for -c or --save-temps alone
|
||||
@ -170,7 +195,8 @@ mod write {
|
||||
llvm::LLVMRustWriteOutputFile(pm.llpm, llmod,
|
||||
str::buf(triple),
|
||||
str::buf(output),
|
||||
LLVMObjectFile);
|
||||
LLVMObjectFile,
|
||||
CodeGenOptLevel);
|
||||
}
|
||||
} else {
|
||||
// If we aren't saving temps then just output the file
|
||||
@ -179,7 +205,8 @@ mod write {
|
||||
auto triple = x86::get_target_triple();
|
||||
llvm::LLVMRustWriteOutputFile(pm.llpm, llmod,
|
||||
str::buf(triple),
|
||||
str::buf(output), FileType);
|
||||
str::buf(output), FileType,
|
||||
CodeGenOptLevel);
|
||||
}
|
||||
// Clean up and return
|
||||
|
||||
|
@ -856,7 +856,7 @@ native mod llvm = "rustllvm" {
|
||||
/* FIXME: The FileType is an enum.*/
|
||||
fn LLVMRustWriteOutputFile(PassManagerRef PM, ModuleRef M,
|
||||
sbuf Triple, sbuf Output,
|
||||
int FileType);
|
||||
int FileType, int OptLevel);
|
||||
|
||||
/** Returns a string describing the last error caused by an LLVMRust*
|
||||
call. */
|
||||
|
@ -53,11 +53,6 @@ extern "C" void LLVMAddStandardModulePasses(LLVMPassManagerRef PM,
|
||||
int *RustHackToFetchPassesO = (int*)LLVMAddBasicAliasAnalysisPass;
|
||||
int *RustHackToFetchPasses2O = (int*)LLVMAddStandardModulePasses;
|
||||
|
||||
enum LLVMCodeGenFileType {
|
||||
LLVMAssemblyFile,
|
||||
LLVMObjectFile,
|
||||
LLVMNullFile // Do not emit any output.
|
||||
};
|
||||
|
||||
extern "C" bool LLVMLinkModules(LLVMModuleRef Dest, LLVMModuleRef Src) {
|
||||
static std::string err;
|
||||
@ -77,7 +72,8 @@ extern "C" void LLVMRustWriteOutputFile(LLVMPassManagerRef PMR,
|
||||
LLVMModuleRef M,
|
||||
const char *triple,
|
||||
const char *path,
|
||||
LLVMCodeGenFileType FileType) {
|
||||
TargetMachine::CodeGenFileType FileType,
|
||||
CodeGenOpt::Level OptLevel) {
|
||||
|
||||
// Set compilation options.
|
||||
llvm::NoFramePointerElim = true;
|
||||
@ -91,16 +87,14 @@ extern "C" void LLVMRustWriteOutputFile(LLVMPassManagerRef PMR,
|
||||
std::string FeaturesStr;
|
||||
TargetMachine *Target = TheTarget->createTargetMachine(triple, FeaturesStr);
|
||||
bool NoVerify = false;
|
||||
CodeGenOpt::Level OLvl = CodeGenOpt::Default;
|
||||
PassManager *PM = unwrap<PassManager>(PMR);
|
||||
std::string ErrorInfo;
|
||||
raw_fd_ostream OS(path, ErrorInfo,
|
||||
raw_fd_ostream::F_Binary);
|
||||
formatted_raw_ostream FOS(OS);
|
||||
TargetMachine::CodeGenFileType FileType2 =
|
||||
static_cast<TargetMachine::CodeGenFileType>(FileType);
|
||||
|
||||
bool foo = Target->addPassesToEmitFile(*PM, FOS, FileType2, OLvl, NoVerify);
|
||||
bool foo = Target->addPassesToEmitFile(*PM, FOS, FileType, OptLevel,
|
||||
NoVerify);
|
||||
assert(!foo);
|
||||
(void)foo;
|
||||
PM->run(*unwrap(M));
|
||||
|
Loading…
x
Reference in New Issue
Block a user