Add support for generating unique *.profraw files by default when using the -C instrument-coverage
flag.
Respond to PR comments.
This commit is contained in:
parent
20ffea6938
commit
100882296e
4 changed files with 34 additions and 2 deletions
|
@ -423,6 +423,14 @@ fn get_pgo_sample_use_path(config: &ModuleConfig) -> Option<CString> {
|
||||||
.map(|path_buf| CString::new(path_buf.to_string_lossy().as_bytes()).unwrap())
|
.map(|path_buf| CString::new(path_buf.to_string_lossy().as_bytes()).unwrap())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn get_instr_profile_output_path(config: &ModuleConfig) -> Option<CString> {
|
||||||
|
if config.instrument_coverage {
|
||||||
|
Some(CString::new(format!("{}", PathBuf::from("default_%m_%p.profraw").display())).unwrap())
|
||||||
|
} else {
|
||||||
|
None
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
pub(crate) unsafe fn optimize_with_new_llvm_pass_manager(
|
pub(crate) unsafe fn optimize_with_new_llvm_pass_manager(
|
||||||
cgcx: &CodegenContext<LlvmCodegenBackend>,
|
cgcx: &CodegenContext<LlvmCodegenBackend>,
|
||||||
diag_handler: &Handler,
|
diag_handler: &Handler,
|
||||||
|
@ -438,6 +446,7 @@ pub(crate) unsafe fn optimize_with_new_llvm_pass_manager(
|
||||||
let pgo_use_path = get_pgo_use_path(config);
|
let pgo_use_path = get_pgo_use_path(config);
|
||||||
let pgo_sample_use_path = get_pgo_sample_use_path(config);
|
let pgo_sample_use_path = get_pgo_sample_use_path(config);
|
||||||
let is_lto = opt_stage == llvm::OptStage::ThinLTO || opt_stage == llvm::OptStage::FatLTO;
|
let is_lto = opt_stage == llvm::OptStage::ThinLTO || opt_stage == llvm::OptStage::FatLTO;
|
||||||
|
let instr_profile_output_path = get_instr_profile_output_path(config);
|
||||||
// Sanitizer instrumentation is only inserted during the pre-link optimization stage.
|
// Sanitizer instrumentation is only inserted during the pre-link optimization stage.
|
||||||
let sanitizer_options = if !is_lto {
|
let sanitizer_options = if !is_lto {
|
||||||
Some(llvm::SanitizerOptions {
|
Some(llvm::SanitizerOptions {
|
||||||
|
@ -488,6 +497,7 @@ pub(crate) unsafe fn optimize_with_new_llvm_pass_manager(
|
||||||
pgo_gen_path.as_ref().map_or(std::ptr::null(), |s| s.as_ptr()),
|
pgo_gen_path.as_ref().map_or(std::ptr::null(), |s| s.as_ptr()),
|
||||||
pgo_use_path.as_ref().map_or(std::ptr::null(), |s| s.as_ptr()),
|
pgo_use_path.as_ref().map_or(std::ptr::null(), |s| s.as_ptr()),
|
||||||
config.instrument_coverage,
|
config.instrument_coverage,
|
||||||
|
instr_profile_output_path.as_ref().map_or(std::ptr::null(), |s| s.as_ptr()),
|
||||||
config.instrument_gcov,
|
config.instrument_gcov,
|
||||||
pgo_sample_use_path.as_ref().map_or(std::ptr::null(), |s| s.as_ptr()),
|
pgo_sample_use_path.as_ref().map_or(std::ptr::null(), |s| s.as_ptr()),
|
||||||
config.debug_info_for_profiling,
|
config.debug_info_for_profiling,
|
||||||
|
|
|
@ -2347,6 +2347,7 @@ extern "C" {
|
||||||
PGOGenPath: *const c_char,
|
PGOGenPath: *const c_char,
|
||||||
PGOUsePath: *const c_char,
|
PGOUsePath: *const c_char,
|
||||||
InstrumentCoverage: bool,
|
InstrumentCoverage: bool,
|
||||||
|
InstrProfileOutput: *const c_char,
|
||||||
InstrumentGCOV: bool,
|
InstrumentGCOV: bool,
|
||||||
PGOSampleUsePath: *const c_char,
|
PGOSampleUsePath: *const c_char,
|
||||||
DebugInfoForProfiling: bool,
|
DebugInfoForProfiling: bool,
|
||||||
|
|
|
@ -822,7 +822,8 @@ LLVMRustOptimizeWithNewPassManager(
|
||||||
bool DisableSimplifyLibCalls, bool EmitLifetimeMarkers,
|
bool DisableSimplifyLibCalls, bool EmitLifetimeMarkers,
|
||||||
LLVMRustSanitizerOptions *SanitizerOptions,
|
LLVMRustSanitizerOptions *SanitizerOptions,
|
||||||
const char *PGOGenPath, const char *PGOUsePath,
|
const char *PGOGenPath, const char *PGOUsePath,
|
||||||
bool InstrumentCoverage, bool InstrumentGCOV,
|
bool InstrumentCoverage, const char *InstrProfileOutput,
|
||||||
|
bool InstrumentGCOV,
|
||||||
const char *PGOSampleUsePath, bool DebugInfoForProfiling,
|
const char *PGOSampleUsePath, bool DebugInfoForProfiling,
|
||||||
void* LlvmSelfProfiler,
|
void* LlvmSelfProfiler,
|
||||||
LLVMRustSelfProfileBeforePassCallback BeforePassCallback,
|
LLVMRustSelfProfileBeforePassCallback BeforePassCallback,
|
||||||
|
@ -922,8 +923,11 @@ LLVMRustOptimizeWithNewPassManager(
|
||||||
|
|
||||||
if (InstrumentCoverage) {
|
if (InstrumentCoverage) {
|
||||||
PipelineStartEPCallbacks.push_back(
|
PipelineStartEPCallbacks.push_back(
|
||||||
[](ModulePassManager &MPM, OptimizationLevel Level) {
|
[InstrProfileOutput](ModulePassManager &MPM, OptimizationLevel Level) {
|
||||||
InstrProfOptions Options;
|
InstrProfOptions Options;
|
||||||
|
if (InstrProfileOutput) {
|
||||||
|
Options.InstrProfileOutput = InstrProfileOutput;
|
||||||
|
}
|
||||||
MPM.addPass(InstrProfiling(Options, false));
|
MPM.addPass(InstrProfiling(Options, false));
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
|
17
src/test/codegen/instrument-coverage.rs
Normal file
17
src/test/codegen/instrument-coverage.rs
Normal file
|
@ -0,0 +1,17 @@
|
||||||
|
// Test that `-Cinstrument-coverage` creates expected __llvm_profile_filename symbol in LLVM IR.
|
||||||
|
|
||||||
|
// needs-profiler-support
|
||||||
|
// compile-flags: -Cinstrument-coverage
|
||||||
|
|
||||||
|
// CHECK: @__llvm_profile_filename = {{.*}}"default_%m_%p.profraw\00"{{.*}}
|
||||||
|
|
||||||
|
#![crate_type="lib"]
|
||||||
|
|
||||||
|
#[inline(never)]
|
||||||
|
fn some_function() {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn some_other_function() {
|
||||||
|
some_function();
|
||||||
|
}
|
Loading…
Add table
Add a link
Reference in a new issue