Add --time-llvm-passes.
This commit is contained in:
parent
813636d52e
commit
d6f1fcff6b
6 changed files with 40 additions and 4 deletions
|
@ -75,11 +75,16 @@ mod Write {
|
||||||
}
|
}
|
||||||
|
|
||||||
fn run_passes(session.session sess, ModuleRef llmod, str output) {
|
fn run_passes(session.session sess, ModuleRef llmod, str output) {
|
||||||
|
|
||||||
|
auto opts = sess.get_opts();
|
||||||
|
|
||||||
|
if (opts.time_llvm_passes) {
|
||||||
|
llvm.LLVMRustEnableTimePasses();
|
||||||
|
}
|
||||||
|
|
||||||
link_intrinsics(sess, llmod);
|
link_intrinsics(sess, llmod);
|
||||||
|
|
||||||
auto pm = mk_pass_manager();
|
auto pm = mk_pass_manager();
|
||||||
auto opts = sess.get_opts();
|
|
||||||
|
|
||||||
auto td = mk_target_data(x86.get_data_layout());
|
auto td = mk_target_data(x86.get_data_layout());
|
||||||
llvm.LLVMAddTargetData(td.lltd, pm.llpm);
|
llvm.LLVMAddTargetData(td.lltd, pm.llpm);
|
||||||
|
|
||||||
|
@ -165,6 +170,9 @@ mod Write {
|
||||||
Str.buf(output),
|
Str.buf(output),
|
||||||
FileType);
|
FileType);
|
||||||
llvm.LLVMDisposeModule(llmod);
|
llvm.LLVMDisposeModule(llmod);
|
||||||
|
if (opts.time_llvm_passes) {
|
||||||
|
llvm.LLVMRustPrintPassTimings();
|
||||||
|
}
|
||||||
ret;
|
ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -172,6 +180,10 @@ mod Write {
|
||||||
|
|
||||||
llvm.LLVMWriteBitcodeToFile(llmod, Str.buf(output));
|
llvm.LLVMWriteBitcodeToFile(llmod, Str.buf(output));
|
||||||
llvm.LLVMDisposeModule(llmod);
|
llvm.LLVMDisposeModule(llmod);
|
||||||
|
|
||||||
|
if (opts.time_llvm_passes) {
|
||||||
|
llvm.LLVMRustPrintPassTimings();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -157,6 +157,7 @@ options:
|
||||||
-c compile and assemble, but do not link
|
-c compile and assemble, but do not link
|
||||||
--save-temps write intermediate files in addition to normal output
|
--save-temps write intermediate files in addition to normal output
|
||||||
--time-passes time the individual phases of the compiler
|
--time-passes time the individual phases of the compiler
|
||||||
|
--time-llvm-passes time the individual phases of the LLVM backend
|
||||||
--sysroot <path> override the system root (default: rustc's directory)
|
--sysroot <path> override the system root (default: rustc's directory)
|
||||||
--no-typestate don't run the typestate pass (unsafe!)\n\n");
|
--no-typestate don't run the typestate pass (unsafe!)\n\n");
|
||||||
}
|
}
|
||||||
|
@ -209,8 +210,8 @@ fn main(vec[str] args) {
|
||||||
optflag("O"), optflag("shared"), optmulti("L"),
|
optflag("O"), optflag("shared"), optmulti("L"),
|
||||||
optflag("S"), optflag("c"), optopt("o"), optopt("g"),
|
optflag("S"), optflag("c"), optopt("o"), optopt("g"),
|
||||||
optflag("save-temps"), optopt("sysroot"),
|
optflag("save-temps"), optopt("sysroot"),
|
||||||
optflag("time-passes"), optflag("no-typestate"),
|
optflag("time-passes"), optflag("time-llvm-passes"),
|
||||||
optflag("noverify"));
|
optflag("no-typestate"), optflag("noverify"));
|
||||||
auto binary = Vec.shift[str](args);
|
auto binary = Vec.shift[str](args);
|
||||||
auto match;
|
auto match;
|
||||||
alt (GetOpts.getopts(args, opts)) {
|
alt (GetOpts.getopts(args, opts)) {
|
||||||
|
@ -254,6 +255,7 @@ fn main(vec[str] args) {
|
||||||
auto optimize = opt_present(match, "O");
|
auto optimize = opt_present(match, "O");
|
||||||
auto debuginfo = opt_present(match, "g");
|
auto debuginfo = opt_present(match, "g");
|
||||||
auto time_passes = opt_present(match, "time-passes");
|
auto time_passes = opt_present(match, "time-passes");
|
||||||
|
auto time_llvm_passes = opt_present(match, "time-llvm-passes");
|
||||||
auto run_typestate = !opt_present(match, "no-typestate");
|
auto run_typestate = !opt_present(match, "no-typestate");
|
||||||
auto sysroot_opt = GetOpts.opt_maybe_str(match, "sysroot");
|
auto sysroot_opt = GetOpts.opt_maybe_str(match, "sysroot");
|
||||||
|
|
||||||
|
@ -271,6 +273,7 @@ fn main(vec[str] args) {
|
||||||
run_typestate = run_typestate,
|
run_typestate = run_typestate,
|
||||||
save_temps = save_temps,
|
save_temps = save_temps,
|
||||||
time_passes = time_passes,
|
time_passes = time_passes,
|
||||||
|
time_llvm_passes = time_llvm_passes,
|
||||||
output_type = output_type,
|
output_type = output_type,
|
||||||
library_search_paths = library_search_paths,
|
library_search_paths = library_search_paths,
|
||||||
sysroot = sysroot);
|
sysroot = sysroot);
|
||||||
|
|
|
@ -32,6 +32,7 @@ type options = rec(bool shared,
|
||||||
bool run_typestate,
|
bool run_typestate,
|
||||||
bool save_temps,
|
bool save_temps,
|
||||||
bool time_passes,
|
bool time_passes,
|
||||||
|
bool time_llvm_passes,
|
||||||
back.Link.output_type output_type,
|
back.Link.output_type output_type,
|
||||||
vec[str] library_search_paths,
|
vec[str] library_search_paths,
|
||||||
str sysroot);
|
str sysroot);
|
||||||
|
|
|
@ -872,6 +872,12 @@ native mod llvm = llvm_lib {
|
||||||
fn LLVMRustConstSmallInt(TypeRef IntTy, uint N,
|
fn LLVMRustConstSmallInt(TypeRef IntTy, uint N,
|
||||||
Bool SignExtend) -> ValueRef;
|
Bool SignExtend) -> ValueRef;
|
||||||
|
|
||||||
|
/** Turn on LLVM pass-timing. */
|
||||||
|
fn LLVMRustEnableTimePasses();
|
||||||
|
|
||||||
|
/** Print the pass timings since static dtors aren't picking them up. */
|
||||||
|
fn LLVMRustPrintPassTimings();
|
||||||
|
|
||||||
/** Links LLVM modules together. `Src` is destroyed by this call and
|
/** Links LLVM modules together. `Src` is destroyed by this call and
|
||||||
must never be referenced again. */
|
must never be referenced again. */
|
||||||
fn LLVMLinkModules(ModuleRef Dest, ModuleRef Src) -> Bool;
|
fn LLVMLinkModules(ModuleRef Dest, ModuleRef Src) -> Bool;
|
||||||
|
|
|
@ -16,6 +16,8 @@
|
||||||
#include "llvm/PassManager.h"
|
#include "llvm/PassManager.h"
|
||||||
#include "llvm/ADT/Triple.h"
|
#include "llvm/ADT/Triple.h"
|
||||||
#include "llvm/Support/FormattedStream.h"
|
#include "llvm/Support/FormattedStream.h"
|
||||||
|
#include "llvm/Support/Timer.h"
|
||||||
|
#include "llvm/Support/raw_ostream.h"
|
||||||
#include "llvm/Target/TargetMachine.h"
|
#include "llvm/Target/TargetMachine.h"
|
||||||
#include "llvm/Target/TargetSelect.h"
|
#include "llvm/Target/TargetSelect.h"
|
||||||
#include "llvm/Target/TargetRegistry.h"
|
#include "llvm/Target/TargetRegistry.h"
|
||||||
|
@ -121,3 +123,13 @@ extern "C" LLVMValueRef LLVMRustConstSmallInt(LLVMTypeRef IntTy, unsigned N,
|
||||||
LLVMBool SignExtend) {
|
LLVMBool SignExtend) {
|
||||||
return LLVMConstInt(IntTy, (unsigned long long)N, SignExtend);
|
return LLVMConstInt(IntTy, (unsigned long long)N, SignExtend);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
extern bool llvm::TimePassesIsEnabled;
|
||||||
|
extern "C" void LLVMRustEnableTimePasses() {
|
||||||
|
TimePassesIsEnabled = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
extern "C" void LLVMRustPrintPassTimings() {
|
||||||
|
raw_fd_ostream OS (2, false); // stderr.
|
||||||
|
TimerGroup::printAll(OS);
|
||||||
|
}
|
||||||
|
|
|
@ -1,9 +1,11 @@
|
||||||
LLVMRustCreateMemoryBufferWithContentsOfFile
|
LLVMRustCreateMemoryBufferWithContentsOfFile
|
||||||
|
LLVMRustEnableTimePasses
|
||||||
LLVMRustWriteOutputFile
|
LLVMRustWriteOutputFile
|
||||||
LLVMRustGetLastError
|
LLVMRustGetLastError
|
||||||
LLVMRustGetHostTriple
|
LLVMRustGetHostTriple
|
||||||
LLVMRustConstSmallInt
|
LLVMRustConstSmallInt
|
||||||
LLVMRustParseBitcode
|
LLVMRustParseBitcode
|
||||||
|
LLVMRustPrintPassTimings
|
||||||
LLVMLinkModules
|
LLVMLinkModules
|
||||||
LLVMCreateObjectFile
|
LLVMCreateObjectFile
|
||||||
LLVMDisposeObjectFile
|
LLVMDisposeObjectFile
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue