module Llvm_executionengine:sig..end
JIT Interpreter.
This interface provides an OCaml API for LLVM execution engine (JIT/
interpreter), the classes in the ExecutionEngine library.
exception Error of string
val initialize : unit -> boolinitialize () initializes the backend corresponding to the host.
Returns true if initialization is successful; false indicates
that there is no such backend or it is unable to emit object code
via MCJIT.
type llexecutionengine
An execution engine is either a JIT compiler or an interpreter, capable of directly loading an LLVM module and executing its functions without first invoking a static compiler and generating a native executable.
type llcompileroptions = {
|
opt_level : |
|
code_model : |
|
no_framepointer_elim : |
|
enable_fast_isel : |
}
MCJIT compiler options. See llvm::TargetOptions.
val default_compiler_options : llcompileroptionsDefault MCJIT compiler options:
{ opt_level = 0; code_model = CodeModel.JIT_default;
no_framepointer_elim = false; enable_fast_isel = false }
val create : ?options:llcompileroptions ->
Llvm.llmodule -> llexecutionenginecreate m optlevel creates a new MCJIT just-in-time compiler, taking
ownership of the module m if successful with the desired optimization
level optlevel. Raises Error msg if an error occurrs. The execution
engine is not garbage collected and must be destroyed with dispose ee.
Run Llvm_executionengine.initialize before using this function.
See the function llvm::EngineBuilder::create.
val dispose : llexecutionengine -> unitdispose ee releases the memory used by the execution engine and must be
invoked to avoid memory leaks.
val add_module : Llvm.llmodule -> llexecutionengine -> unitadd_module m ee adds the module m to the execution engine ee.
val remove_module : Llvm.llmodule -> llexecutionengine -> unitremove_module m ee removes the module m from the execution engine
ee. Raises Error msg if an error occurs.
val run_static_ctors : llexecutionengine -> unitrun_static_ctors ee executes the static constructors of each module in
the execution engine ee.
val run_static_dtors : llexecutionengine -> unitrun_static_dtors ee executes the static destructors of each module in
the execution engine ee.
val data_layout : llexecutionengine -> Llvm_target.DataLayout.tdata_layout ee is the data layout of the execution engine ee.
val add_global_mapping : Llvm.llvalue ->
'a Ctypes.ptr -> llexecutionengine -> unitadd_global_mapping gv ptr ee tells the execution engine ee that
the global gv is at the specified location ptr, which must outlive
gv and ee.
All uses of gv in the compiled code will refer to ptr.
val get_global_value_address : string -> 'a Ctypes.typ -> llexecutionengine -> 'aget_global_value_address id typ ee returns a pointer to the
identifier id as type typ, which will be a pointer type for a
value, and which will be live as long as id and ee
are. Caution: this function finalizes, i.e. forces code
generation, all loaded modules. Further modifications to the
modules will not have any effect.
val get_function_address : string -> 'a Ctypes.typ -> llexecutionengine -> 'aget_function_address fn typ ee returns a pointer to the function
fn as type typ, which will be a pointer type for a function
(e.g. (int -> int) typ), and which will be live as long as fn
and ee are. Caution: this function finalizes, i.e. forces code
generation, all loaded modules. Further modifications to the
modules will not have any effect.