coverage: Move CoverageIdsInfo
into mir::coverage
This commit is contained in:
parent
728f2daab4
commit
f3f7c20f7b
5 changed files with 34 additions and 35 deletions
|
@ -1,10 +1,9 @@
|
|||
use rustc_data_structures::captures::Captures;
|
||||
use rustc_data_structures::fx::FxIndexSet;
|
||||
use rustc_index::bit_set::BitSet;
|
||||
use rustc_middle::mir::CoverageIdsInfo;
|
||||
use rustc_middle::mir::coverage::{
|
||||
CounterId, CovTerm, Expression, ExpressionId, FunctionCoverageInfo, Mapping, MappingKind, Op,
|
||||
SourceRegion,
|
||||
CounterId, CovTerm, CoverageIdsInfo, Expression, ExpressionId, FunctionCoverageInfo, Mapping,
|
||||
MappingKind, Op, SourceRegion,
|
||||
};
|
||||
use rustc_middle::ty::Instance;
|
||||
use tracing::debug;
|
||||
|
|
|
@ -3,6 +3,7 @@
|
|||
use std::fmt::{self, Debug, Formatter};
|
||||
|
||||
use rustc_index::IndexVec;
|
||||
use rustc_index::bit_set::BitSet;
|
||||
use rustc_macros::{HashStable, TyDecodable, TyEncodable, TypeFoldable, TypeVisitable};
|
||||
use rustc_span::Span;
|
||||
|
||||
|
@ -310,3 +311,30 @@ pub struct MCDCDecisionSpan {
|
|||
pub decision_depth: u16,
|
||||
pub num_conditions: usize,
|
||||
}
|
||||
|
||||
/// Summarizes coverage IDs inserted by the `InstrumentCoverage` MIR pass
|
||||
/// (for compiler option `-Cinstrument-coverage`), after MIR optimizations
|
||||
/// have had a chance to potentially remove some of them.
|
||||
///
|
||||
/// Used by the `coverage_ids_info` query.
|
||||
#[derive(Clone, TyEncodable, TyDecodable, Debug, HashStable)]
|
||||
pub struct CoverageIdsInfo {
|
||||
pub counters_seen: BitSet<CounterId>,
|
||||
pub expressions_seen: BitSet<ExpressionId>,
|
||||
}
|
||||
|
||||
impl CoverageIdsInfo {
|
||||
/// Coverage codegen needs to know how many coverage counters are ever
|
||||
/// incremented within a function, so that it can set the `num-counters`
|
||||
/// argument of the `llvm.instrprof.increment` intrinsic.
|
||||
///
|
||||
/// This may be less than the highest counter ID emitted by the
|
||||
/// InstrumentCoverage MIR pass, if the highest-numbered counter increments
|
||||
/// were removed by MIR optimizations.
|
||||
pub fn num_counters_after_mir_opts(&self) -> u32 {
|
||||
// FIXME(Zalathar): Currently this treats an unused counter as "used"
|
||||
// if its ID is less than that of the highest counter that really is
|
||||
// used. Fixing this would require adding a renumbering step somewhere.
|
||||
self.counters_seen.last_set_in(..).map_or(0, |max| max.as_u32() + 1)
|
||||
}
|
||||
}
|
||||
|
|
|
@ -8,7 +8,7 @@ use rustc_abi::{FieldIdx, VariantIdx};
|
|||
use rustc_data_structures::fx::FxIndexMap;
|
||||
use rustc_errors::ErrorGuaranteed;
|
||||
use rustc_hir::def_id::LocalDefId;
|
||||
use rustc_index::bit_set::{BitMatrix, BitSet};
|
||||
use rustc_index::bit_set::BitMatrix;
|
||||
use rustc_index::{Idx, IndexVec};
|
||||
use rustc_macros::{HashStable, TyDecodable, TyEncodable, TypeFoldable, TypeVisitable};
|
||||
use rustc_span::Span;
|
||||
|
@ -16,7 +16,6 @@ use rustc_span::symbol::Symbol;
|
|||
use smallvec::SmallVec;
|
||||
|
||||
use super::{ConstValue, SourceInfo};
|
||||
use crate::mir;
|
||||
use crate::ty::fold::fold_regions;
|
||||
use crate::ty::{self, CoroutineArgsExt, OpaqueHiddenType, Ty, TyCtxt};
|
||||
|
||||
|
@ -351,30 +350,3 @@ pub struct DestructuredConstant<'tcx> {
|
|||
pub variant: Option<VariantIdx>,
|
||||
pub fields: &'tcx [(ConstValue<'tcx>, Ty<'tcx>)],
|
||||
}
|
||||
|
||||
/// Summarizes coverage IDs inserted by the `InstrumentCoverage` MIR pass
|
||||
/// (for compiler option `-Cinstrument-coverage`), after MIR optimizations
|
||||
/// have had a chance to potentially remove some of them.
|
||||
///
|
||||
/// Used by the `coverage_ids_info` query.
|
||||
#[derive(Clone, TyEncodable, TyDecodable, Debug, HashStable)]
|
||||
pub struct CoverageIdsInfo {
|
||||
pub counters_seen: BitSet<mir::coverage::CounterId>,
|
||||
pub expressions_seen: BitSet<mir::coverage::ExpressionId>,
|
||||
}
|
||||
|
||||
impl CoverageIdsInfo {
|
||||
/// Coverage codegen needs to know how many coverage counters are ever
|
||||
/// incremented within a function, so that it can set the `num-counters`
|
||||
/// argument of the `llvm.instrprof.increment` intrinsic.
|
||||
///
|
||||
/// This may be less than the highest counter ID emitted by the
|
||||
/// InstrumentCoverage MIR pass, if the highest-numbered counter increments
|
||||
/// were removed by MIR optimizations.
|
||||
pub fn num_counters_after_mir_opts(&self) -> u32 {
|
||||
// FIXME(Zalathar): Currently this treats an unused counter as "used"
|
||||
// if its ID is less than that of the highest counter that really is
|
||||
// used. Fixing this would require adding a renumbering step somewhere.
|
||||
self.counters_seen.last_set_in(..).map_or(0, |max| max.as_u32() + 1)
|
||||
}
|
||||
}
|
||||
|
|
|
@ -581,7 +581,7 @@ rustc_queries! {
|
|||
/// Summarizes coverage IDs inserted by the `InstrumentCoverage` MIR pass
|
||||
/// (for compiler option `-Cinstrument-coverage`), after MIR optimizations
|
||||
/// have had a chance to potentially remove some of them.
|
||||
query coverage_ids_info(key: ty::InstanceKind<'tcx>) -> &'tcx mir::CoverageIdsInfo {
|
||||
query coverage_ids_info(key: ty::InstanceKind<'tcx>) -> &'tcx mir::coverage::CoverageIdsInfo {
|
||||
desc { |tcx| "retrieving coverage IDs info from MIR for `{}`", tcx.def_path_str(key.def_id()) }
|
||||
arena_cache
|
||||
}
|
||||
|
|
|
@ -1,8 +1,8 @@
|
|||
use rustc_data_structures::captures::Captures;
|
||||
use rustc_index::bit_set::BitSet;
|
||||
use rustc_middle::middle::codegen_fn_attrs::CodegenFnAttrFlags;
|
||||
use rustc_middle::mir::coverage::{CovTerm, CoverageKind, MappingKind};
|
||||
use rustc_middle::mir::{Body, CoverageIdsInfo, Statement, StatementKind};
|
||||
use rustc_middle::mir::coverage::{CovTerm, CoverageIdsInfo, CoverageKind, MappingKind};
|
||||
use rustc_middle::mir::{Body, Statement, StatementKind};
|
||||
use rustc_middle::query::TyCtxtAt;
|
||||
use rustc_middle::ty::{self, TyCtxt};
|
||||
use rustc_middle::util::Providers;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue