cranelift_codegen/
value_label.rs

1use crate::ir::ValueLabel;
2use crate::machinst::Reg;
3use crate::HashMap;
4use alloc::vec::Vec;
5
6#[cfg(feature = "enable-serde")]
7use serde_derive::{Deserialize, Serialize};
8
9/// Value location range.
10#[derive(Debug, Clone, Copy, PartialEq, Eq)]
11#[cfg_attr(feature = "enable-serde", derive(Serialize, Deserialize))]
12pub struct ValueLocRange {
13    /// The ValueLoc containing a ValueLabel during this range.
14    pub loc: LabelValueLoc,
15    /// The start of the range. It is an offset in the generated code.
16    pub start: u32,
17    /// The end of the range. It is an offset in the generated code.
18    pub end: u32,
19}
20
21/// The particular location for a value.
22#[derive(Debug, Clone, Copy, PartialEq, Eq)]
23#[cfg_attr(feature = "enable-serde", derive(Serialize, Deserialize))]
24pub enum LabelValueLoc {
25    /// Register.
26    Reg(Reg),
27    /// Offset from the Canonical Frame Address (aka CFA).
28    CFAOffset(i64),
29}
30
31/// Resulting map of Value labels and their ranges/locations.
32pub type ValueLabelsRanges = HashMap<ValueLabel, Vec<ValueLocRange>>;