diff options
| author | Camelid <camelidcamel@gmail.com> | 2020-11-08 13:52:15 -0800 |
|---|---|---|
| committer | Camelid <camelidcamel@gmail.com> | 2020-11-09 13:34:16 -0800 |
| commit | 0242f963c631a130a3c405d7e54f4695ef10a139 (patch) | |
| tree | 084f2e072bc139e9ebc9bad8f61727709ff34e50 /compiler/rustc_mir/src/dataflow | |
| parent | b2d115f6db5172c961dfeb50de15f35784dbc7c9 (diff) | |
| download | rust-0242f963c631a130a3c405d7e54f4695ef10a139.tar.gz rust-0242f963c631a130a3c405d7e54f4695ef10a139.zip | |
Add comments to explain memory usage optimization
Diffstat (limited to 'compiler/rustc_mir/src/dataflow')
| -rw-r--r-- | compiler/rustc_mir/src/dataflow/framework/engine.rs | 9 |
1 files changed, 8 insertions, 1 deletions
diff --git a/compiler/rustc_mir/src/dataflow/framework/engine.rs b/compiler/rustc_mir/src/dataflow/framework/engine.rs index 1b7264f86a2..3f9f558223b 100644 --- a/compiler/rustc_mir/src/dataflow/framework/engine.rs +++ b/compiler/rustc_mir/src/dataflow/framework/engine.rs @@ -208,12 +208,19 @@ where } } + // `state` is not actually used between iterations; + // this is just an optimization to avoid reallocating + // every iteration. let mut state = analysis.bottom_value(body); while let Some(bb) = dirty_queue.pop() { let bb_data = &body[bb]; - // Apply the block transfer function, using the cached one if it exists. + // Set the state to the entry state of the block. + // This is equivalent to `state = entry_sets[bb].clone()`, + // but it saves an allocation, thus improving compile times. state.clone_from(&entry_sets[bb]); + + // Apply the block transfer function, using the cached one if it exists. match &apply_trans_for_block { Some(apply) => apply(bb, &mut state), None => A::Direction::apply_effects_in_block(&analysis, &mut state, bb, bb_data), |
