coverage: Push down the call to get_expressions_and_counter_regions

These expressions and counter regions are only needed by the function that
encodes a function's coverage mappings payload.
This commit is contained in:
Zalathar 2023-09-04 11:40:13 +10:00
parent 99da8a83c2
commit 1f56fa9657

View file

@ -1,6 +1,7 @@
use crate::common::CodegenCx; use crate::common::CodegenCx;
use crate::coverageinfo; use crate::coverageinfo;
use crate::coverageinfo::ffi::{Counter, CounterExpression, CounterMappingRegion}; use crate::coverageinfo::ffi::CounterMappingRegion;
use crate::coverageinfo::map_data::FunctionCoverage;
use crate::llvm; use crate::llvm;
use rustc_codegen_ssa::traits::ConstMethods; use rustc_codegen_ssa::traits::ConstMethods;
@ -63,11 +64,9 @@ pub fn finalize(cx: &CodegenCx<'_, '_>) {
let mangled_function_name = tcx.symbol_name(instance).name; let mangled_function_name = tcx.symbol_name(instance).name;
let source_hash = function_coverage.source_hash(); let source_hash = function_coverage.source_hash();
let is_used = function_coverage.is_used(); let is_used = function_coverage.is_used();
let (expressions, counter_regions) =
function_coverage.get_expressions_and_counter_regions();
let coverage_mapping_buffer = let coverage_mapping_buffer =
encode_mappings_for_function(&mut global_file_table, expressions, counter_regions); encode_mappings_for_function(&mut global_file_table, &function_coverage);
if coverage_mapping_buffer.is_empty() { if coverage_mapping_buffer.is_empty() {
if function_coverage.is_used() { if function_coverage.is_used() {
@ -153,11 +152,12 @@ impl GlobalFileTable {
/// entry. The payload is returned as a vector of bytes. /// entry. The payload is returned as a vector of bytes.
/// ///
/// Newly-encountered filenames will be added to the global file table. /// Newly-encountered filenames will be added to the global file table.
fn encode_mappings_for_function<'a>( fn encode_mappings_for_function(
global_file_table: &mut GlobalFileTable, global_file_table: &mut GlobalFileTable,
expressions: Vec<CounterExpression>, function_coverage: &FunctionCoverage<'_>,
counter_regions: impl Iterator<Item = (Counter, &'a CodeRegion)>,
) -> Vec<u8> { ) -> Vec<u8> {
let (expressions, counter_regions) = function_coverage.get_expressions_and_counter_regions();
let mut counter_regions = counter_regions.collect::<Vec<_>>(); let mut counter_regions = counter_regions.collect::<Vec<_>>();
if counter_regions.is_empty() { if counter_regions.is_empty() {
return Vec::new(); return Vec::new();