Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
bytecodealliance
GitHub Repository: bytecodealliance/wasmtime
Path: blob/main/cranelift/codegen/src/lib.rs
1693 views
1
//! Cranelift code generation library.
2
#![deny(missing_docs)]
3
// Display feature requirements in the documentation when building on docs.rs
4
#![cfg_attr(docsrs, feature(doc_auto_cfg))]
5
#![no_std]
6
// Various bits and pieces of this crate might only be used for one platform or
7
// another, but it's not really too useful to learn about that all the time. On
8
// CI we build at least one version of this crate with `--features all-arch`
9
// which means we'll always detect truly dead code, otherwise if this is only
10
// built for one platform we don't have to worry too much about trimming
11
// everything down.
12
#![cfg_attr(
13
not(feature = "all-arch"),
14
allow(dead_code, reason = "see comment above")
15
)]
16
17
extern crate alloc;
18
19
#[cfg(feature = "std")]
20
#[macro_use]
21
extern crate std;
22
23
#[cfg(not(feature = "std"))]
24
use hashbrown::{HashMap, HashSet, hash_map};
25
#[cfg(feature = "std")]
26
use std::collections::{HashMap, hash_map};
27
28
pub use crate::context::Context;
29
pub use crate::value_label::{LabelValueLoc, ValueLabelsRanges, ValueLocRange};
30
pub use crate::verifier::verify_function;
31
pub use crate::write::write_function;
32
33
pub use cranelift_bforest as bforest;
34
pub use cranelift_bitset as bitset;
35
pub use cranelift_control as control;
36
pub use cranelift_entity as entity;
37
#[cfg(feature = "unwind")]
38
pub use gimli;
39
40
// Pull in generated the `isle_numerics_methods` macro.
41
include!(concat!(env!("ISLE_DIR"), "/isle_numerics.rs"));
42
43
#[macro_use]
44
mod machinst;
45
46
pub mod binemit;
47
pub mod cfg_printer;
48
pub mod cursor;
49
pub mod data_value;
50
pub mod dbg;
51
pub mod dominator_tree;
52
pub mod flowgraph;
53
pub mod inline;
54
pub mod ir;
55
pub mod isa;
56
pub mod loop_analysis;
57
pub mod print_errors;
58
pub mod settings;
59
pub mod timing;
60
pub mod traversals;
61
pub mod verifier;
62
pub mod write;
63
64
pub use crate::entity::packed_option;
65
pub use crate::machinst::buffer::{
66
ExceptionContextLoc, FinalizedMachCallSite, FinalizedMachExceptionHandler, FinalizedMachReloc,
67
FinalizedRelocTarget, MachCallSite, MachSrcLoc, MachTextSectionBuilder, MachTrap,
68
OpenPatchRegion, PatchRegion,
69
};
70
pub use crate::machinst::{
71
CallInfo, CompiledCode, Final, MachBuffer, MachBufferFinalized, MachInst, MachInstEmit,
72
MachInstEmitState, MachLabel, RealReg, Reg, RelocDistance, TextSectionBuilder, VCodeConstant,
73
VCodeConstantData, VCodeConstants, VCodeInst, Writable,
74
};
75
76
mod alias_analysis;
77
mod constant_hash;
78
mod context;
79
mod ctxhash;
80
mod egraph;
81
mod inst_predicates;
82
mod isle_prelude;
83
mod legalizer;
84
mod nan_canonicalization;
85
mod opts;
86
mod ranges;
87
mod remove_constant_phis;
88
mod result;
89
mod scoped_hash_map;
90
mod take_and_replace;
91
mod unreachable_code;
92
mod value_label;
93
94
#[cfg(feature = "souper-harvest")]
95
mod souper_harvest;
96
97
pub use crate::result::{CodegenError, CodegenResult, CompileError};
98
pub use crate::take_and_replace::TakeAndReplace;
99
100
#[cfg(feature = "incremental-cache")]
101
pub mod incremental_cache;
102
103
/// Even when trace logging is disabled, the trace macro has a significant performance cost so we
104
/// disable it by default.
105
#[macro_export]
106
macro_rules! trace {
107
($($tt:tt)*) => {
108
if cfg!(any(feature = "trace-log", debug_assertions)) {
109
::log::trace!($($tt)*);
110
}
111
};
112
}
113
114
/// Dynamic check for whether trace logging is enabled.
115
#[macro_export]
116
macro_rules! trace_log_enabled {
117
() => {
118
cfg!(any(feature = "trace-log", debug_assertions))
119
&& ::log::log_enabled!(::log::Level::Trace)
120
};
121
}
122
123
include!(concat!(env!("OUT_DIR"), "/version.rs"));
124
125