1
Fork 0

Add --time-llvm-passes.

This commit is contained in:
Graydon Hoare 2011-05-10 16:10:08 -07:00
parent 813636d52e
commit d6f1fcff6b
6 changed files with 40 additions and 4 deletions

View file

@ -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();
}
} }
} }

View file

@ -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);

View file

@ -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);

View file

@ -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;

View file

@ -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);
}

View file

@ -1,9 +1,11 @@
LLVMRustCreateMemoryBufferWithContentsOfFile LLVMRustCreateMemoryBufferWithContentsOfFile
LLVMRustEnableTimePasses
LLVMRustWriteOutputFile LLVMRustWriteOutputFile
LLVMRustGetLastError LLVMRustGetLastError
LLVMRustGetHostTriple LLVMRustGetHostTriple
LLVMRustConstSmallInt LLVMRustConstSmallInt
LLVMRustParseBitcode LLVMRustParseBitcode
LLVMRustPrintPassTimings
LLVMLinkModules LLVMLinkModules
LLVMCreateObjectFile LLVMCreateObjectFile
LLVMDisposeObjectFile LLVMDisposeObjectFile