package llvm

  1. Overview
  2. Docs

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 -> bool

initialize () 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 = {
  1. opt_level : int;
  2. code_model : Llvm_target.CodeModel.t;
  3. no_framepointer_elim : bool;
  4. enable_fast_isel : bool;
}

MCJIT compiler options. See llvm::TargetOptions.

val default_compiler_options : llcompileroptions

Default MCJIT compiler options: { opt_level = 0; code_model = CodeModel.JIT_default; no_framepointer_elim = false; enable_fast_isel = false }

create 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 initialize before using this function.

See the function llvm::EngineBuilder::create.

val dispose : llexecutionengine -> unit

dispose ee releases the memory used by the execution engine and must be invoked to avoid memory leaks.

val add_module : Llvm.llmodule -> llexecutionengine -> unit

add_module m ee adds the module m to the execution engine ee.

val remove_module : Llvm.llmodule -> llexecutionengine -> unit

remove_module m ee removes the module m from the execution engine ee. Raises Error msg if an error occurs.

val run_static_ctors : llexecutionengine -> unit

run_static_ctors ee executes the static constructors of each module in the execution engine ee.

val run_static_dtors : llexecutionengine -> unit

run_static_dtors ee executes the static destructors of each module in the execution engine ee.

data_layout ee is the data layout of the execution engine ee.

val add_global_mapping : Llvm.llvalue -> 'a Ctypes.ptr -> llexecutionengine -> unit

add_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 -> 'a

get_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 -> 'a

get_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.

OCaml

Innovation. Community. Security.