From 15c411d7c1929444a5ea3e418f92feb463fe9684 Mon Sep 17 00:00:00 2001 From: "Felix S. Klock II" Date: Wed, 5 Jul 2017 15:11:23 +0200 Subject: [PATCH] Added some documentation for the `struct BlockSets` in `rustc_mir::dataflow`. --- src/librustc_mir/dataflow/mod.rs | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/src/librustc_mir/dataflow/mod.rs b/src/librustc_mir/dataflow/mod.rs index 18a81093a433..ed6145a19c65 100644 --- a/src/librustc_mir/dataflow/mod.rs +++ b/src/librustc_mir/dataflow/mod.rs @@ -446,9 +446,28 @@ pub struct AllSets { on_entry_sets: Bits, } +/// Triple of sets associated with a given block. +/// +/// Generally, one sets up `on_entry`, `gen_set`, and `kill_set` for +/// each block individually, and then runs the dataflow analysis which +/// iteratively modifies the various `on_entry` sets (but leaves the +/// other two sets unchanged, since they represent the effect of the +/// block, which should be invariant over the course of the analysis). +/// +/// It is best to ensure that the intersection of `gen_set` and +/// `kill_set` is empty; otherwise the results of the dataflow will +/// have a hidden dependency on what order the bits are generated and +/// killed during the iteration. (This is such a good idea that the +/// `fn gen` and `fn kill` methods that set their state enforce this +/// for you.) pub struct BlockSets<'a, E: Idx> { + /// Dataflow state immediately before control flow enters the given block. pub(crate) on_entry: &'a mut IdxSet, + + /// Bits that are set to 1 by the time we exit the given block. pub(crate) gen_set: &'a mut IdxSet, + + /// Bits that are set to 0 by the time we exit the given block. pub(crate) kill_set: &'a mut IdxSet, }