mirror of
https://github.com/rust-lang/rust.git
synced 2024-11-25 08:13:41 +00:00
Simplify FFI calls for -Ztime-llvm-passes
and -Zprint-codegen-stats
This commit is contained in:
parent
43c78051ea
commit
5bfa0b106e
@ -22,7 +22,6 @@
|
||||
|
||||
use std::any::Any;
|
||||
use std::ffi::CStr;
|
||||
use std::io::Write;
|
||||
use std::mem::ManuallyDrop;
|
||||
|
||||
use back::owned_target_machine::OwnedTargetMachine;
|
||||
@ -165,30 +164,12 @@ impl WriteBackendMethods for LlvmCodegenBackend {
|
||||
type ThinData = back::lto::ThinData;
|
||||
type ThinBuffer = back::lto::ThinBuffer;
|
||||
fn print_pass_timings(&self) {
|
||||
unsafe {
|
||||
let mut size = 0;
|
||||
let cstr = llvm::LLVMRustPrintPassTimings(&raw mut size);
|
||||
if cstr.is_null() {
|
||||
println!("failed to get pass timings");
|
||||
} else {
|
||||
let timings = std::slice::from_raw_parts(cstr as *const u8, size);
|
||||
std::io::stdout().write_all(timings).unwrap();
|
||||
libc::free(cstr as *mut _);
|
||||
}
|
||||
}
|
||||
let timings = llvm::build_string(|s| unsafe { llvm::LLVMRustPrintPassTimings(s) }).unwrap();
|
||||
print!("{timings}");
|
||||
}
|
||||
fn print_statistics(&self) {
|
||||
unsafe {
|
||||
let mut size = 0;
|
||||
let cstr = llvm::LLVMRustPrintStatistics(&raw mut size);
|
||||
if cstr.is_null() {
|
||||
println!("failed to get pass stats");
|
||||
} else {
|
||||
let stats = std::slice::from_raw_parts(cstr as *const u8, size);
|
||||
std::io::stdout().write_all(stats).unwrap();
|
||||
libc::free(cstr as *mut _);
|
||||
}
|
||||
}
|
||||
let stats = llvm::build_string(|s| unsafe { llvm::LLVMRustPrintStatistics(s) }).unwrap();
|
||||
print!("{stats}");
|
||||
}
|
||||
fn run_link(
|
||||
cgcx: &CodegenContext<Self>,
|
||||
|
@ -1765,11 +1765,13 @@ unsafe extern "C" {
|
||||
/// Returns a string describing the last error caused by an LLVMRust* call.
|
||||
pub fn LLVMRustGetLastError() -> *const c_char;
|
||||
|
||||
/// Print the pass timings since static dtors aren't picking them up.
|
||||
pub fn LLVMRustPrintPassTimings(size: *const size_t) -> *const c_char;
|
||||
/// Prints the timing information collected by `-Ztime-llvm-passes`.
|
||||
#[expect(improper_ctypes)]
|
||||
pub(crate) fn LLVMRustPrintPassTimings(OutStr: &RustString);
|
||||
|
||||
/// Print the statistics since static dtors aren't picking them up.
|
||||
pub fn LLVMRustPrintStatistics(size: *const size_t) -> *const c_char;
|
||||
/// Prints the statistics collected by `-Zprint-codegen-stats`.
|
||||
#[expect(improper_ctypes)]
|
||||
pub(crate) fn LLVMRustPrintStatistics(OutStr: &RustString);
|
||||
|
||||
/// Prepares inline assembly.
|
||||
pub fn LLVMRustInlineAsm(
|
||||
|
@ -140,26 +140,14 @@ extern "C" void LLVMRustSetNormalizedTarget(LLVMModuleRef M,
|
||||
unwrap(M)->setTargetTriple(Triple::normalize(Triple));
|
||||
}
|
||||
|
||||
extern "C" const char *LLVMRustPrintPassTimings(size_t *Len) {
|
||||
std::string buf;
|
||||
auto SS = raw_string_ostream(buf);
|
||||
TimerGroup::printAll(SS);
|
||||
SS.flush();
|
||||
*Len = buf.length();
|
||||
char *CStr = (char *)malloc(*Len);
|
||||
memcpy(CStr, buf.c_str(), *Len);
|
||||
return CStr;
|
||||
extern "C" void LLVMRustPrintPassTimings(RustStringRef OutBuf) {
|
||||
auto OS = RawRustStringOstream(OutBuf);
|
||||
TimerGroup::printAll(OS);
|
||||
}
|
||||
|
||||
extern "C" const char *LLVMRustPrintStatistics(size_t *Len) {
|
||||
std::string buf;
|
||||
auto SS = raw_string_ostream(buf);
|
||||
llvm::PrintStatistics(SS);
|
||||
SS.flush();
|
||||
*Len = buf.length();
|
||||
char *CStr = (char *)malloc(*Len);
|
||||
memcpy(CStr, buf.c_str(), *Len);
|
||||
return CStr;
|
||||
extern "C" void LLVMRustPrintStatistics(RustStringRef OutBuf) {
|
||||
auto OS = RawRustStringOstream(OutBuf);
|
||||
llvm::PrintStatistics(OS);
|
||||
}
|
||||
|
||||
extern "C" LLVMValueRef LLVMRustGetNamedValue(LLVMModuleRef M, const char *Name,
|
||||
|
Loading…
Reference in New Issue
Block a user