File tree 1 file changed +15
-2
lines changed
compiler/rustc_mir/src/transform
1 file changed +15
-2
lines changed Original file line number Diff line number Diff line change @@ -288,8 +288,21 @@ impl OptimizationFinder<'b, 'tcx> {
288
288
}
289
289
}
290
290
291
- // We need to make sure that the Ne we are going to insert comes before the
292
- // StorageDeads so we want to swap the StorageDead closest to Eq with Ne.
291
+ // Recall that we are optimizing a sequence that looks like
292
+ // this:
293
+ // _4 = Eq(move _5, move _6);
294
+ // StorageDead(_5);
295
+ // StorageDead(_6);
296
+ // _3 = Not(move _4);
297
+ //
298
+ // If we do a naive replace of Not -> Ne, we up with this:
299
+ // StorageDead(_5);
300
+ // StorageDead(_6);
301
+ // _3 = Ne(move _5, move _6);
302
+ //
303
+ // Notice that `_5` and `_6` are marked dead before being used.
304
+ // To combat this we want to swap Ne with the StorageDead
305
+ // closest to Eq, i.e `StorageDead(_5)` in this example.
293
306
let storage_dead_to_swap =
294
307
seen_storage_deads. last ( ) . map ( |( _, idx) | * idx) ;
295
308
You can’t perform that action at this time.
0 commit comments