Skip to main content

lift_core/
operations.rs

1use crate::attributes::Attributes;
2use crate::interning::StringId;
3use crate::location::Location;
4use crate::regions::RegionKey;
5use crate::values::ValueKey;
6use serde::{Deserialize, Serialize};
7use slotmap::new_key_type;
8
9new_key_type! {
10    pub struct OpKey;
11}
12
13#[derive(Debug, Clone, Serialize, Deserialize)]
14pub struct OperationData {
15    pub name: StringId,
16    pub dialect: StringId,
17    pub inputs: Vec<ValueKey>,
18    pub results: Vec<ValueKey>,
19    pub attrs: Attributes,
20    pub regions: Vec<RegionKey>,
21    pub location: Location,
22    pub parent_block: Option<crate::blocks::BlockKey>,
23}
24
25impl OperationData {
26    pub fn num_inputs(&self) -> usize {
27        self.inputs.len()
28    }
29
30    pub fn num_results(&self) -> usize {
31        self.results.len()
32    }
33
34    pub fn has_regions(&self) -> bool {
35        !self.regions.is_empty()
36    }
37}