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 LLVMBool 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 LLVMBool 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 LLVMBool LLVMCreateExecutionEngineForModule(LLVMExecutionEngineRef *OutEE, 59 LLVMModuleRef M, 60 char **OutError); 61 62 LLVMBool LLVMCreateInterpreterForModule(LLVMExecutionEngineRef *OutInterp, 63 LLVMModuleRef M, 64 char **OutError); 65 66 LLVMBool LLVMCreateJITCompilerForModule(LLVMExecutionEngineRef *OutJIT, 67 LLVMModuleRef M, 68 unsigned OptLevel, 69 char **OutError); 70 71 /** Deprecated: Use LLVMCreateExecutionEngineForModule instead. */ 72 LLVMBool LLVMCreateExecutionEngine(LLVMExecutionEngineRef *OutEE, 73 LLVMModuleProviderRef MP, 74 char **OutError); 75 76 /** Deprecated: Use LLVMCreateInterpreterForModule instead. */ 77 LLVMBool LLVMCreateInterpreter(LLVMExecutionEngineRef *OutInterp, 78 LLVMModuleProviderRef MP, 79 char **OutError); 80 81 /** Deprecated: Use LLVMCreateJITCompilerForModule instead. */ 82 LLVMBool LLVMCreateJITCompiler(LLVMExecutionEngineRef *OutJIT, 83 LLVMModuleProviderRef MP, 84 unsigned OptLevel, 85 char **OutError); 86 87 void LLVMDisposeExecutionEngine(LLVMExecutionEngineRef EE); 88 89 void LLVMRunStaticConstructors(LLVMExecutionEngineRef EE); 90 91 void LLVMRunStaticDestructors(LLVMExecutionEngineRef EE); 92 93 int LLVMRunFunctionAsMain(LLVMExecutionEngineRef EE, LLVMValueRef F, 94 unsigned ArgC, const char * const *ArgV, 95 const char * const *EnvP); 96 97 LLVMGenericValueRef LLVMRunFunction(LLVMExecutionEngineRef EE, LLVMValueRef F, 98 unsigned NumArgs, 99 LLVMGenericValueRef *Args); 100 101 void LLVMFreeMachineCodeForFunction(LLVMExecutionEngineRef EE, LLVMValueRef F); 102 103 void LLVMAddModule(LLVMExecutionEngineRef EE, LLVMModuleRef M); 104 105 /** Deprecated: Use LLVMAddModule instead. */ 106 void LLVMAddModuleProvider(LLVMExecutionEngineRef EE, LLVMModuleProviderRef MP); 107 108 LLVMBool LLVMRemoveModule(LLVMExecutionEngineRef EE, LLVMModuleRef M, 109 LLVMModuleRef *OutMod, char **OutError); 110 111 /** Deprecated: Use LLVMRemoveModule instead. */ 112 LLVMBool LLVMRemoveModuleProvider(LLVMExecutionEngineRef EE, 113 LLVMModuleProviderRef MP, 114 LLVMModuleRef *OutMod, char **OutError); 115 116 LLVMBool LLVMFindFunction(LLVMExecutionEngineRef EE, const char *Name, 117 LLVMValueRef *OutFn); 118 119 void *LLVMRecompileAndRelinkFunction(LLVMExecutionEngineRef EE, LLVMValueRef Fn); 120 121 LLVMTargetDataRef LLVMGetExecutionEngineTargetData(LLVMExecutionEngineRef EE); 122 123 void LLVMAddGlobalMapping(LLVMExecutionEngineRef EE, LLVMValueRef Global, 124 void* Addr); 125 126 void *LLVMGetPointerToGlobal(LLVMExecutionEngineRef EE, LLVMValueRef Global); 127 128 #ifdef __cplusplus 129 } 130 131 namespace llvm { 132 struct GenericValue; 133 class ExecutionEngine; 134 135 #define DEFINE_SIMPLE_CONVERSION_FUNCTIONS(ty, ref) \ 136 inline ty *unwrap(ref P) { \ 137 return reinterpret_cast<ty*>(P); \ 138 } \ 139 \ 140 inline ref wrap(const ty *P) { \ 141 return reinterpret_cast<ref>(const_cast<ty*>(P)); \ 142 } 143 144 DEFINE_SIMPLE_CONVERSION_FUNCTIONS(GenericValue, LLVMGenericValueRef ) 145 DEFINE_SIMPLE_CONVERSION_FUNCTIONS(ExecutionEngine, LLVMExecutionEngineRef) 146 147 #undef DEFINE_SIMPLE_CONVERSION_FUNCTIONS 148 } 149 150 #endif /* defined(__cplusplus) */ 151 152 #endif 153