123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262 |
- #pragma once
- #ifdef __GNUC__
- #pragma GCC diagnostic push
- #pragma GCC diagnostic ignored "-Wunused-parameter"
- #endif
- /*===----------- llvm-c/LLJIT.h - OrcV2 LLJIT C bindings --------*- C++ -*-===*\
- |* *|
- |* Part of the LLVM Project, under the Apache License v2.0 with LLVM *|
- |* Exceptions. *|
- |* See https://llvm.org/LICENSE.txt for license information. *|
- |* SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception *|
- |* *|
- |*===----------------------------------------------------------------------===*|
- |* *|
- |* This header declares the C interface to the LLJIT class in *|
- |* libLLVMOrcJIT.a, which provides a simple MCJIT-like ORC JIT. *|
- |* *|
- |* Many exotic languages can interoperate with C code but have a harder time *|
- |* with C++ due to name mangling. So in addition to C, this interface enables *|
- |* tools written in such languages. *|
- |* *|
- |* Note: This interface is experimental. It is *NOT* stable, and may be *|
- |* changed without warning. Only C API usage documentation is *|
- |* provided. See the C++ documentation for all higher level ORC API *|
- |* details. *|
- |* *|
- \*===----------------------------------------------------------------------===*/
- #ifndef LLVM_C_LLJIT_H
- #define LLVM_C_LLJIT_H
- #include "llvm-c/Error.h"
- #include "llvm-c/Orc.h"
- #include "llvm-c/TargetMachine.h"
- #include "llvm-c/Types.h"
- LLVM_C_EXTERN_C_BEGIN
- /**
- * @defgroup LLVMCExecutionEngineLLJIT LLJIT
- * @ingroup LLVMCExecutionEngine
- *
- * @{
- */
- /**
- * A function for constructing an ObjectLinkingLayer instance to be used
- * by an LLJIT instance.
- *
- * Clients can call LLVMOrcLLJITBuilderSetObjectLinkingLayerCreator to
- * set the creator function to use when constructing an LLJIT instance.
- * This can be used to override the default linking layer implementation
- * that would otherwise be chosen by LLJITBuilder.
- *
- * Object linking layers returned by this function will become owned by the
- * LLJIT instance. The client is not responsible for managing their lifetimes
- * after the function returns.
- */
- typedef LLVMOrcObjectLayerRef (
- *LLVMOrcLLJITBuilderObjectLinkingLayerCreatorFunction)(
- void *Ctx, LLVMOrcExecutionSessionRef ES, const char *Triple);
- /**
- * A reference to an orc::LLJITBuilder instance.
- */
- typedef struct LLVMOrcOpaqueLLJITBuilder *LLVMOrcLLJITBuilderRef;
- /**
- * A reference to an orc::LLJIT instance.
- */
- typedef struct LLVMOrcOpaqueLLJIT *LLVMOrcLLJITRef;
- /**
- * Create an LLVMOrcLLJITBuilder.
- *
- * The client owns the resulting LLJITBuilder and should dispose of it using
- * LLVMOrcDisposeLLJITBuilder once they are done with it.
- */
- LLVMOrcLLJITBuilderRef LLVMOrcCreateLLJITBuilder(void);
- /**
- * Dispose of an LLVMOrcLLJITBuilderRef. This should only be called if ownership
- * has not been passed to LLVMOrcCreateLLJIT (e.g. because some error prevented
- * that function from being called).
- */
- void LLVMOrcDisposeLLJITBuilder(LLVMOrcLLJITBuilderRef Builder);
- /**
- * Set the JITTargetMachineBuilder to be used when constructing the LLJIT
- * instance. Calling this function is optional: if it is not called then the
- * LLJITBuilder will use JITTargeTMachineBuilder::detectHost to construct a
- * JITTargetMachineBuilder.
- *
- * This function takes ownership of the JTMB argument: clients should not
- * dispose of the JITTargetMachineBuilder after calling this function.
- */
- void LLVMOrcLLJITBuilderSetJITTargetMachineBuilder(
- LLVMOrcLLJITBuilderRef Builder, LLVMOrcJITTargetMachineBuilderRef JTMB);
- /**
- * Set an ObjectLinkingLayer creator function for this LLJIT instance.
- */
- void LLVMOrcLLJITBuilderSetObjectLinkingLayerCreator(
- LLVMOrcLLJITBuilderRef Builder,
- LLVMOrcLLJITBuilderObjectLinkingLayerCreatorFunction F, void *Ctx);
- /**
- * Create an LLJIT instance from an LLJITBuilder.
- *
- * This operation takes ownership of the Builder argument: clients should not
- * dispose of the builder after calling this function (even if the function
- * returns an error). If a null Builder argument is provided then a
- * default-constructed LLJITBuilder will be used.
- *
- * On success the resulting LLJIT instance is uniquely owned by the client and
- * automatically manages the memory of all JIT'd code and all modules that are
- * transferred to it (e.g. via LLVMOrcLLJITAddLLVMIRModule). Disposing of the
- * LLJIT instance will free all memory managed by the JIT, including JIT'd code
- * and not-yet compiled modules.
- */
- LLVMErrorRef LLVMOrcCreateLLJIT(LLVMOrcLLJITRef *Result,
- LLVMOrcLLJITBuilderRef Builder);
- /**
- * Dispose of an LLJIT instance.
- */
- LLVMErrorRef LLVMOrcDisposeLLJIT(LLVMOrcLLJITRef J);
- /**
- * Get a reference to the ExecutionSession for this LLJIT instance.
- *
- * The ExecutionSession is owned by the LLJIT instance. The client is not
- * responsible for managing its memory.
- */
- LLVMOrcExecutionSessionRef LLVMOrcLLJITGetExecutionSession(LLVMOrcLLJITRef J);
- /**
- * Return a reference to the Main JITDylib.
- *
- * The JITDylib is owned by the LLJIT instance. The client is not responsible
- * for managing its memory.
- */
- LLVMOrcJITDylibRef LLVMOrcLLJITGetMainJITDylib(LLVMOrcLLJITRef J);
- /**
- * Return the target triple for this LLJIT instance. This string is owned by
- * the LLJIT instance and should not be freed by the client.
- */
- const char *LLVMOrcLLJITGetTripleString(LLVMOrcLLJITRef J);
- /**
- * Returns the global prefix character according to the LLJIT's DataLayout.
- */
- char LLVMOrcLLJITGetGlobalPrefix(LLVMOrcLLJITRef J);
- /**
- * Mangles the given string according to the LLJIT instance's DataLayout, then
- * interns the result in the SymbolStringPool and returns a reference to the
- * pool entry. Clients should call LLVMOrcReleaseSymbolStringPoolEntry to
- * decrement the ref-count on the pool entry once they are finished with this
- * value.
- */
- LLVMOrcSymbolStringPoolEntryRef
- LLVMOrcLLJITMangleAndIntern(LLVMOrcLLJITRef J, const char *UnmangledName);
- /**
- * Add a buffer representing an object file to the given JITDylib in the given
- * LLJIT instance. This operation transfers ownership of the buffer to the
- * LLJIT instance. The buffer should not be disposed of or referenced once this
- * function returns.
- *
- * Resources associated with the given object will be tracked by the given
- * JITDylib's default resource tracker.
- */
- LLVMErrorRef LLVMOrcLLJITAddObjectFile(LLVMOrcLLJITRef J, LLVMOrcJITDylibRef JD,
- LLVMMemoryBufferRef ObjBuffer);
- /**
- * Add a buffer representing an object file to the given ResourceTracker's
- * JITDylib in the given LLJIT instance. This operation transfers ownership of
- * the buffer to the LLJIT instance. The buffer should not be disposed of or
- * referenced once this function returns.
- *
- * Resources associated with the given object will be tracked by ResourceTracker
- * RT.
- */
- LLVMErrorRef LLVMOrcLLJITAddObjectFileWithRT(LLVMOrcLLJITRef J,
- LLVMOrcResourceTrackerRef RT,
- LLVMMemoryBufferRef ObjBuffer);
- /**
- * Add an IR module to the given JITDylib in the given LLJIT instance. This
- * operation transfers ownership of the TSM argument to the LLJIT instance.
- * The TSM argument should not be disposed of or referenced once this
- * function returns.
- *
- * Resources associated with the given Module will be tracked by the given
- * JITDylib's default resource tracker.
- */
- LLVMErrorRef LLVMOrcLLJITAddLLVMIRModule(LLVMOrcLLJITRef J,
- LLVMOrcJITDylibRef JD,
- LLVMOrcThreadSafeModuleRef TSM);
- /**
- * Add an IR module to the given ResourceTracker's JITDylib in the given LLJIT
- * instance. This operation transfers ownership of the TSM argument to the LLJIT
- * instance. The TSM argument should not be disposed of or referenced once this
- * function returns.
- *
- * Resources associated with the given Module will be tracked by ResourceTracker
- * RT.
- */
- LLVMErrorRef LLVMOrcLLJITAddLLVMIRModuleWithRT(LLVMOrcLLJITRef J,
- LLVMOrcResourceTrackerRef JD,
- LLVMOrcThreadSafeModuleRef TSM);
- /**
- * Look up the given symbol in the main JITDylib of the given LLJIT instance.
- *
- * This operation does not take ownership of the Name argument.
- */
- LLVMErrorRef LLVMOrcLLJITLookup(LLVMOrcLLJITRef J,
- LLVMOrcExecutorAddress *Result,
- const char *Name);
- /**
- * Returns a non-owning reference to the LLJIT instance's object linking layer.
- */
- LLVMOrcObjectLayerRef LLVMOrcLLJITGetObjLinkingLayer(LLVMOrcLLJITRef J);
- /**
- * Returns a non-owning reference to the LLJIT instance's object linking layer.
- */
- LLVMOrcObjectTransformLayerRef
- LLVMOrcLLJITGetObjTransformLayer(LLVMOrcLLJITRef J);
- /**
- * Returns a non-owning reference to the LLJIT instance's IR transform layer.
- */
- LLVMOrcIRTransformLayerRef LLVMOrcLLJITGetIRTransformLayer(LLVMOrcLLJITRef J);
- /**
- * Get the LLJIT instance's default data layout string.
- *
- * This string is owned by the LLJIT instance and does not need to be freed
- * by the caller.
- */
- const char *LLVMOrcLLJITGetDataLayoutStr(LLVMOrcLLJITRef J);
- /**
- * @}
- */
- LLVM_C_EXTERN_C_END
- #endif /* LLVM_C_LLJIT_H */
- #ifdef __GNUC__
- #pragma GCC diagnostic pop
- #endif
|