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::{dynamic_to_fixed, DynamicTypeData, DynamicTypes};
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;
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::{get_probestack_funcref, LibCall};
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 use crate::ir::user_stack_maps::{UserStackMap, UserStackMapEntry};
72
73use crate::entity::{entity_impl, PrimaryMap, SecondaryMap};
74
75/// Map of jump tables.
76pub type JumpTables = PrimaryMap<JumpTable, JumpTableData>;
77
78/// Map of exception tables.
79pub type ExceptionTables = PrimaryMap<ExceptionTable, ExceptionTableData>;
80
81/// Source locations for instructions.
82pub(crate) type SourceLocs = SecondaryMap<Inst, RelSourceLoc>;
83
84/// Marked with a label value.
85#[derive(Copy, Clone, PartialEq, Eq, Hash)]
86#[cfg_attr(feature = "enable-serde", derive(Serialize, Deserialize))]
87pub struct ValueLabel(u32);
88entity_impl!(ValueLabel, "VL");
89
90/// A label of a Value.
91#[derive(Debug, Clone, PartialEq, Hash)]
92#[cfg_attr(feature = "enable-serde", derive(Serialize, Deserialize))]
93pub struct ValueLabelStart {
94    /// Source location when it is in effect
95    pub from: RelSourceLoc,
96
97    /// The label index.
98    pub label: ValueLabel,
99}
100
101/// Value label assignments: label starts or value aliases.
102#[derive(Debug, Clone, PartialEq, Hash)]
103#[cfg_attr(feature = "enable-serde", derive(Serialize, Deserialize))]
104pub enum ValueLabelAssignments {
105    /// Original value labels assigned at transform.
106    Starts(alloc::vec::Vec<ValueLabelStart>),
107
108    /// A value alias to original value.
109    Alias {
110        /// Source location when it is in effect
111        from: RelSourceLoc,
112
113        /// The label index.
114        value: Value,
115    },
116}