@@ -56,9 +56,6 @@ pub struct LivenessResult {
5656 /// Liveness mode in use when these results were computed.
5757 pub mode : LivenessMode ,
5858
59- /// Live variables on entry to each basic block.
60- pub ins : IndexVec < BasicBlock , LocalSet > ,
61-
6259 /// Live variables on exit to each basic block. This is equal to
6360 /// the union of the `ins` for each successor.
6461 pub outs : IndexVec < BasicBlock , LocalSet > ,
@@ -125,11 +122,10 @@ pub fn liveness_of_locals<'tcx>(mir: &Mir<'tcx>, mode: LivenessMode) -> Liveness
125122 . map ( |b| block ( mode, b, locals) )
126123 . collect ( ) ;
127124
128- let mut ins : IndexVec < _ , _ > = mir. basic_blocks ( )
125+ let mut outs : IndexVec < _ , _ > = mir. basic_blocks ( )
129126 . indices ( )
130127 . map ( |_| LocalSet :: new_empty ( locals) )
131128 . collect ( ) ;
132- let mut outs = ins. clone ( ) ;
133129
134130 let mut bits = LocalSet :: new_empty ( locals) ;
135131
@@ -140,28 +136,21 @@ pub fn liveness_of_locals<'tcx>(mir: &Mir<'tcx>, mode: LivenessMode) -> Liveness
140136 let predecessors = mir. predecessors ( ) ;
141137
142138 while let Some ( bb) = dirty_queue. pop ( ) {
143- // outs[b] = ∪ {ins of successors}
144- bits. clear ( ) ;
145- for & successor in mir[ bb] . terminator ( ) . successors ( ) {
146- bits. union ( & ins[ successor] ) ;
147- }
148- outs[ bb] . overwrite ( & bits) ;
149-
150139 // bits = use ∪ (bits - def)
140+ bits. overwrite ( & outs[ bb] ) ;
151141 def_use[ bb] . apply ( & mut bits) ;
152142
153- // update bits on entry and, if they have changed, enqueue all
154- // of our predecessors, since their inputs have now changed
155- if ins[ bb] != bits {
156- ins[ bb] . overwrite ( & bits) ;
157-
158- for & pred_bb in & predecessors[ bb] {
143+ // add `bits` to the out set for each predecessor; if those
144+ // bits were not already present, then enqueue the predecessor
145+ // as dirty.
146+ for & pred_bb in & predecessors[ bb] {
147+ if outs[ pred_bb] . union ( & bits) {
159148 dirty_queue. insert ( pred_bb) ;
160149 }
161150 }
162151 }
163152
164- LivenessResult { mode, ins , outs }
153+ LivenessResult { mode, outs }
165154}
166155
167156impl LivenessResult {
@@ -202,8 +191,6 @@ impl LivenessResult {
202191 statement_defs_uses. apply ( & mut bits) ;
203192 callback ( statement_location, & bits) ;
204193 }
205-
206- assert_eq ! ( bits, self . ins[ block] ) ;
207194 }
208195
209196 fn defs_uses < ' tcx , V > ( & self , mir : & Mir < ' tcx > , location : Location , thing : & V ) -> DefsUses
@@ -445,7 +432,6 @@ pub fn write_mir_fn<'a, 'tcx>(
445432 . collect ( ) ;
446433 writeln ! ( w, "{} {{{}}}" , prefix, live. join( ", " ) )
447434 } ;
448- print ( w, " " , & result. ins ) ?;
449435 write_basic_block ( tcx, block, mir, & mut |_, _| Ok ( ( ) ) , w) ?;
450436 print ( w, " " , & result. outs ) ?;
451437 if block. index ( ) + 1 != mir. basic_blocks ( ) . len ( ) {
0 commit comments