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