vicis_core/ir/function/basic_block/
mod.rs1use crate::{ir::module::name::Name, traits::basic_block::BasicBlock as BB};
2use id_arena::Id;
3use rustc_hash::FxHashSet;
4
5pub type BasicBlockId = Id<BasicBlock>;
6
7#[derive(Debug)]
8pub struct BasicBlock {
9 pub name: Option<Name>,
10 pub preds: FxHashSet<BasicBlockId>,
11 pub succs: FxHashSet<BasicBlockId>,
12}
13
14impl Default for BasicBlock {
15 fn default() -> Self {
16 Self {
17 name: None,
18 preds: FxHashSet::default(),
19 succs: FxHashSet::default(),
20 }
21 }
22}
23
24impl BasicBlock {
25 pub fn new() -> Self {
26 Self::default()
27 }
28
29 pub fn preds(&self) -> &FxHashSet<BasicBlockId> {
30 &self.preds
31 }
32
33 pub fn preds_mut(&mut self) -> &mut FxHashSet<BasicBlockId> {
34 &mut self.preds
35 }
36
37 pub fn succs(&self) -> &FxHashSet<BasicBlockId> {
38 &self.succs
39 }
40
41 pub fn succs_mut(&mut self) -> &mut FxHashSet<BasicBlockId> {
42 &mut self.succs
43 }
44}
45
46impl BB for BasicBlock {
47 fn preds(&self) -> &FxHashSet<Id<Self>> {
48 &self.preds
49 }
50
51 fn succs(&self) -> &FxHashSet<Id<Self>> {
52 &self.succs
53 }
54}