move LivenessResults from nll into liveness analysis
This commit is contained in:
parent
1c57468840
commit
ebd086b67f
2 changed files with 35 additions and 23 deletions
|
|
@ -16,7 +16,7 @@ use rustc::util::nodemap::FxHashMap;
|
|||
use std::collections::BTreeSet;
|
||||
use std::io;
|
||||
use transform::MirSource;
|
||||
use util::liveness::{self, LivenessMode, LivenessResult, LocalSet};
|
||||
use util::liveness::{LivenessResults, LocalSet};
|
||||
use borrow_check::FlowAtLocation;
|
||||
use dataflow::MaybeInitializedLvals;
|
||||
use dataflow::move_paths::MoveData;
|
||||
|
|
@ -86,23 +86,7 @@ pub(in borrow_check) fn compute_regions<'cx, 'gcx, 'tcx>(
|
|||
subtype_constraint_generation::generate(&mut regioncx, mir, constraint_sets);
|
||||
|
||||
// Compute what is live where.
|
||||
let liveness = &LivenessResults {
|
||||
regular: liveness::liveness_of_locals(
|
||||
&mir,
|
||||
LivenessMode {
|
||||
include_regular_use: true,
|
||||
include_drops: false,
|
||||
},
|
||||
),
|
||||
|
||||
drop: liveness::liveness_of_locals(
|
||||
&mir,
|
||||
LivenessMode {
|
||||
include_regular_use: false,
|
||||
include_drops: true,
|
||||
},
|
||||
),
|
||||
};
|
||||
let liveness = &LivenessResults::compute(mir);
|
||||
|
||||
// Generate non-subtyping constraints.
|
||||
constraint_generation::generate_constraints(
|
||||
|
|
@ -136,11 +120,6 @@ pub(in borrow_check) fn compute_regions<'cx, 'gcx, 'tcx>(
|
|||
(regioncx, closure_region_requirements)
|
||||
}
|
||||
|
||||
struct LivenessResults {
|
||||
regular: LivenessResult,
|
||||
drop: LivenessResult,
|
||||
}
|
||||
|
||||
fn dump_mir_results<'a, 'gcx, 'tcx>(
|
||||
infcx: &InferCtxt<'a, 'gcx, 'tcx>,
|
||||
liveness: &LivenessResults,
|
||||
|
|
|
|||
|
|
@ -80,6 +80,39 @@ pub struct LivenessMode {
|
|||
pub include_drops: bool,
|
||||
}
|
||||
|
||||
/// A combination of liveness results, used in NLL.
|
||||
pub struct LivenessResults {
|
||||
/// Liveness results where a regular use makes a variable X live,
|
||||
/// but not a drop.
|
||||
pub regular: LivenessResult,
|
||||
|
||||
/// Liveness results where a drop makes a variable X live,
|
||||
/// but not a regular use.
|
||||
pub drop: LivenessResult,
|
||||
}
|
||||
|
||||
impl LivenessResults {
|
||||
pub fn compute<'tcx>(mir: &Mir<'tcx>) -> LivenessResults {
|
||||
LivenessResults {
|
||||
regular: liveness_of_locals(
|
||||
&mir,
|
||||
LivenessMode {
|
||||
include_regular_use: true,
|
||||
include_drops: false,
|
||||
},
|
||||
),
|
||||
|
||||
drop: liveness_of_locals(
|
||||
&mir,
|
||||
LivenessMode {
|
||||
include_regular_use: false,
|
||||
include_drops: true,
|
||||
},
|
||||
),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// Compute which local variables are live within the given function
|
||||
/// `mir`. The liveness mode `mode` determines what sorts of uses are
|
||||
/// considered to make a variable live (e.g., do drops count?).
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue