1/*===-- llvm-c/ExecutionEngine.h - ExecutionEngine Lib C Iface --*- C++ -*-===*\ 2|* *| 3|* The LLVM Compiler Infrastructure *| 4|* *| 5|* This file is distributed under the University of Illinois Open Source *| 6|* License. See LICENSE.TXT for details. *| 7|* *| 8|*===----------------------------------------------------------------------===*| 9|* *| 10|* This header declares the C interface to libLLVMExecutionEngine.o, which *| 11|* implements various analyses of the LLVM IR. *| 12|* *| 13|* Many exotic languages can interoperate with C code but have a harder time *| 14|* with C++ due to name mangling. So in addition to C, this interface enables *| 15|* tools written in such languages. *| 16|* *| 17\*===----------------------------------------------------------------------===*/ 18 19#ifndef LLVM_C_EXECUTIONENGINE_H 20#define LLVM_C_EXECUTIONENGINE_H 21 22#include "llvm-c/Core.h" 23#include "llvm-c/Target.h" 24 25#ifdef __cplusplus 26extern "C" { 27#endif 28 29/** 30 * @defgroup LLVMCExecutionEngine Execution Engine 31 * @ingroup LLVMC 32 * 33 * @{ 34 */ 35 36void LLVMLinkInJIT(void); 37void LLVMLinkInInterpreter(void); 38 39typedef struct LLVMOpaqueGenericValue *LLVMGenericValueRef; 40typedef struct LLVMOpaqueExecutionEngine *LLVMExecutionEngineRef; 41 42/*===-- Operations on generic values --------------------------------------===*/ 43 44LLVMGenericValueRef LLVMCreateGenericValueOfInt(LLVMTypeRef Ty, 45 unsigned long long N, 46 LLVMBool IsSigned); 47 48LLVMGenericValueRef LLVMCreateGenericValueOfPointer(void *P); 49 50LLVMGenericValueRef LLVMCreateGenericValueOfFloat(LLVMTypeRef Ty, double N); 51 52unsigned LLVMGenericValueIntWidth(LLVMGenericValueRef GenValRef); 53 54unsigned long long LLVMGenericValueToInt(LLVMGenericValueRef GenVal, 55 LLVMBool IsSigned); 56 57void *LLVMGenericValueToPointer(LLVMGenericValueRef GenVal); 58 59double LLVMGenericValueToFloat(LLVMTypeRef TyRef, LLVMGenericValueRef GenVal); 60 61void LLVMDisposeGenericValue(LLVMGenericValueRef GenVal); 62 63/*===-- Operations on execution engines -----------------------------------===*/ 64 65LLVMBool LLVMCreateExecutionEngineForModule(LLVMExecutionEngineRef *OutEE, 66 LLVMModuleRef M, 67 char **OutError); 68 69LLVMBool LLVMCreateInterpreterForModule(LLVMExecutionEngineRef *OutInterp, 70 LLVMModuleRef M, 71 char **OutError); 72 73LLVMBool LLVMCreateJITCompilerForModule(LLVMExecutionEngineRef *OutJIT, 74 LLVMModuleRef M, 75 unsigned OptLevel, 76 char **OutError); 77 78/** Deprecated: Use LLVMCreateExecutionEngineForModule instead. */ 79LLVMBool LLVMCreateExecutionEngine(LLVMExecutionEngineRef *OutEE, 80 LLVMModuleProviderRef MP, 81 char **OutError); 82 83/** Deprecated: Use LLVMCreateInterpreterForModule instead. */ 84LLVMBool LLVMCreateInterpreter(LLVMExecutionEngineRef *OutInterp, 85 LLVMModuleProviderRef MP, 86 char **OutError); 87 88/** Deprecated: Use LLVMCreateJITCompilerForModule instead. */ 89LLVMBool LLVMCreateJITCompiler(LLVMExecutionEngineRef *OutJIT, 90 LLVMModuleProviderRef MP, 91 unsigned OptLevel, 92 char **OutError); 93 94void LLVMDisposeExecutionEngine(LLVMExecutionEngineRef EE); 95 96void LLVMRunStaticConstructors(LLVMExecutionEngineRef EE); 97 98void LLVMRunStaticDestructors(LLVMExecutionEngineRef EE); 99 100int LLVMRunFunctionAsMain(LLVMExecutionEngineRef EE, LLVMValueRef F, 101 unsigned ArgC, const char * const *ArgV, 102 const char * const *EnvP); 103 104LLVMGenericValueRef LLVMRunFunction(LLVMExecutionEngineRef EE, LLVMValueRef F, 105 unsigned NumArgs, 106 LLVMGenericValueRef *Args); 107 108void LLVMFreeMachineCodeForFunction(LLVMExecutionEngineRef EE, LLVMValueRef F); 109 110void LLVMAddModule(LLVMExecutionEngineRef EE, LLVMModuleRef M); 111 112/** Deprecated: Use LLVMAddModule instead. */ 113void LLVMAddModuleProvider(LLVMExecutionEngineRef EE, LLVMModuleProviderRef MP); 114 115LLVMBool LLVMRemoveModule(LLVMExecutionEngineRef EE, LLVMModuleRef M, 116 LLVMModuleRef *OutMod, char **OutError); 117 118/** Deprecated: Use LLVMRemoveModule instead. */ 119LLVMBool LLVMRemoveModuleProvider(LLVMExecutionEngineRef EE, 120 LLVMModuleProviderRef MP, 121 LLVMModuleRef *OutMod, char **OutError); 122 123LLVMBool LLVMFindFunction(LLVMExecutionEngineRef EE, const char *Name, 124 LLVMValueRef *OutFn); 125 126void *LLVMRecompileAndRelinkFunction(LLVMExecutionEngineRef EE, LLVMValueRef Fn); 127 128LLVMTargetDataRef LLVMGetExecutionEngineTargetData(LLVMExecutionEngineRef EE); 129 130void LLVMAddGlobalMapping(LLVMExecutionEngineRef EE, LLVMValueRef Global, 131 void* Addr); 132 133void *LLVMGetPointerToGlobal(LLVMExecutionEngineRef EE, LLVMValueRef Global); 134 135/** 136 * @} 137 */ 138 139#ifdef __cplusplus 140} 141 142namespace llvm { 143 struct GenericValue; 144 class ExecutionEngine; 145 146 #define DEFINE_SIMPLE_CONVERSION_FUNCTIONS(ty, ref) \ 147 inline ty *unwrap(ref P) { \ 148 return reinterpret_cast<ty*>(P); \ 149 } \ 150 \ 151 inline ref wrap(const ty *P) { \ 152 return reinterpret_cast<ref>(const_cast<ty*>(P)); \ 153 } 154 155 DEFINE_SIMPLE_CONVERSION_FUNCTIONS(GenericValue, LLVMGenericValueRef ) 156 DEFINE_SIMPLE_CONVERSION_FUNCTIONS(ExecutionEngine, LLVMExecutionEngineRef) 157 158 #undef DEFINE_SIMPLE_CONVERSION_FUNCTIONS 159} 160 161#endif /* defined(__cplusplus) */ 162 163#endif 164