Skip to content

Commit 89b6b0b

Browse files
committed
coverage: Clarify that getting a PGO name also makes a function "used"
1 parent 24e2b48 commit 89b6b0b

File tree

1 file changed

+7
-4
lines changed
  • compiler/rustc_codegen_llvm/src/coverageinfo

1 file changed

+7
-4
lines changed

compiler/rustc_codegen_llvm/src/coverageinfo/mod.rs

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -90,7 +90,10 @@ impl<'ll, 'tcx> CodegenCx<'ll, 'tcx> {
9090
/// string, to hold the function name passed to LLVM intrinsic
9191
/// `instrprof.increment()`. The `Value` is only created once per instance.
9292
/// Multiple invocations with the same instance return the same `Value`.
93-
fn get_pgo_func_name_var(&self, instance: Instance<'tcx>) -> &'ll llvm::Value {
93+
///
94+
/// This has the side-effect of causing coverage codegen to consider this
95+
/// function "used", making it eligible to emit an associated covfun record.
96+
fn ensure_pgo_func_name_var(&self, instance: Instance<'tcx>) -> &'ll llvm::Value {
9497
debug!("getting pgo_func_name_var for instance={:?}", instance);
9598
let mut pgo_func_name_var_map = self.coverage_cx().pgo_func_name_var_map.borrow_mut();
9699
pgo_func_name_var_map.entry(instance).or_insert_with(|| {
@@ -114,7 +117,7 @@ impl<'tcx> CoverageInfoBuilderMethods<'tcx> for Builder<'_, '_, 'tcx> {
114117
return;
115118
}
116119

117-
let fn_name = self.get_pgo_func_name_var(instance);
120+
let fn_name = self.ensure_pgo_func_name_var(instance);
118121
let hash = self.const_u64(function_coverage_info.function_source_hash);
119122
let bitmap_bits = self.const_u32(function_coverage_info.mcdc_bitmap_bits as u32);
120123
self.mcdc_parameters(fn_name, hash, bitmap_bits);
@@ -170,7 +173,7 @@ impl<'tcx> CoverageInfoBuilderMethods<'tcx> for Builder<'_, '_, 'tcx> {
170173
CoverageKind::VirtualCounter { bcb }
171174
if let Some(&id) = ids_info.phys_counter_for_node.get(&bcb) =>
172175
{
173-
let fn_name = bx.get_pgo_func_name_var(instance);
176+
let fn_name = bx.ensure_pgo_func_name_var(instance);
174177
let hash = bx.const_u64(function_coverage_info.function_source_hash);
175178
let num_counters = bx.const_u32(ids_info.num_counters);
176179
let index = bx.const_u32(id.as_u32());
@@ -200,7 +203,7 @@ impl<'tcx> CoverageInfoBuilderMethods<'tcx> for Builder<'_, '_, 'tcx> {
200203
"bitmap index of the decision out of range"
201204
);
202205

203-
let fn_name = bx.get_pgo_func_name_var(instance);
206+
let fn_name = bx.ensure_pgo_func_name_var(instance);
204207
let hash = bx.const_u64(function_coverage_info.function_source_hash);
205208
let bitmap_index = bx.const_u32(bitmap_idx);
206209
bx.mcdc_tvbitmap_update(fn_name, hash, bitmap_index, cond_bitmap);

0 commit comments

Comments
 (0)