1 //! Representation of Cranelift IR functions. 2 3 mod atomic_rmw_op; 4 mod builder; 5 pub mod constant; 6 pub mod dfg; 7 pub mod entities; 8 mod extfunc; 9 mod extname; 10 pub mod function; 11 mod globalvalue; 12 mod heap; 13 pub mod immediates; 14 pub mod instructions; 15 pub mod jumptable; 16 pub mod layout; 17 pub(crate) mod libcall; 18 mod memflags; 19 mod progpoint; 20 mod sourceloc; 21 pub mod stackslot; 22 mod table; 23 mod trapcode; 24 pub mod types; 25 mod valueloc; 26 27 #[cfg(feature = "enable-serde")] 28 use serde::{Deserialize, Serialize}; 29 30 pub use crate::ir::atomic_rmw_op::AtomicRmwOp; 31 pub use crate::ir::builder::{ 32 InsertBuilder, InstBuilder, InstBuilderBase, InstInserterBase, ReplaceBuilder, 33 }; 34 pub use crate::ir::constant::{ConstantData, ConstantOffset, ConstantPool}; 35 pub use crate::ir::dfg::{DataFlowGraph, ValueDef}; 36 pub use crate::ir::entities::{ 37 Block, Constant, FuncRef, GlobalValue, Heap, Immediate, Inst, JumpTable, SigRef, StackSlot, 38 Table, Value, 39 }; 40 pub use crate::ir::extfunc::{ 41 AbiParam, ArgumentExtension, ArgumentPurpose, ExtFuncData, Signature, 42 }; 43 pub use crate::ir::extname::ExternalName; 44 pub use crate::ir::function::{DisplayFunctionAnnotations, Function}; 45 pub use crate::ir::globalvalue::GlobalValueData; 46 pub use crate::ir::heap::{HeapData, HeapStyle}; 47 pub use crate::ir::instructions::{ 48 InstructionData, Opcode, ValueList, ValueListPool, VariableArgs, 49 }; 50 pub use crate::ir::jumptable::JumpTableData; 51 pub use crate::ir::layout::Layout; 52 pub use crate::ir::libcall::{get_probestack_funcref, LibCall}; 53 pub use crate::ir::memflags::{Endianness, MemFlags}; 54 pub use crate::ir::progpoint::{ExpandedProgramPoint, ProgramOrder, ProgramPoint}; 55 pub use crate::ir::sourceloc::SourceLoc; 56 pub use crate::ir::stackslot::{StackLayoutInfo, StackSlotData, StackSlotKind, StackSlots}; 57 pub use crate::ir::table::TableData; 58 pub use crate::ir::trapcode::TrapCode; 59 pub use crate::ir::types::Type; 60 pub use crate::ir::valueloc::{ArgumentLoc, ValueLoc}; 61 pub use crate::value_label::LabelValueLoc; 62 pub use cranelift_codegen_shared::condcodes; 63 64 use crate::binemit; 65 use crate::entity::{entity_impl, PrimaryMap, SecondaryMap}; 66 use crate::isa; 67 68 /// Map of value locations. 69 pub type ValueLocations = SecondaryMap<Value, ValueLoc>; 70 71 /// Map of jump tables. 72 pub type JumpTables = PrimaryMap<JumpTable, JumpTableData>; 73 74 /// Map of instruction encodings. 75 pub type InstEncodings = SecondaryMap<Inst, isa::Encoding>; 76 77 /// Code offsets for blocks. 78 pub type BlockOffsets = SecondaryMap<Block, binemit::CodeOffset>; 79 80 /// Code offsets for Jump Tables. 81 pub type JumpTableOffsets = SecondaryMap<JumpTable, binemit::CodeOffset>; 82 83 /// Source locations for instructions. 84 pub type SourceLocs = SecondaryMap<Inst, SourceLoc>; 85 86 /// Marked with a label value. 87 #[derive(Copy, Clone, PartialEq, Eq, Hash)] 88 #[cfg_attr(feature = "enable-serde", derive(Serialize, Deserialize))] 89 pub struct ValueLabel(u32); 90 entity_impl!(ValueLabel, "val"); 91 92 /// A label of a Value. 93 #[derive(Debug, Clone)] 94 #[cfg_attr(feature = "enable-serde", derive(Serialize, Deserialize))] 95 pub struct ValueLabelStart { 96 /// Source location when it is in effect 97 pub from: SourceLoc, 98 99 /// The label index. 100 pub label: ValueLabel, 101 } 102 103 /// Value label assignements: label starts or value aliases. 104 #[derive(Debug, Clone)] 105 #[cfg_attr(feature = "enable-serde", derive(Serialize, Deserialize))] 106 pub enum ValueLabelAssignments { 107 /// Original value labels assigned at transform. 108 Starts(alloc::vec::Vec<ValueLabelStart>), 109 110 /// A value alias to original value. 111 Alias { 112 /// Source location when it is in effect 113 from: SourceLoc, 114 115 /// The label index. 116 value: Value, 117 }, 118 } 119