mirror of
https://github.com/Ed94/Odin.git
synced 2026-08-02 20:58:15 +00:00
Update to LLVM-17
This commit is contained in:
@@ -0,0 +1,251 @@
|
||||
/*===----------- 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 */
|
||||
Reference in New Issue
Block a user