cranelift_codegen/ir/
mod.rs

1//! Representation of Cranelift IR functions.
2
3mod atomic_rmw_op;
4mod builder;
5pub mod condcodes;
6pub mod constant;
7pub mod dfg;
8pub mod dynamic_type;
9pub mod entities;
10mod exception_table;
11mod extfunc;
12mod extname;
13pub mod function;
14mod globalvalue;
15pub mod immediates;
16pub mod instructions;
17pub mod jumptable;
18pub(crate) mod known_symbol;
19pub mod layout;
20pub(crate) mod libcall;
21mod memflags;
22mod memtype;
23pub mod pcc;
24mod progpoint;
25mod sourceloc;
26pub mod stackslot;
27mod trapcode;
28pub mod types;
29mod user_stack_maps;
30
31#[cfg(feature = "enable-serde")]
32use serde_derive::{Deserialize, Serialize};
33
34pub use crate::ir::atomic_rmw_op::AtomicRmwOp;
35pub use crate::ir::builder::{
36    InsertBuilder, InstBuilder, InstBuilderBase, InstInserterBase, ReplaceBuilder,
37};
38pub use crate::ir::constant::{ConstantData, ConstantPool};
39pub use crate::ir::dfg::{BlockData, DataFlowGraph, ValueDef};
40pub use crate::ir::dynamic_type::{DynamicTypeData, DynamicTypes, dynamic_to_fixed};
41pub use crate::ir::entities::{
42    Block, Constant, DynamicStackSlot, DynamicType, ExceptionTable, ExceptionTag, FuncRef,
43    GlobalValue, Immediate, Inst, JumpTable, MemoryType, SigRef, StackSlot, UserExternalNameRef,
44    Value,
45};
46pub use crate::ir::exception_table::{ExceptionTableData, ExceptionTableItem};
47pub use crate::ir::extfunc::{
48    AbiParam, ArgumentExtension, ArgumentPurpose, ExtFuncData, Signature,
49};
50pub use crate::ir::extname::{ExternalName, UserExternalName, UserFuncName};
51pub use crate::ir::function::Function;
52pub use crate::ir::globalvalue::GlobalValueData;
53pub use crate::ir::instructions::{
54    BlockArg, BlockCall, InstructionData, Opcode, ValueList, ValueListPool, VariableArgs,
55};
56pub use crate::ir::jumptable::JumpTableData;
57pub use crate::ir::known_symbol::KnownSymbol;
58pub use crate::ir::layout::Layout;
59pub use crate::ir::libcall::{LibCall, get_probestack_funcref};
60pub use crate::ir::memflags::{AliasRegion, Endianness, MemFlags};
61pub use crate::ir::memtype::{MemoryTypeData, MemoryTypeField};
62pub use crate::ir::pcc::{BaseExpr, Expr, Fact, FactContext, PccError, PccResult};
63pub use crate::ir::progpoint::ProgramPoint;
64pub use crate::ir::sourceloc::RelSourceLoc;
65pub use crate::ir::sourceloc::SourceLoc;
66pub use crate::ir::stackslot::{
67    DynamicStackSlotData, DynamicStackSlots, StackSlotData, StackSlotKind, StackSlots,
68};
69pub use crate::ir::trapcode::TrapCode;
70pub use crate::ir::types::Type;
71pub(crate) use crate::ir::user_stack_maps::UserStackMapEntryVec;
72pub use crate::ir::user_stack_maps::{UserStackMap, UserStackMapEntry};
73
74use crate::entity::{PrimaryMap, SecondaryMap, entity_impl};
75
76/// Map of jump tables.
77pub type JumpTables = PrimaryMap<JumpTable, JumpTableData>;
78
79/// Map of exception tables.
80pub type ExceptionTables = PrimaryMap<ExceptionTable, ExceptionTableData>;
81
82/// Source locations for instructions.
83pub(crate) type SourceLocs = SecondaryMap<Inst, RelSourceLoc>;
84
85/// Marked with a label value.
86#[derive(Copy, Clone, PartialEq, Eq, Hash)]
87#[cfg_attr(feature = "enable-serde", derive(Serialize, Deserialize))]
88pub struct ValueLabel(u32);
89entity_impl!(ValueLabel, "VL");
90
91/// A label of a Value.
92#[derive(Debug, Clone, PartialEq, Hash)]
93#[cfg_attr(feature = "enable-serde", derive(Serialize, Deserialize))]
94pub struct ValueLabelStart {
95    /// Source location when it is in effect
96    pub from: RelSourceLoc,
97
98    /// The label index.
99    pub label: ValueLabel,
100}
101
102/// Value label assignments: label starts or value aliases.
103#[derive(Debug, Clone, PartialEq, Hash)]
104#[cfg_attr(feature = "enable-serde", derive(Serialize, Deserialize))]
105pub enum ValueLabelAssignments {
106    /// Original value labels assigned at transform.
107    Starts(alloc::vec::Vec<ValueLabelStart>),
108
109    /// A value alias to original value.
110    Alias {
111        /// Source location when it is in effect
112        from: RelSourceLoc,
113
114        /// The label index.
115        value: Value,
116    },
117}