pub(crate) struct LivenessValues {
elements: Rc<DenseLocationMap>,
live_regions: Option<FxHashSet<RegionVid>>,
points: Option<SparseIntervalMatrix<RegionVid, PointIndex>>,
pub(crate) loans: Option<LiveLoans>,
}
Expand description
Records the CFG locations where each region is live. When we initially compute liveness, we use an interval matrix storing liveness ranges for each region-vid.
Fields§
§elements: Rc<DenseLocationMap>
The map from locations to points.
live_regions: Option<FxHashSet<RegionVid>>
Which regions are live. This is exclusive with the fine-grained tracking in points
, and
currently only used for validating promoteds (which don’t care about more precise tracking).
points: Option<SparseIntervalMatrix<RegionVid, PointIndex>>
For each region: the points where it is live.
This is not initialized for promoteds, because we don’t care where within a promoted a region is live, only that it is.
loans: Option<LiveLoans>
When using -Zpolonius=next
, for each point: the loans flowing into the live regions at
that point.
Implementations§
Source§impl LivenessValues
impl LivenessValues
Sourcepub(crate) fn with_specific_points(elements: Rc<DenseLocationMap>) -> Self
pub(crate) fn with_specific_points(elements: Rc<DenseLocationMap>) -> Self
Create an empty map of regions to locations where they’re live.
Sourcepub(crate) fn without_specific_points(elements: Rc<DenseLocationMap>) -> Self
pub(crate) fn without_specific_points(elements: Rc<DenseLocationMap>) -> Self
Create an empty map of regions to locations where they’re live.
Unlike with_specific_points
, does not track exact locations where something is live, only
which regions are live.
Sourcepub(crate) fn regions(&self) -> impl Iterator<Item = RegionVid> + '_
pub(crate) fn regions(&self) -> impl Iterator<Item = RegionVid> + '_
Iterate through each region that has a value in this set.
Sourcepub(crate) fn live_regions_unordered(
&self,
) -> impl Iterator<Item = RegionVid> + '_
pub(crate) fn live_regions_unordered( &self, ) -> impl Iterator<Item = RegionVid> + '_
Iterate through each region that has a value in this set.
Sourcepub(crate) fn add_location(&mut self, region: RegionVid, location: Location)
pub(crate) fn add_location(&mut self, region: RegionVid, location: Location)
Records region
as being live at the given location
.
Sourcepub(crate) fn add_points(
&mut self,
region: RegionVid,
points: &IntervalSet<PointIndex>,
)
pub(crate) fn add_points( &mut self, region: RegionVid, points: &IntervalSet<PointIndex>, )
Records region
as being live at all the given points
.
Sourcepub(crate) fn add_all_points(&mut self, region: RegionVid)
pub(crate) fn add_all_points(&mut self, region: RegionVid)
Records region
as being live at all the control-flow points.
Sourcepub(crate) fn is_live_at(&self, region: RegionVid, location: Location) -> bool
pub(crate) fn is_live_at(&self, region: RegionVid, location: Location) -> bool
Returns whether region
is marked live at the given location
.
Sourcefn live_points(
&self,
region: RegionVid,
) -> impl Iterator<Item = PointIndex> + '_
fn live_points( &self, region: RegionVid, ) -> impl Iterator<Item = PointIndex> + '_
Returns an iterator of all the points where region
is live.
Sourcepub(crate) fn pretty_print_live_points(&self, region: RegionVid) -> String
pub(crate) fn pretty_print_live_points(&self, region: RegionVid) -> String
For debugging purposes, returns a pretty-printed string of the points where the region
is
live.
pub(crate) fn point_from_location(&self, location: Location) -> PointIndex
Sourcepub(crate) fn is_loan_live_at(
&self,
loan_idx: BorrowIndex,
point: PointIndex,
) -> bool
pub(crate) fn is_loan_live_at( &self, loan_idx: BorrowIndex, point: PointIndex, ) -> bool
When using -Zpolonius=next
, returns whether the loan_idx
is live at the given point
.
Auto Trait Implementations§
impl !DynSend for LivenessValues
impl !DynSync for LivenessValues
impl Freeze for LivenessValues
impl RefUnwindSafe for LivenessValues
impl !Send for LivenessValues
impl !Sync for LivenessValues
impl Unpin for LivenessValues
impl UnwindSafe for LivenessValues
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T, R> CollectAndApply<T, R> for T
impl<T, R> CollectAndApply<T, R> for T
Source§impl<T> Filterable for T
impl<T> Filterable for T
Source§fn filterable(
self,
filter_name: &'static str,
) -> RequestFilterDataProvider<T, fn(_: DataRequest<'_>) -> bool>
fn filterable( self, filter_name: &'static str, ) -> RequestFilterDataProvider<T, fn(_: DataRequest<'_>) -> bool>
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
Source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self
into a Left
variant of Either<Self, Self>
if into_left
is true
.
Converts self
into a Right
variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self
into a Left
variant of Either<Self, Self>
if into_left(&self)
returns true
.
Converts self
into a Right
variant of Either<Self, Self>
otherwise. Read moreSource§impl<P> IntoQueryParam<P> for P
impl<P> IntoQueryParam<P> for P
fn into_query_param(self) -> P
Source§impl<T> MaybeResult<T> for T
impl<T> MaybeResult<T> for T
Source§impl<T> Pointable for T
impl<T> Pointable for T
Source§impl<I, T, U> Upcast<I, U> for Twhere
U: UpcastFrom<I, T>,
impl<I, T, U> Upcast<I, U> for Twhere
U: UpcastFrom<I, T>,
Source§impl<I, T> UpcastFrom<I, T> for T
impl<I, T> UpcastFrom<I, T> for T
fn upcast_from(from: T, _tcx: I) -> T
Source§impl<Tcx, T> Value<Tcx> for Twhere
Tcx: DepContext,
impl<Tcx, T> Value<Tcx> for Twhere
Tcx: DepContext,
default fn from_cycle_error( tcx: Tcx, cycle_error: &CycleError, _guar: ErrorGuaranteed, ) -> T
Source§impl<T> WithSubscriber for T
impl<T> WithSubscriber for T
Source§fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
Source§fn with_current_subscriber(self) -> WithDispatch<Self>
fn with_current_subscriber(self) -> WithDispatch<Self>
impl<'a, T> Captures<'a> for Twhere
T: ?Sized,
impl<T> ErasedDestructor for Twhere
T: 'static,
Layout§
Note: Most layout information is completely unstable and may even differ between compilations. The only exception is types with certain repr(...)
attributes. Please see the Rust Reference's “Type Layout” chapter for details on type layout guarantees.
Size: 136 bytes