Trait rustc_mir::dataflow::framework::GenKill[][src]

pub trait GenKill<T> {
    fn gen(&mut self, elem: T);
fn kill(&mut self, elem: T); fn gen_all(&mut self, elems: impl IntoIterator<Item = T>) { ... }
fn kill_all(&mut self, elems: impl IntoIterator<Item = T>) { ... } }
Expand description

The legal operations for a transfer function in a gen/kill problem.

This abstraction exists because there are two different contexts in which we call the methods in GenKillAnalysis. Sometimes we need to store a single transfer function that can be efficiently applied multiple times, such as when computing the cumulative transfer function for each block. These cases require a GenKillSet, which in turn requires two BitSets of storage. Oftentimes, however, we only need to apply an effect once. In these cases, it is more efficient to pass the BitSet representing the state vector directly into the *_effect methods as opposed to building up a GenKillSet and then throwing it away.

Required methods

fn gen(&mut self, elem: T)[src]

Expand description

Inserts elem into the state vector.

fn kill(&mut self, elem: T)[src]

Expand description

Removes elem from the state vector.

Provided methods

fn gen_all(&mut self, elems: impl IntoIterator<Item = T>)[src]

Expand description

Calls gen for each element in elems.

fn kill_all(&mut self, elems: impl IntoIterator<Item = T>)[src]

Expand description

Calls kill for each element in elems.

Implementations on Foreign Types

impl<T: Idx> GenKill<T> for BitSet<T>[src]

fn gen(&mut self, elem: T)[src]

fn kill(&mut self, elem: T)[src]

Implementors

impl<T: Idx> GenKill<T> for Dual<BitSet<T>>[src]

fn gen(&mut self, elem: T)[src]

fn kill(&mut self, elem: T)[src]

impl<T: Idx> GenKill<T> for GenKillSet<T>[src]

fn gen(&mut self, elem: T)[src]

fn kill(&mut self, elem: T)[src]