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 26 extern "C" { 27 #endif 28 29 void LLVMLinkInJIT(void); 30 void LLVMLinkInInterpreter(void); 31 32 typedef struct LLVMOpaqueGenericValue *LLVMGenericValueRef; 33 typedef struct LLVMOpaqueExecutionEngine *LLVMExecutionEngineRef; 34 35 /*===-- Operations on generic values --------------------------------------===*/ 36 37 LLVMGenericValueRef LLVMCreateGenericValueOfInt(LLVMTypeRef Ty, 38 unsigned long long N, 39 int IsSigned); 40 41 LLVMGenericValueRef LLVMCreateGenericValueOfPointer(void *P); 42 43 LLVMGenericValueRef LLVMCreateGenericValueOfFloat(LLVMTypeRef Ty, double N); 44 45 unsigned LLVMGenericValueIntWidth(LLVMGenericValueRef GenValRef); 46 47 unsigned long long LLVMGenericValueToInt(LLVMGenericValueRef GenVal, 48 int IsSigned); 49 50 void *LLVMGenericValueToPointer(LLVMGenericValueRef GenVal); 51 52 double LLVMGenericValueToFloat(LLVMTypeRef TyRef, LLVMGenericValueRef GenVal); 53 54 void LLVMDisposeGenericValue(LLVMGenericValueRef GenVal); 55 56 /*===-- Operations on execution engines -----------------------------------===*/ 57 58 int LLVMCreateExecutionEngine(LLVMExecutionEngineRef *OutEE, 59 LLVMModuleProviderRef MP, 60 char **OutError); 61 62 int LLVMCreateInterpreter(LLVMExecutionEngineRef *OutInterp, 63 LLVMModuleProviderRef MP, 64 char **OutError); 65 66 int LLVMCreateJITCompiler(LLVMExecutionEngineRef *OutJIT, 67 LLVMModuleProviderRef MP, 68 unsigned OptLevel, 69 char **OutError); 70 71 void LLVMDisposeExecutionEngine(LLVMExecutionEngineRef EE); 72 73 void LLVMRunStaticConstructors(LLVMExecutionEngineRef EE); 74 75 void LLVMRunStaticDestructors(LLVMExecutionEngineRef EE); 76 77 int LLVMRunFunctionAsMain(LLVMExecutionEngineRef EE, LLVMValueRef F, 78 unsigned ArgC, const char * const *ArgV, 79 const char * const *EnvP); 80 81 LLVMGenericValueRef LLVMRunFunction(LLVMExecutionEngineRef EE, LLVMValueRef F, 82 unsigned NumArgs, 83 LLVMGenericValueRef *Args); 84 85 void LLVMFreeMachineCodeForFunction(LLVMExecutionEngineRef EE, LLVMValueRef F); 86 87 void LLVMAddModuleProvider(LLVMExecutionEngineRef EE, LLVMModuleProviderRef MP); 88 89 int LLVMRemoveModuleProvider(LLVMExecutionEngineRef EE, 90 LLVMModuleProviderRef MP, 91 LLVMModuleRef *OutMod, char **OutError); 92 93 int LLVMFindFunction(LLVMExecutionEngineRef EE, const char *Name, 94 LLVMValueRef *OutFn); 95 96 LLVMTargetDataRef LLVMGetExecutionEngineTargetData(LLVMExecutionEngineRef EE); 97 98 void LLVMAddGlobalMapping(LLVMExecutionEngineRef EE, LLVMValueRef Global, 99 void* Addr); 100 101 void *LLVMGetPointerToGlobal(LLVMExecutionEngineRef EE, LLVMValueRef Global); 102 103 #ifdef __cplusplus 104 } 105 106 namespace llvm { 107 struct GenericValue; 108 class ExecutionEngine; 109 110 #define DEFINE_SIMPLE_CONVERSION_FUNCTIONS(ty, ref) \ 111 inline ty *unwrap(ref P) { \ 112 return reinterpret_cast<ty*>(P); \ 113 } \ 114 \ 115 inline ref wrap(const ty *P) { \ 116 return reinterpret_cast<ref>(const_cast<ty*>(P)); \ 117 } 118 119 DEFINE_SIMPLE_CONVERSION_FUNCTIONS(GenericValue, LLVMGenericValueRef ) 120 DEFINE_SIMPLE_CONVERSION_FUNCTIONS(ExecutionEngine, LLVMExecutionEngineRef) 121 122 #undef DEFINE_SIMPLE_CONVERSION_FUNCTIONS 123 } 124 125 #endif /* defined(__cplusplus) */ 126 127 #endif 128