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