@@ -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 }
0 commit comments