Skip to content

Commit fd9c04f

Browse files
committed
Move the dataflow framework to its own crate.
1 parent 81a600b commit fd9c04f

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

74 files changed

+259
-211
lines changed

Cargo.lock

+26-5
Original file line numberDiff line numberDiff line change
@@ -3614,6 +3614,7 @@ dependencies = [
36143614
"rustc_lexer",
36153615
"rustc_middle",
36163616
"rustc_mir",
3617+
"rustc_mir_dataflow",
36173618
"rustc_serialize",
36183619
"rustc_session",
36193620
"rustc_span",
@@ -4047,6 +4048,8 @@ version = "0.0.0"
40474048
dependencies = [
40484049
"bitflags",
40494050
"chalk-ir",
4051+
"either",
4052+
"gsgdt",
40504053
"polonius-engine",
40514054
"rustc-rayon-core",
40524055
"rustc_apfloat",
@@ -4056,6 +4059,7 @@ dependencies = [
40564059
"rustc_data_structures",
40574060
"rustc_errors",
40584061
"rustc_feature",
4062+
"rustc_graphviz",
40594063
"rustc_hir",
40604064
"rustc_index",
40614065
"rustc_macros",
@@ -4075,25 +4079,21 @@ version = "0.0.0"
40754079
dependencies = [
40764080
"either",
40774081
"gsgdt",
4078-
"polonius-engine",
4079-
"regex",
40804082
"rustc_apfloat",
40814083
"rustc_ast",
40824084
"rustc_attr",
40834085
"rustc_data_structures",
40844086
"rustc_errors",
4085-
"rustc_graphviz",
40864087
"rustc_hir",
40874088
"rustc_index",
40884089
"rustc_infer",
40894090
"rustc_macros",
40904091
"rustc_middle",
4091-
"rustc_serialize",
4092+
"rustc_mir_dataflow",
40924093
"rustc_session",
40934094
"rustc_span",
40944095
"rustc_target",
40954096
"rustc_trait_selection",
4096-
"smallvec",
40974097
"tracing",
40984098
]
40994099

@@ -4120,6 +4120,26 @@ dependencies = [
41204120
"tracing",
41214121
]
41224122

4123+
[[package]]
4124+
name = "rustc_mir_dataflow"
4125+
version = "0.0.0"
4126+
dependencies = [
4127+
"polonius-engine",
4128+
"regex",
4129+
"rustc_ast",
4130+
"rustc_data_structures",
4131+
"rustc_graphviz",
4132+
"rustc_hir",
4133+
"rustc_index",
4134+
"rustc_middle",
4135+
"rustc_serialize",
4136+
"rustc_session",
4137+
"rustc_span",
4138+
"rustc_target",
4139+
"smallvec",
4140+
"tracing",
4141+
]
4142+
41234143
[[package]]
41244144
name = "rustc_mir_transform"
41254145
version = "0.0.0"
@@ -4134,6 +4154,7 @@ dependencies = [
41344154
"rustc_index",
41354155
"rustc_middle",
41364156
"rustc_mir",
4157+
"rustc_mir_dataflow",
41374158
"rustc_serialize",
41384159
"rustc_session",
41394160
"rustc_span",

compiler/rustc_borrowck/Cargo.toml

+1
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ rustc_infer = { path = "../rustc_infer" }
2222
rustc_lexer = { path = "../rustc_lexer" }
2323
rustc_middle = { path = "../rustc_middle" }
2424
rustc_mir = { path = "../rustc_mir" }
25+
rustc_mir_dataflow = { path = "../rustc_mir_dataflow" }
2526
rustc_serialize = { path = "../rustc_serialize" }
2627
rustc_session = { path = "../rustc_session" }
2728
rustc_target = { path = "../rustc_target" }

compiler/rustc_borrowck/src/borrow_set.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ use rustc_middle::mir::traversal;
88
use rustc_middle::mir::visit::{MutatingUseContext, NonUseContext, PlaceContext, Visitor};
99
use rustc_middle::mir::{self, Body, Local, Location};
1010
use rustc_middle::ty::{RegionVid, TyCtxt};
11-
use rustc_mir::dataflow::move_paths::MoveData;
11+
use rustc_mir_dataflow::move_paths::MoveData;
1212
use std::fmt;
1313
use std::ops::Index;
1414

compiler/rustc_borrowck/src/dataflow.rs

+6-6
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,10 @@ use rustc_index::bit_set::BitSet;
33
use rustc_middle::mir::{self, BasicBlock, Body, Location, Place};
44
use rustc_middle::ty::RegionVid;
55
use rustc_middle::ty::TyCtxt;
6-
use rustc_mir::dataflow::impls::{EverInitializedPlaces, MaybeUninitializedPlaces};
7-
use rustc_mir::dataflow::ResultsVisitable;
8-
use rustc_mir::dataflow::{self, fmt::DebugWithContext, GenKill};
9-
use rustc_mir::dataflow::{Analysis, Direction, Results};
6+
use rustc_mir_dataflow::impls::{EverInitializedPlaces, MaybeUninitializedPlaces};
7+
use rustc_mir_dataflow::ResultsVisitable;
8+
use rustc_mir_dataflow::{self, fmt::DebugWithContext, GenKill};
9+
use rustc_mir_dataflow::{Analysis, Direction, Results};
1010
use std::fmt;
1111
use std::iter;
1212

@@ -323,7 +323,7 @@ impl<'a, 'tcx> Borrows<'a, 'tcx> {
323323
}
324324
}
325325

326-
impl<'tcx> dataflow::AnalysisDomain<'tcx> for Borrows<'_, 'tcx> {
326+
impl<'tcx> rustc_mir_dataflow::AnalysisDomain<'tcx> for Borrows<'_, 'tcx> {
327327
type Domain = BitSet<BorrowIndex>;
328328

329329
const NAME: &'static str = "borrows";
@@ -339,7 +339,7 @@ impl<'tcx> dataflow::AnalysisDomain<'tcx> for Borrows<'_, 'tcx> {
339339
}
340340
}
341341

342-
impl<'tcx> dataflow::GenKillAnalysis<'tcx> for Borrows<'_, 'tcx> {
342+
impl<'tcx> rustc_mir_dataflow::GenKillAnalysis<'tcx> for Borrows<'_, 'tcx> {
343343
type Idx = BorrowIndex;
344344

345345
fn before_statement_effect(

compiler/rustc_borrowck/src/diagnostics/conflict_errors.rs

+2-2
Original file line numberDiff line numberDiff line change
@@ -10,14 +10,14 @@ use rustc_middle::mir::{
1010
ProjectionElem, Rvalue, Statement, StatementKind, Terminator, TerminatorKind, VarBindingForm,
1111
};
1212
use rustc_middle::ty::{self, suggest_constraining_type_param, Ty};
13+
use rustc_mir_dataflow::drop_flag_effects;
14+
use rustc_mir_dataflow::move_paths::{MoveOutIndex, MovePathIndex};
1315
use rustc_span::source_map::DesugaringKind;
1416
use rustc_span::symbol::sym;
1517
use rustc_span::{BytePos, MultiSpan, Span, DUMMY_SP};
1618
use rustc_trait_selection::infer::InferCtxtExt;
1719

1820
use crate::borrowck_errors;
19-
use rustc_mir::dataflow::drop_flag_effects;
20-
use rustc_mir::dataflow::move_paths::{MoveOutIndex, MovePathIndex};
2121

2222
use crate::{
2323
borrow_set::BorrowData, diagnostics::Instance, prefixes::IsPrefixOf,

compiler/rustc_borrowck/src/diagnostics/mod.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ use rustc_middle::mir::{
1212
};
1313
use rustc_middle::ty::print::Print;
1414
use rustc_middle::ty::{self, DefIdTree, Instance, Ty, TyCtxt};
15-
use rustc_mir::dataflow::move_paths::{InitLocation, LookupResult};
15+
use rustc_mir_dataflow::move_paths::{InitLocation, LookupResult};
1616
use rustc_span::{
1717
hygiene::{DesugaringKind, ForLoopLoc},
1818
symbol::sym,

compiler/rustc_borrowck/src/diagnostics/move_errors.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ use rustc_errors::{Applicability, DiagnosticBuilder};
22
use rustc_infer::infer::TyCtxtInferExt;
33
use rustc_middle::mir::*;
44
use rustc_middle::ty;
5-
use rustc_mir::dataflow::move_paths::{
5+
use rustc_mir_dataflow::move_paths::{
66
IllegalMoveOrigin, IllegalMoveOriginKind, LookupResult, MoveError, MovePathIndex,
77
};
88
use rustc_span::source_map::DesugaringKind;

compiler/rustc_borrowck/src/facts.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ use polonius_engine::Atom;
55
use rustc_index::vec::Idx;
66
use rustc_middle::mir::Local;
77
use rustc_middle::ty::{RegionVid, TyCtxt};
8-
use rustc_mir::dataflow::move_paths::MovePathIndex;
8+
use rustc_mir_dataflow::move_paths::MovePathIndex;
99
use std::error::Error;
1010
use std::fmt::Debug;
1111
use std::fs::{self, File};

compiler/rustc_borrowck/src/lib.rs

+7-7
Original file line numberDiff line numberDiff line change
@@ -46,13 +46,13 @@ use std::iter;
4646
use std::mem;
4747
use std::rc::Rc;
4848

49-
use rustc_mir::dataflow::impls::{
49+
use rustc_mir_dataflow::impls::{
5050
EverInitializedPlaces, MaybeInitializedPlaces, MaybeUninitializedPlaces,
5151
};
52-
use rustc_mir::dataflow::move_paths::{InitIndex, MoveOutIndex, MovePathIndex};
53-
use rustc_mir::dataflow::move_paths::{InitLocation, LookupResult, MoveData, MoveError};
54-
use rustc_mir::dataflow::Analysis;
55-
use rustc_mir::dataflow::MoveDataParamEnv;
52+
use rustc_mir_dataflow::move_paths::{InitIndex, MoveOutIndex, MovePathIndex};
53+
use rustc_mir_dataflow::move_paths::{InitLocation, LookupResult, MoveData, MoveError};
54+
use rustc_mir_dataflow::Analysis;
55+
use rustc_mir_dataflow::MoveDataParamEnv;
5656

5757
use self::diagnostics::{AccessKind, RegionName};
5858
use self::location::LocationTable;
@@ -373,7 +373,7 @@ fn do_mir_borrowck<'a, 'tcx>(
373373

374374
mbcx.report_move_errors(move_errors);
375375

376-
rustc_mir::dataflow::visit_results(
376+
rustc_mir_dataflow::visit_results(
377377
&body,
378378
traversal::reverse_postorder(&body).map(|(bb, _)| bb),
379379
&results,
@@ -615,7 +615,7 @@ struct MirBorrowckCtxt<'cx, 'tcx> {
615615
// 2. loans made in overlapping scopes do not conflict
616616
// 3. assignments do not affect things loaned out as immutable
617617
// 4. moves do not affect things loaned out in any way
618-
impl<'cx, 'tcx> rustc_mir::dataflow::ResultsVisitor<'cx, 'tcx> for MirBorrowckCtxt<'cx, 'tcx> {
618+
impl<'cx, 'tcx> rustc_mir_dataflow::ResultsVisitor<'cx, 'tcx> for MirBorrowckCtxt<'cx, 'tcx> {
619619
type FlowState = Flows<'cx, 'tcx>;
620620

621621
fn visit_statement_before_primary_effect(

compiler/rustc_borrowck/src/nll.rs

+9-11
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ use rustc_data_structures::vec_map::VecMap;
44
use rustc_errors::Diagnostic;
55
use rustc_index::vec::IndexVec;
66
use rustc_infer::infer::InferCtxt;
7+
use rustc_middle::mir::{create_dump_file, dump_enabled, dump_mir, PassWhere};
78
use rustc_middle::mir::{
89
BasicBlock, Body, ClosureOutlivesSubject, ClosureRegionRequirements, LocalKind, Location,
910
Promoted,
@@ -17,14 +18,11 @@ use std::path::PathBuf;
1718
use std::rc::Rc;
1819
use std::str::FromStr;
1920

20-
use self::mir_util::PassWhere;
2121
use polonius_engine::{Algorithm, Output};
2222

23-
use rustc_mir::dataflow::impls::MaybeInitializedPlaces;
24-
use rustc_mir::dataflow::move_paths::{InitKind, InitLocation, MoveData};
25-
use rustc_mir::dataflow::ResultsCursor;
26-
use rustc_mir::util as mir_util;
27-
use rustc_mir::util::pretty;
23+
use rustc_mir_dataflow::impls::MaybeInitializedPlaces;
24+
use rustc_mir_dataflow::move_paths::{InitKind, InitLocation, MoveData};
25+
use rustc_mir_dataflow::ResultsCursor;
2826

2927
use crate::{
3028
borrow_set::BorrowSet,
@@ -72,7 +70,7 @@ pub(crate) fn replace_regions_in_mir<'cx, 'tcx>(
7270
// Replace all remaining regions with fresh inference variables.
7371
renumber::renumber_mir(infcx, body, promoted);
7472

75-
mir_util::dump_mir(infcx.tcx, None, "renumber", &0, body, |_, _| Ok(()));
73+
dump_mir(infcx.tcx, None, "renumber", &0, body, |_, _| Ok(()));
7674

7775
universal_regions
7876
}
@@ -322,11 +320,11 @@ pub(super) fn dump_mir_results<'a, 'tcx>(
322320
regioncx: &RegionInferenceContext<'tcx>,
323321
closure_region_requirements: &Option<ClosureRegionRequirements<'_>>,
324322
) {
325-
if !mir_util::dump_enabled(infcx.tcx, "nll", body.source.def_id()) {
323+
if !dump_enabled(infcx.tcx, "nll", body.source.def_id()) {
326324
return;
327325
}
328326

329-
mir_util::dump_mir(infcx.tcx, None, "nll", &0, body, |pass_where, out| {
327+
dump_mir(infcx.tcx, None, "nll", &0, body, |pass_where, out| {
330328
match pass_where {
331329
// Before the CFG, dump out the values for each region variable.
332330
PassWhere::BeforeCFG => {
@@ -354,14 +352,14 @@ pub(super) fn dump_mir_results<'a, 'tcx>(
354352
// Also dump the inference graph constraints as a graphviz file.
355353
let _: io::Result<()> = try {
356354
let mut file =
357-
pretty::create_dump_file(infcx.tcx, "regioncx.all.dot", None, "nll", &0, body.source)?;
355+
create_dump_file(infcx.tcx, "regioncx.all.dot", None, "nll", &0, body.source)?;
358356
regioncx.dump_graphviz_raw_constraints(&mut file)?;
359357
};
360358

361359
// Also dump the inference graph constraints as a graphviz file.
362360
let _: io::Result<()> = try {
363361
let mut file =
364-
pretty::create_dump_file(infcx.tcx, "regioncx.scc.dot", None, "nll", &0, body.source)?;
362+
create_dump_file(infcx.tcx, "regioncx.scc.dot", None, "nll", &0, body.source)?;
365363
regioncx.dump_graphviz_scc_constraints(&mut file)?;
366364
};
367365
}

compiler/rustc_borrowck/src/type_check/liveness/mod.rs

+3-3
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,9 @@ use rustc_middle::mir::{Body, Local};
33
use rustc_middle::ty::{RegionVid, TyCtxt};
44
use std::rc::Rc;
55

6-
use rustc_mir::dataflow::impls::MaybeInitializedPlaces;
7-
use rustc_mir::dataflow::move_paths::MoveData;
8-
use rustc_mir::dataflow::ResultsCursor;
6+
use rustc_mir_dataflow::impls::MaybeInitializedPlaces;
7+
use rustc_mir_dataflow::move_paths::MoveData;
8+
use rustc_mir_dataflow::ResultsCursor;
99

1010
use crate::{
1111
constraints::OutlivesConstraintSet,

compiler/rustc_borrowck/src/type_check/liveness/polonius.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ use crate::location::{LocationIndex, LocationTable};
33
use rustc_middle::mir::visit::{MutatingUseContext, PlaceContext, Visitor};
44
use rustc_middle::mir::{Body, Local, Location, Place};
55
use rustc_middle::ty::subst::GenericArg;
6-
use rustc_mir::dataflow::move_paths::{LookupResult, MoveData, MovePathIndex};
6+
use rustc_mir_dataflow::move_paths::{LookupResult, MoveData, MovePathIndex};
77

88
use super::TypeChecker;
99

compiler/rustc_borrowck/src/type_check/liveness/trace.rs

+3-3
Original file line numberDiff line numberDiff line change
@@ -8,9 +8,9 @@ use rustc_trait_selection::traits::query::type_op::outlives::DropckOutlives;
88
use rustc_trait_selection::traits::query::type_op::{TypeOp, TypeOpOutput};
99
use std::rc::Rc;
1010

11-
use rustc_mir::dataflow::impls::MaybeInitializedPlaces;
12-
use rustc_mir::dataflow::move_paths::{HasMoveData, MoveData, MovePathIndex};
13-
use rustc_mir::dataflow::ResultsCursor;
11+
use rustc_mir_dataflow::impls::MaybeInitializedPlaces;
12+
use rustc_mir_dataflow::move_paths::{HasMoveData, MoveData, MovePathIndex};
13+
use rustc_mir_dataflow::ResultsCursor;
1414

1515
use crate::{
1616
region_infer::values::{self, PointIndex, RegionValueElements},

compiler/rustc_borrowck/src/type_check/mod.rs

+3-3
Original file line numberDiff line numberDiff line change
@@ -41,12 +41,12 @@ use rustc_trait_selection::traits::query::type_op::custom::CustomTypeOp;
4141
use rustc_trait_selection::traits::query::Fallible;
4242
use rustc_trait_selection::traits::{self, ObligationCause, PredicateObligations};
4343

44-
use rustc_mir::dataflow::impls::MaybeInitializedPlaces;
45-
use rustc_mir::dataflow::move_paths::MoveData;
46-
use rustc_mir::dataflow::ResultsCursor;
4744
use rustc_mir::transform::{
4845
check_consts::ConstCx, promote_consts::is_const_fn_in_array_repeat_expression,
4946
};
47+
use rustc_mir_dataflow::impls::MaybeInitializedPlaces;
48+
use rustc_mir_dataflow::move_paths::MoveData;
49+
use rustc_mir_dataflow::ResultsCursor;
5050

5151
use crate::{
5252
borrow_set::BorrowSet,

compiler/rustc_codegen_cranelift/src/base.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ pub(crate) fn codegen_fn<'tcx>(
2323
let mir = tcx.instance_mir(instance.def);
2424
let _mir_guard = crate::PrintOnPanic(|| {
2525
let mut buf = Vec::new();
26-
rustc_mir::util::write_mir_pretty(tcx, Some(instance.def_id()), &mut buf).unwrap();
26+
rustc_middle::mir::write_mir_pretty(tcx, Some(instance.def_id()), &mut buf).unwrap();
2727
String::from_utf8_lossy(&buf).into_owned()
2828
});
2929

compiler/rustc_codegen_cranelift/src/lib.rs

-1
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,6 @@ extern crate rustc_incremental;
1616
extern crate rustc_index;
1717
extern crate rustc_interface;
1818
extern crate rustc_metadata;
19-
extern crate rustc_mir;
2019
extern crate rustc_session;
2120
extern crate rustc_span;
2221
extern crate rustc_target;

compiler/rustc_driver/src/pretty.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,8 @@ use rustc_errors::ErrorReported;
66
use rustc_hir as hir;
77
use rustc_hir_pretty as pprust_hir;
88
use rustc_middle::hir::map as hir_map;
9+
use rustc_middle::mir::{write_mir_graphviz, write_mir_pretty};
910
use rustc_middle::ty::{self, TyCtxt};
10-
use rustc_mir::util::{write_mir_graphviz, write_mir_pretty};
1111
use rustc_session::config::{Input, PpAstTreeMode, PpHirMode, PpMode, PpSourceMode};
1212
use rustc_session::Session;
1313
use rustc_span::symbol::Ident;

compiler/rustc_middle/Cargo.toml

+3
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,8 @@ doctest = false
99
[dependencies]
1010
rustc_arena = { path = "../rustc_arena" }
1111
bitflags = "1.2.1"
12+
either = "1.5.0"
13+
gsgdt = "0.1.2"
1214
tracing = "0.1"
1315
rustc-rayon-core = "0.3.1"
1416
polonius-engine = "0.13.0"
@@ -21,6 +23,7 @@ rustc_macros = { path = "../rustc_macros" }
2123
rustc_data_structures = { path = "../rustc_data_structures" }
2224
rustc_query_system = { path = "../rustc_query_system" }
2325
rustc_errors = { path = "../rustc_errors" }
26+
rustc_graphviz = { path = "../rustc_graphviz" }
2427
rustc_index = { path = "../rustc_index" }
2528
rustc_serialize = { path = "../rustc_serialize" }
2629
rustc_ast = { path = "../rustc_ast" }

compiler/rustc_middle/src/lib.rs

+2
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,8 @@
5151
#![feature(associated_type_defaults)]
5252
#![feature(iter_zip)]
5353
#![feature(thread_local_const_init)]
54+
#![feature(trusted_step)]
55+
#![feature(try_blocks)]
5456
#![feature(try_reserve)]
5557
#![feature(try_reserve_kind)]
5658
#![feature(nonzero_ops)]

0 commit comments

Comments
 (0)