Use OutputFilenames
to generate output file for -Zllvm-time-trace
The resulting profile will include the crate name and will be stored in the `--out-dir` directory. This implementation makes it convenient to use LLVM time trace together with cargo, in the contrast to the previous implementation which would overwrite profiles or store them in `.cargo/registry/..`.
This commit is contained in:
parent
06a6674a7d
commit
3f2a1c9c17
7 changed files with 16 additions and 6 deletions
|
@ -340,6 +340,7 @@ impl CodegenBackend for LlvmCodegenBackend {
|
|||
&self,
|
||||
ongoing_codegen: Box<dyn Any>,
|
||||
sess: &Session,
|
||||
outputs: &OutputFilenames,
|
||||
) -> Result<(CodegenResults, FxHashMap<WorkProductId, WorkProduct>), ErrorReported> {
|
||||
let (codegen_results, work_products) = ongoing_codegen
|
||||
.downcast::<rustc_codegen_ssa::back::write::OngoingCodegen<LlvmCodegenBackend>>()
|
||||
|
@ -348,7 +349,8 @@ impl CodegenBackend for LlvmCodegenBackend {
|
|||
|
||||
sess.time("llvm_dump_timing_file", || {
|
||||
if sess.opts.debugging_opts.llvm_time_trace {
|
||||
llvm_util::time_trace_profiler_finish("llvm_timings.json");
|
||||
let file_name = outputs.with_extension("llvm_timings.json");
|
||||
llvm_util::time_trace_profiler_finish(&file_name);
|
||||
}
|
||||
});
|
||||
|
||||
|
|
|
@ -4,6 +4,7 @@ use libc::c_int;
|
|||
use libloading::Library;
|
||||
use rustc_codegen_ssa::target_features::supported_target_features;
|
||||
use rustc_data_structures::fx::FxHashSet;
|
||||
use rustc_fs_util::path_to_c_string;
|
||||
use rustc_middle::bug;
|
||||
use rustc_session::config::PrintRequest;
|
||||
use rustc_session::Session;
|
||||
|
@ -13,6 +14,7 @@ use std::ffi::{CStr, CString};
|
|||
use tracing::debug;
|
||||
|
||||
use std::mem;
|
||||
use std::path::Path;
|
||||
use std::ptr;
|
||||
use std::slice;
|
||||
use std::str;
|
||||
|
@ -134,9 +136,9 @@ unsafe fn configure_llvm(sess: &Session) {
|
|||
llvm::LLVMRustSetLLVMOptions(llvm_args.len() as c_int, llvm_args.as_ptr());
|
||||
}
|
||||
|
||||
pub fn time_trace_profiler_finish(file_name: &str) {
|
||||
pub fn time_trace_profiler_finish(file_name: &Path) {
|
||||
unsafe {
|
||||
let file_name = CString::new(file_name).unwrap();
|
||||
let file_name = path_to_c_string(file_name);
|
||||
llvm::LLVMTimeTraceProfilerFinish(file_name.as_ptr());
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue