Skip to content

Commit 61871d4

Browse files
committed
Re-add a way to specify initial state
1 parent f78274c commit 61871d4

File tree

4 files changed

+17
-8
lines changed

4 files changed

+17
-8
lines changed

src/librustc_mir/transform/const_propagate.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ impl Pass for ConstPropagate {}
4848

4949
impl<'tcx> MirPass<'tcx> for ConstPropagate {
5050
fn run_pass<'a>(&mut self, tcx: TyCtxt<'a, 'tcx, 'tcx>, _: MirSource, mir: &mut Mir<'tcx>) {
51-
*mir = Dataflow::forward(mir,
51+
*mir = Dataflow::forward(mir, ConstLattice::new(),
5252
ConstTransfer { tcx: tcx },
5353
ConstRewrite { tcx: tcx }.and_then(SimplifyRewrite));
5454
}

src/librustc_mir/transform/dataflow/mod.rs

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -111,7 +111,7 @@ where L: Lattice,
111111
R: Rewrite<'tcx, T>
112112
{
113113
/// Execute dataflow in forward direction
114-
pub fn forward(mir: &'a Mir<'tcx>, transfer: T, rewrite: R) -> Mir<'tcx> {
114+
pub fn forward(mir: &'a Mir<'tcx>, initial: L, transfer: T, rewrite: R) -> Mir<'tcx> {
115115
let block_count = mir.basic_blocks().len();
116116
let mut queue = BitVector::new(block_count);
117117
queue.insert(START_BLOCK.index());
@@ -123,6 +123,7 @@ where L: Lattice,
123123
transfer: transfer,
124124
};
125125
dataflow.knowledge.extend(::std::iter::repeat(None).take(block_count));
126+
dataflow.update_fact(START_BLOCK, initial);
126127
dataflow.fixpoint(Self::forward_block);
127128
dataflow.construct_mir()
128129
}
@@ -169,18 +170,25 @@ where L: Lattice,
169170
R: Rewrite<'tcx, T>
170171
{
171172
/// Execute dataflow in backward direction.
172-
pub fn backward(mir: &'a Mir<'tcx>, transfer: T, rewrite: R) -> Mir<'tcx> {
173+
pub fn backward(mir: &'a Mir<'tcx>, initial: L, transfer: T, rewrite: R) -> Mir<'tcx> {
173174
let block_count = mir.basic_blocks().len();
174175
let mut queue = BitVector::new(block_count);
175176
mir_exits(mir, &mut queue);
177+
let mut knowledge = IndexVec::with_capacity(block_count);
178+
knowledge.extend(::std::iter::repeat(None).take(block_count));
179+
for block in queue.iter() {
180+
knowledge[BasicBlock::new(block)] = Some(Knowledge {
181+
fact: initial.clone(),
182+
new_block: None,
183+
});
184+
}
176185
let mut dataflow = Dataflow {
177186
mir: mir,
178187
queue: queue,
179-
knowledge: IndexVec::with_capacity(block_count),
188+
knowledge: knowledge,
180189
rewrite: rewrite,
181190
transfer: transfer,
182191
};
183-
dataflow.knowledge.extend(::std::iter::repeat(None).take(block_count));
184192
dataflow.fixpoint(Self::backward_block);
185193
dataflow.construct_mir()
186194
}

src/librustc_mir/transform/deadcode.rs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,8 @@ impl Pass for DeadCode {}
2222

2323
impl<'tcx> MirPass<'tcx> for DeadCode {
2424
fn run_pass<'a>(&mut self, _: TyCtxt<'a, 'tcx, 'tcx>, _: MirSource, mir: &mut Mir<'tcx>) {
25-
let new_mir = Dataflow::backward(mir, DeadCodeTransfer, DeadCodeRewrite);
25+
let new_mir = Dataflow::backward(mir, DeadCodeLattice::bottom(),
26+
DeadCodeTransfer, DeadCodeRewrite);
2627
*mir = new_mir;
2728
}
2829
}

src/librustc_mir/transform/mod.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,5 +20,5 @@ pub mod promote_consts;
2020
pub mod qualify_consts;
2121
pub mod dump_mir;
2222
pub mod deaggregator;
23-
pub mod liveness;
24-
pub mod cs_propagate;
23+
pub mod deadcode;
24+
pub mod const_propagate;

0 commit comments

Comments
 (0)