1*90ac295eSAlex Crichton use crate::HashMap;
2729e2640Sbjorn3 use crate::ir::ValueLabel;
3a0318f36SChris Fallin use crate::machinst::Reg;
4bb8fa40eSbjorn3 use alloc::vec::Vec;
58f95c517SYury Delendik 
629b32b30SYury Delendik #[cfg(feature = "enable-serde")]
79ec02f9dSChristopher Serr use serde_derive::{Deserialize, Serialize};
829b32b30SYury Delendik 
98f95c517SYury Delendik /// Value location range.
10d3815a03SArtur Jamro #[derive(Debug, Clone, Copy, PartialEq, Eq)]
1129b32b30SYury Delendik #[cfg_attr(feature = "enable-serde", derive(Serialize, Deserialize))]
128f95c517SYury Delendik pub struct ValueLocRange {
13edd2bf12Sbjorn3     /// The ValueLoc containing a ValueLabel during this range.
14c84d6be6SChris Fallin     pub loc: LabelValueLoc,
151873c0aeSYury Delendik     /// The start of the range. It is an offset in the generated code.
168f95c517SYury Delendik     pub start: u32,
171873c0aeSYury Delendik     /// The end of the range. It is an offset in the generated code.
188f95c517SYury Delendik     pub end: u32,
198f95c517SYury Delendik }
208f95c517SYury Delendik 
21c84d6be6SChris Fallin /// The particular location for a value.
22c84d6be6SChris Fallin #[derive(Debug, Clone, Copy, PartialEq, Eq)]
23c84d6be6SChris Fallin #[cfg_attr(feature = "enable-serde", derive(Serialize, Deserialize))]
24c84d6be6SChris Fallin pub enum LabelValueLoc {
257b16eccdSSingleAccretion     /// Register.
26c84d6be6SChris Fallin     Reg(Reg),
277b16eccdSSingleAccretion     /// Offset from the Canonical Frame Address (aka CFA).
287b16eccdSSingleAccretion     CFAOffset(i64),
29c84d6be6SChris Fallin }
30c84d6be6SChris Fallin 
318f95c517SYury Delendik /// Resulting map of Value labels and their ranges/locations.
328f95c517SYury Delendik pub type ValueLabelsRanges = HashMap<ValueLabel, Vec<ValueLocRange>>;
33