Skip to content

Commit bd4ddf3

Browse files
committed
Address comments
1 parent 363ac0f commit bd4ddf3

File tree

5 files changed

+25
-70
lines changed

5 files changed

+25
-70
lines changed

src/librustc/mir/transform.rs

Lines changed: 11 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -8,46 +8,27 @@
88
// option. This file may not be copied, modified, or distributed
99
// except according to those terms.
1010

11-
use mir::repr::{Mir, BasicBlockData, BasicBlock};
11+
use mir::repr::Mir;
1212
use mir::mir_map::MirMap;
1313
use middle::ty::ctxt;
1414

1515
/// Contains various metadata about the pass.
1616
pub trait Pass {
17-
/// Ordering of the pass. Lower value runs the pass earlier.
18-
fn priority(&self) -> usize;
1917
// Possibly also `fn name()` and `fn should_run(Session)` etc.
2018
}
2119

2220
/// Pass which inspects the whole MirMap.
23-
pub trait MirMapPass: Pass {
24-
fn run_pass<'tcx>(&mut self, tcx: &ctxt<'tcx>, map: &mut MirMap<'tcx>);
21+
pub trait MirMapPass<'tcx>: Pass {
22+
fn run_pass(&mut self, tcx: &ctxt<'tcx>, map: &mut MirMap<'tcx>);
2523
}
2624

2725
/// Pass which only inspects MIR of distinct functions.
28-
pub trait MirPass: Pass {
29-
fn run_pass<'tcx>(&mut self, tcx: &ctxt<'tcx>, mir: &mut Mir<'tcx>);
26+
pub trait MirPass<'tcx>: Pass {
27+
fn run_pass(&mut self, tcx: &ctxt<'tcx>, mir: &mut Mir<'tcx>);
3028
}
3129

32-
/// Pass which only inspects basic blocks in MIR.
33-
///
34-
/// Invariant: The blocks are considered to be fully self-contained for the purposes of this pass –
35-
/// the pass may not change the list of successors of the block or apply any transformations to
36-
/// blocks based on the information collected during earlier runs of the pass.
37-
pub trait MirBlockPass: Pass {
38-
fn run_pass<'tcx>(&mut self, tcx: &ctxt<'tcx>, bb: BasicBlock, data: &mut BasicBlockData<'tcx>);
39-
}
40-
41-
impl<T: MirBlockPass> MirPass for T {
42-
fn run_pass<'tcx>(&mut self, tcx: &ctxt<'tcx>, mir: &mut Mir<'tcx>) {
43-
for (i, basic_block) in mir.basic_blocks.iter_mut().enumerate() {
44-
MirBlockPass::run_pass(self, tcx, BasicBlock::new(i), basic_block);
45-
}
46-
}
47-
}
48-
49-
impl<T: MirPass> MirMapPass for T {
50-
fn run_pass<'tcx>(&mut self, tcx: &ctxt<'tcx>, map: &mut MirMap<'tcx>) {
30+
impl<'tcx, T: MirPass<'tcx>> MirMapPass<'tcx> for T {
31+
fn run_pass(&mut self, tcx: &ctxt<'tcx>, map: &mut MirMap<'tcx>) {
5132
for (_, mir) in &mut map.map {
5233
MirPass::run_pass(self, tcx, mir);
5334
}
@@ -56,7 +37,7 @@ impl<T: MirPass> MirMapPass for T {
5637

5738
/// A manager for MIR passes.
5839
pub struct Passes {
59-
passes: Vec<Box<MirMapPass>>
40+
passes: Vec<Box<for<'tcx> MirMapPass<'tcx>>>
6041
}
6142

6243
impl Passes {
@@ -68,19 +49,18 @@ impl Passes {
6849
}
6950

7051
pub fn run_passes<'tcx>(&mut self, tcx: &ctxt<'tcx>, map: &mut MirMap<'tcx>) {
71-
self.passes.sort_by_key(|e| e.priority());
7252
for pass in &mut self.passes {
7353
pass.run_pass(tcx, map);
7454
}
7555
}
7656

77-
pub fn push_pass(&mut self, pass: Box<MirMapPass>) {
57+
pub fn push_pass(&mut self, pass: Box<for<'a> MirMapPass<'a>>) {
7858
self.passes.push(pass);
7959
}
8060
}
8161

82-
impl ::std::iter::Extend<Box<MirMapPass>> for Passes {
83-
fn extend<I: IntoIterator<Item=Box<MirMapPass>>>(&mut self, it: I) {
62+
impl ::std::iter::Extend<Box<for<'a> MirMapPass<'a>>> for Passes {
63+
fn extend<I: IntoIterator<Item=Box<for <'a> MirMapPass<'a>>>>(&mut self, it: I) {
8464
self.passes.extend(it);
8565
}
8666
}

src/librustc_mir/transform/erase_regions.rs

Lines changed: 2 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -28,19 +28,14 @@ pub fn erase_regions<'tcx>(tcx: &ty::ctxt<'tcx>, mir_map: &mut MirMap<'tcx>) {
2828

2929
pub struct EraseRegions;
3030

31-
impl MirPass for EraseRegions {
32-
fn run_pass<'tcx>(&mut self, tcx: &ty::ctxt<'tcx>, mir: &mut Mir<'tcx>) {
31+
impl<'tcx> MirPass<'tcx> for EraseRegions {
32+
fn run_pass(&mut self, tcx: &ty::ctxt<'tcx>, mir: &mut Mir<'tcx>) {
3333
EraseRegionsVisitor::new(tcx).visit_mir(mir);
3434
}
3535

3636
}
3737

3838
impl Pass for EraseRegions {
39-
fn priority(&self) -> usize {
40-
// We want this pass to run as late as possible in transformation chain, so we give it a
41-
// very high priority number.
42-
!50
43-
}
4439
}
4540

4641
struct EraseRegionsVisitor<'a, 'tcx: 'a> {

src/librustc_mir/transform/print.rs

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -28,14 +28,10 @@ use std::fs::File;
2828
pub struct MirPrint;
2929

3030
impl Pass for MirPrint {
31-
fn priority(&self) -> usize {
32-
// This is a late pass, because we usually want to see the Mir post-passes.
33-
!100
34-
}
3531
}
3632

37-
impl MirMapPass for MirPrint {
38-
fn run_pass<'tcx>(&mut self, tcx: &ty::ctxt<'tcx>, map: &mut MirMap<'tcx>) {
33+
impl<'tcx> MirMapPass<'tcx> for MirPrint {
34+
fn run_pass(&mut self, tcx: &ty::ctxt<'tcx>, map: &mut MirMap<'tcx>) {
3935
let _task = tcx.map.dep_graph.in_task(DepNode::MirPrintPass);
4036
for (node_id, mir) in &map.map {
4137
for attr in tcx.map.attrs(*node_id) {

src/librustc_mir/transform/simplify_cfg.rs

Lines changed: 8 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -18,14 +18,11 @@ use rustc::mir::transform::{MirPass, Pass};
1818
pub struct SimplifyCfg;
1919

2020
impl Pass for SimplifyCfg {
21-
fn priority(&self) -> usize {
22-
50
23-
}
2421
}
2522

26-
impl MirPass for SimplifyCfg {
27-
fn run_pass<'tcx>(&mut self, tcx: &ty::ctxt<'tcx>, mir: &mut Mir<'tcx>) {
28-
let mut dbr_pass = DeadBlockRemoval::new(self);
23+
impl<'tcx> MirPass<'tcx> for SimplifyCfg {
24+
fn run_pass(&mut self, tcx: &ty::ctxt<'tcx>, mir: &mut Mir<'tcx>) {
25+
let mut dbr_pass = DeadBlockRemoval;
2926
let mut changed = true;
3027
while changed {
3128
changed = self.simplify_branches(mir);
@@ -119,22 +116,13 @@ impl SimplifyCfg {
119116
///
120117
/// You want to schedule this pass just after any pass which might introduce unreachable blocks.
121118
/// This pass is very cheap and might improve the run-time of other not-so-cheap passes.
122-
pub struct DeadBlockRemoval(usize);
123-
124-
impl DeadBlockRemoval {
125-
fn new(run_after: &Pass) -> DeadBlockRemoval {
126-
DeadBlockRemoval(run_after.priority() + 1)
127-
}
128-
}
119+
pub struct DeadBlockRemoval;
129120

130121
impl Pass for DeadBlockRemoval {
131-
fn priority(&self) -> usize {
132-
self.0
133-
}
134122
}
135123

136-
impl MirPass for DeadBlockRemoval {
137-
fn run_pass<'tcx>(&mut self, _: &ty::ctxt<'tcx>, mir: &mut Mir<'tcx>) {
124+
impl<'tcx> MirPass<'tcx> for DeadBlockRemoval {
125+
fn run_pass(&mut self, _: &ty::ctxt<'tcx>, mir: &mut Mir<'tcx>) {
138126
let mut seen = vec![false; mir.basic_blocks.len()];
139127

140128
// These blocks are always required.
@@ -159,14 +147,10 @@ impl MirPass for DeadBlockRemoval {
159147
pub struct CompactMir;
160148

161149
impl Pass for CompactMir {
162-
fn priority(&self) -> usize {
163-
// We want this pass to run very late, so we give it a very high priority number.
164-
!10
165-
}
166150
}
167151

168-
impl MirPass for CompactMir {
169-
fn run_pass<'tcx>(&mut self, _: &ty::ctxt<'tcx>, mir: &mut Mir<'tcx>) {
152+
impl<'tcx> MirPass<'tcx> for CompactMir {
153+
fn run_pass(&mut self, _: &ty::ctxt<'tcx>, mir: &mut Mir<'tcx>) {
170154
self.visit_mir(mir);
171155
}
172156
}

src/librustc_plugin/registry.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,7 @@ pub struct Registry<'a> {
5656
pub late_lint_passes: Vec<LateLintPassObject>,
5757

5858
#[doc(hidden)]
59-
pub mir_passes: Vec<Box<mir::transform::MirMapPass>>,
59+
pub mir_passes: Vec<Box<for<'p> mir::transform::MirMapPass<'p>>>,
6060

6161
#[doc(hidden)]
6262
pub lint_groups: HashMap<&'static str, Vec<LintId>>,
@@ -141,7 +141,7 @@ impl<'a> Registry<'a> {
141141
}
142142

143143
/// Register a MIR pass
144-
pub fn register_mir_pass(&mut self, pass: Box<mir::transform::MirMapPass>) {
144+
pub fn register_mir_pass(&mut self, pass: Box<for<'p> mir::transform::MirMapPass<'p>>) {
145145
self.mir_passes.push(pass);
146146
}
147147

0 commit comments

Comments
 (0)