Please check the build logs for more information.
See Builds for ideas on how to fix a failed build, or Metadata for how to configure docs.rs builds.
If you believe this is docs.rs' fault, open an issue.
llvm-ir-analysis
: Static analysis of LLVM IR
This crate provides several simple static analyses of LLVM IR.
In particular, this crate computes the following on an llvm-ir
Module
or Function
:
The above analyses are provided by the FunctionAnalysis
,
ModuleAnalysis
, and CrossModuleAnalysis
objects, which lazily compute
each of these structures on demand and cache the results.
Getting started
llvm-ir-analysis
is on crates.io,
so you can simply add it as a dependency in your Cargo.toml
, selecting the
feature corresponding to the LLVM version you want:
[]
= { = "0.2.0", = ["llvm-11"] }
Currently, the supported LLVM versions are llvm-8
, llvm-9
, llvm-10
, and
llvm-11
.
The corresponding LLVM library must be available on your system; see the
llvm-sys
README for more details and instructions.
You'll also need some LLVM IR to analyze, in the form of an llvm-ir
Module
or [Function
].
This can be easily generated from an LLVM bitcode file; for more detailed
instructions, see llvm-ir
's README.
Once you have a Module
, you can construct a ModuleAnalysis
object:
let module = from_bc_path?;
let analysis = new;
You can get Module
-wide analyses such as analysis.call_graph()
directly from the ModuleAnalysis
object.
You can also get Function
-level analyses such as the control-flow
graph using analysis.fn_analysis("my_func")
; or you can construct
a FunctionAnalysis
directly with FunctionAnalysis::new()
.
Finally, you can get multi-module analyses such as a cross-module
call graph by starting with a CrossModuleAnalysis
instead of just
a ModuleAnalysis
. The CrossModuleAnalysis
also provides a
ModuleAnalysis
for each of the included modules, again computed
lazily on demand.