ExecutionEngine.h revision 212904
1193323Sed/*===-- llvm-c/ExecutionEngine.h - ExecutionEngine Lib C Iface --*- C++ -*-===*\ 2193323Sed|* *| 3193323Sed|* The LLVM Compiler Infrastructure *| 4193323Sed|* *| 5193323Sed|* This file is distributed under the University of Illinois Open Source *| 6193323Sed|* License. See LICENSE.TXT for details. *| 7193323Sed|* *| 8193323Sed|*===----------------------------------------------------------------------===*| 9193323Sed|* *| 10193323Sed|* This header declares the C interface to libLLVMExecutionEngine.o, which *| 11193323Sed|* implements various analyses of the LLVM IR. *| 12193323Sed|* *| 13193323Sed|* Many exotic languages can interoperate with C code but have a harder time *| 14193323Sed|* with C++ due to name mangling. So in addition to C, this interface enables *| 15193323Sed|* tools written in such languages. *| 16193323Sed|* *| 17193323Sed\*===----------------------------------------------------------------------===*/ 18193323Sed 19193323Sed#ifndef LLVM_C_EXECUTIONENGINE_H 20193323Sed#define LLVM_C_EXECUTIONENGINE_H 21193323Sed 22193323Sed#include "llvm-c/Core.h" 23193323Sed#include "llvm-c/Target.h" 24193323Sed 25193323Sed#ifdef __cplusplus 26193323Sedextern "C" { 27193323Sed#endif 28193323Sed 29195098Sedvoid LLVMLinkInJIT(void); 30195098Sedvoid LLVMLinkInInterpreter(void); 31195098Sed 32193323Sedtypedef struct LLVMOpaqueGenericValue *LLVMGenericValueRef; 33193323Sedtypedef struct LLVMOpaqueExecutionEngine *LLVMExecutionEngineRef; 34193323Sed 35193323Sed/*===-- Operations on generic values --------------------------------------===*/ 36193323Sed 37193323SedLLVMGenericValueRef LLVMCreateGenericValueOfInt(LLVMTypeRef Ty, 38193323Sed unsigned long long N, 39202375Srdivacky LLVMBool IsSigned); 40193323Sed 41193323SedLLVMGenericValueRef LLVMCreateGenericValueOfPointer(void *P); 42193323Sed 43193323SedLLVMGenericValueRef LLVMCreateGenericValueOfFloat(LLVMTypeRef Ty, double N); 44193323Sed 45193323Sedunsigned LLVMGenericValueIntWidth(LLVMGenericValueRef GenValRef); 46193323Sed 47193323Sedunsigned long long LLVMGenericValueToInt(LLVMGenericValueRef GenVal, 48202375Srdivacky LLVMBool IsSigned); 49193323Sed 50193323Sedvoid *LLVMGenericValueToPointer(LLVMGenericValueRef GenVal); 51193323Sed 52193323Seddouble LLVMGenericValueToFloat(LLVMTypeRef TyRef, LLVMGenericValueRef GenVal); 53193323Sed 54193323Sedvoid LLVMDisposeGenericValue(LLVMGenericValueRef GenVal); 55193323Sed 56193323Sed/*===-- Operations on execution engines -----------------------------------===*/ 57193323Sed 58204642SrdivackyLLVMBool LLVMCreateExecutionEngineForModule(LLVMExecutionEngineRef *OutEE, 59204642Srdivacky LLVMModuleRef M, 60204642Srdivacky char **OutError); 61204642Srdivacky 62204642SrdivackyLLVMBool LLVMCreateInterpreterForModule(LLVMExecutionEngineRef *OutInterp, 63204642Srdivacky LLVMModuleRef M, 64204642Srdivacky char **OutError); 65204642Srdivacky 66204642SrdivackyLLVMBool LLVMCreateJITCompilerForModule(LLVMExecutionEngineRef *OutJIT, 67204642Srdivacky LLVMModuleRef M, 68204642Srdivacky unsigned OptLevel, 69204642Srdivacky char **OutError); 70204642Srdivacky 71204642Srdivacky/** Deprecated: Use LLVMCreateExecutionEngineForModule instead. */ 72202375SrdivackyLLVMBool LLVMCreateExecutionEngine(LLVMExecutionEngineRef *OutEE, 73202375Srdivacky LLVMModuleProviderRef MP, 74202375Srdivacky char **OutError); 75193323Sed 76204642Srdivacky/** Deprecated: Use LLVMCreateInterpreterForModule instead. */ 77202375SrdivackyLLVMBool LLVMCreateInterpreter(LLVMExecutionEngineRef *OutInterp, 78202375Srdivacky LLVMModuleProviderRef MP, 79202375Srdivacky char **OutError); 80193323Sed 81204642Srdivacky/** Deprecated: Use LLVMCreateJITCompilerForModule instead. */ 82202375SrdivackyLLVMBool LLVMCreateJITCompiler(LLVMExecutionEngineRef *OutJIT, 83202375Srdivacky LLVMModuleProviderRef MP, 84202375Srdivacky unsigned OptLevel, 85202375Srdivacky char **OutError); 86193323Sed 87193323Sedvoid LLVMDisposeExecutionEngine(LLVMExecutionEngineRef EE); 88193323Sed 89193323Sedvoid LLVMRunStaticConstructors(LLVMExecutionEngineRef EE); 90193323Sed 91193323Sedvoid LLVMRunStaticDestructors(LLVMExecutionEngineRef EE); 92193323Sed 93193323Sedint LLVMRunFunctionAsMain(LLVMExecutionEngineRef EE, LLVMValueRef F, 94193323Sed unsigned ArgC, const char * const *ArgV, 95193323Sed const char * const *EnvP); 96193323Sed 97193323SedLLVMGenericValueRef LLVMRunFunction(LLVMExecutionEngineRef EE, LLVMValueRef F, 98193323Sed unsigned NumArgs, 99193323Sed LLVMGenericValueRef *Args); 100193323Sed 101193323Sedvoid LLVMFreeMachineCodeForFunction(LLVMExecutionEngineRef EE, LLVMValueRef F); 102193323Sed 103204642Srdivackyvoid LLVMAddModule(LLVMExecutionEngineRef EE, LLVMModuleRef M); 104204642Srdivacky 105204642Srdivacky/** Deprecated: Use LLVMAddModule instead. */ 106193323Sedvoid LLVMAddModuleProvider(LLVMExecutionEngineRef EE, LLVMModuleProviderRef MP); 107193323Sed 108204642SrdivackyLLVMBool LLVMRemoveModule(LLVMExecutionEngineRef EE, LLVMModuleRef M, 109204642Srdivacky LLVMModuleRef *OutMod, char **OutError); 110204642Srdivacky 111204642Srdivacky/** Deprecated: Use LLVMRemoveModule instead. */ 112202375SrdivackyLLVMBool LLVMRemoveModuleProvider(LLVMExecutionEngineRef EE, 113202375Srdivacky LLVMModuleProviderRef MP, 114202375Srdivacky LLVMModuleRef *OutMod, char **OutError); 115193323Sed 116202375SrdivackyLLVMBool LLVMFindFunction(LLVMExecutionEngineRef EE, const char *Name, 117202375Srdivacky LLVMValueRef *OutFn); 118193323Sed 119212904Sdimvoid *LLVMRecompileAndRelinkFunction(LLVMExecutionEngineRef EE, LLVMValueRef Fn); 120212904Sdim 121193323SedLLVMTargetDataRef LLVMGetExecutionEngineTargetData(LLVMExecutionEngineRef EE); 122193323Sed 123193323Sedvoid LLVMAddGlobalMapping(LLVMExecutionEngineRef EE, LLVMValueRef Global, 124193323Sed void* Addr); 125193323Sed 126193323Sedvoid *LLVMGetPointerToGlobal(LLVMExecutionEngineRef EE, LLVMValueRef Global); 127193323Sed 128193323Sed#ifdef __cplusplus 129193323Sed} 130193323Sed 131193323Sednamespace llvm { 132198090Srdivacky struct GenericValue; 133193323Sed class ExecutionEngine; 134193323Sed 135193323Sed #define DEFINE_SIMPLE_CONVERSION_FUNCTIONS(ty, ref) \ 136193323Sed inline ty *unwrap(ref P) { \ 137193323Sed return reinterpret_cast<ty*>(P); \ 138193323Sed } \ 139193323Sed \ 140193323Sed inline ref wrap(const ty *P) { \ 141193323Sed return reinterpret_cast<ref>(const_cast<ty*>(P)); \ 142193323Sed } 143193323Sed 144193323Sed DEFINE_SIMPLE_CONVERSION_FUNCTIONS(GenericValue, LLVMGenericValueRef ) 145193323Sed DEFINE_SIMPLE_CONVERSION_FUNCTIONS(ExecutionEngine, LLVMExecutionEngineRef) 146193323Sed 147193323Sed #undef DEFINE_SIMPLE_CONVERSION_FUNCTIONS 148193323Sed} 149193323Sed 150193323Sed#endif /* defined(__cplusplus) */ 151193323Sed 152193323Sed#endif 153