1
Fork 0

Only enable hotness information when PGO is available

This commit is contained in:
Jakub Beránek 2023-08-07 17:56:57 +02:00
parent 93bdc01adf
commit 9d417d7c86
No known key found for this signature in database
GPG key ID: 909CD0D26483516B
4 changed files with 13 additions and 3 deletions

View file

@ -320,6 +320,7 @@ impl<'a> DiagnosticHandlers<'a> {
}) })
.and_then(|dir| dir.to_str().and_then(|p| CString::new(p).ok())); .and_then(|dir| dir.to_str().and_then(|p| CString::new(p).ok()));
let pgo_available = cgcx.opts.cg.profile_use.is_some();
let data = Box::into_raw(Box::new((cgcx, handler))); let data = Box::into_raw(Box::new((cgcx, handler)));
unsafe { unsafe {
let old_handler = llvm::LLVMRustContextGetDiagnosticHandler(llcx); let old_handler = llvm::LLVMRustContextGetDiagnosticHandler(llcx);
@ -333,6 +334,7 @@ impl<'a> DiagnosticHandlers<'a> {
// The `as_ref()` is important here, otherwise the `CString` will be dropped // The `as_ref()` is important here, otherwise the `CString` will be dropped
// too soon! // too soon!
remark_file.as_ref().map(|dir| dir.as_ptr()).unwrap_or(std::ptr::null()), remark_file.as_ref().map(|dir| dir.as_ptr()).unwrap_or(std::ptr::null()),
pgo_available,
); );
DiagnosticHandlers { data, llcx, old_handler } DiagnosticHandlers { data, llcx, old_handler }
} }

View file

@ -2332,6 +2332,7 @@ extern "C" {
remark_passes: *const *const c_char, remark_passes: *const *const c_char,
remark_passes_len: usize, remark_passes_len: usize,
remark_file: *const c_char, remark_file: *const c_char,
pgo_available: bool,
); );
#[allow(improper_ctypes)] #[allow(improper_ctypes)]

View file

@ -1869,7 +1869,8 @@ extern "C" void LLVMRustContextConfigureDiagnosticHandler(
LLVMContextRef C, LLVMDiagnosticHandlerTy DiagnosticHandlerCallback, LLVMContextRef C, LLVMDiagnosticHandlerTy DiagnosticHandlerCallback,
void *DiagnosticHandlerContext, bool RemarkAllPasses, void *DiagnosticHandlerContext, bool RemarkAllPasses,
const char * const * RemarkPasses, size_t RemarkPassesLen, const char * const * RemarkPasses, size_t RemarkPassesLen,
const char * RemarkFilePath const char * RemarkFilePath,
bool PGOAvailable
) { ) {
class RustDiagnosticHandler final : public DiagnosticHandler { class RustDiagnosticHandler final : public DiagnosticHandler {
@ -1967,8 +1968,10 @@ extern "C" void LLVMRustContextConfigureDiagnosticHandler(
std::unique_ptr<LLVMRemarkStreamer> LlvmRemarkStreamer; std::unique_ptr<LLVMRemarkStreamer> LlvmRemarkStreamer;
if (RemarkFilePath != nullptr) { if (RemarkFilePath != nullptr) {
if (PGOAvailable) {
// Enable PGO hotness data for remarks, if available // Enable PGO hotness data for remarks, if available
unwrap(C)->setDiagnosticsHotnessRequested(true); unwrap(C)->setDiagnosticsHotnessRequested(true);
}
std::error_code EC; std::error_code EC;
RemarkFile = std::make_unique<ToolOutputFile>( RemarkFile = std::make_unique<ToolOutputFile>(

View file

@ -1,4 +1,8 @@
# needs-profiler-support # needs-profiler-support
# ignore-windows-gnu
# FIXME(mati865): MinGW GCC miscompiles compiler-rt profiling library but with Clang it works
# properly. Since we only have GCC on the CI ignore the test for now.
include ../tools.mk include ../tools.mk