use crate::{
impl_table_indexing,
ir::{Arg, Block, ExtUnit, ExtUnitData, Inst, InstData, Value, ValueData},
table::{PrimaryTable2, SecondaryTable},
};
use std::collections::{HashMap, HashSet};
#[derive(Default, Serialize, Deserialize)]
pub(super) struct DataFlowGraph {
pub insts: PrimaryTable2<Inst, InstData>,
pub results: SecondaryTable<Inst, Value>,
pub values: PrimaryTable2<Value, ValueData>,
pub args: SecondaryTable<Arg, Value>,
pub ext_units: PrimaryTable2<ExtUnit, ExtUnitData>,
pub names: HashMap<Value, String>,
pub anonymous_hints: HashMap<Value, u32>,
pub location_hints: HashMap<Inst, usize>,
pub value_uses: HashMap<Value, HashSet<Inst>>,
pub block_uses: HashMap<Block, HashSet<Inst>>,
}
impl_table_indexing!(DataFlowGraph, insts, Inst, InstData);
impl_table_indexing!(DataFlowGraph, values, Value, ValueData);
impl_table_indexing!(DataFlowGraph, ext_units, ExtUnit, ExtUnitData);