ExecutionEngine.h revision 7c1483bc6f009318ce66c4d37d1ba930e01a6d13
12e855e68d861224c9b61e2bc9cecad1536b1534bGordon Henriksen/*===-- llvm-c/ExecutionEngine.h - ExecutionEngine Lib C Iface --*- C++ -*-===*\ 22e855e68d861224c9b61e2bc9cecad1536b1534bGordon Henriksen|* *| 32e855e68d861224c9b61e2bc9cecad1536b1534bGordon Henriksen|* The LLVM Compiler Infrastructure *| 42e855e68d861224c9b61e2bc9cecad1536b1534bGordon Henriksen|* *| 57ed47a13356daed2a34cd2209a31f92552e3bdd8Chris Lattner|* This file is distributed under the University of Illinois Open Source *| 67ed47a13356daed2a34cd2209a31f92552e3bdd8Chris Lattner|* License. See LICENSE.TXT for details. *| 72e855e68d861224c9b61e2bc9cecad1536b1534bGordon Henriksen|* *| 82e855e68d861224c9b61e2bc9cecad1536b1534bGordon Henriksen|*===----------------------------------------------------------------------===*| 92e855e68d861224c9b61e2bc9cecad1536b1534bGordon Henriksen|* *| 102e855e68d861224c9b61e2bc9cecad1536b1534bGordon Henriksen|* This header declares the C interface to libLLVMExecutionEngine.o, which *| 112e855e68d861224c9b61e2bc9cecad1536b1534bGordon Henriksen|* implements various analyses of the LLVM IR. *| 122e855e68d861224c9b61e2bc9cecad1536b1534bGordon Henriksen|* *| 132e855e68d861224c9b61e2bc9cecad1536b1534bGordon Henriksen|* Many exotic languages can interoperate with C code but have a harder time *| 142e855e68d861224c9b61e2bc9cecad1536b1534bGordon Henriksen|* with C++ due to name mangling. So in addition to C, this interface enables *| 152e855e68d861224c9b61e2bc9cecad1536b1534bGordon Henriksen|* tools written in such languages. *| 162e855e68d861224c9b61e2bc9cecad1536b1534bGordon Henriksen|* *| 172e855e68d861224c9b61e2bc9cecad1536b1534bGordon Henriksen\*===----------------------------------------------------------------------===*/ 182e855e68d861224c9b61e2bc9cecad1536b1534bGordon Henriksen 192e855e68d861224c9b61e2bc9cecad1536b1534bGordon Henriksen#ifndef LLVM_C_EXECUTIONENGINE_H 202e855e68d861224c9b61e2bc9cecad1536b1534bGordon Henriksen#define LLVM_C_EXECUTIONENGINE_H 212e855e68d861224c9b61e2bc9cecad1536b1534bGordon Henriksen 222e855e68d861224c9b61e2bc9cecad1536b1534bGordon Henriksen#include "llvm-c/Core.h" 237c1483bc6f009318ce66c4d37d1ba930e01a6d13Erick Tryzelaar#include "llvm-c/Target.h" 242e855e68d861224c9b61e2bc9cecad1536b1534bGordon Henriksen 252e855e68d861224c9b61e2bc9cecad1536b1534bGordon Henriksen#ifdef __cplusplus 262e855e68d861224c9b61e2bc9cecad1536b1534bGordon Henriksenextern "C" { 272e855e68d861224c9b61e2bc9cecad1536b1534bGordon Henriksen#endif 282e855e68d861224c9b61e2bc9cecad1536b1534bGordon Henriksen 292e855e68d861224c9b61e2bc9cecad1536b1534bGordon Henriksentypedef struct LLVMOpaqueGenericValue *LLVMGenericValueRef; 302e855e68d861224c9b61e2bc9cecad1536b1534bGordon Henriksentypedef struct LLVMOpaqueExecutionEngine *LLVMExecutionEngineRef; 312e855e68d861224c9b61e2bc9cecad1536b1534bGordon Henriksen 322e855e68d861224c9b61e2bc9cecad1536b1534bGordon Henriksen/*===-- Operations on generic values --------------------------------------===*/ 332e855e68d861224c9b61e2bc9cecad1536b1534bGordon Henriksen 342e855e68d861224c9b61e2bc9cecad1536b1534bGordon HenriksenLLVMGenericValueRef LLVMCreateGenericValueOfInt(LLVMTypeRef Ty, 352e855e68d861224c9b61e2bc9cecad1536b1534bGordon Henriksen unsigned long long N, 362e855e68d861224c9b61e2bc9cecad1536b1534bGordon Henriksen int IsSigned); 372e855e68d861224c9b61e2bc9cecad1536b1534bGordon Henriksen 382e855e68d861224c9b61e2bc9cecad1536b1534bGordon HenriksenLLVMGenericValueRef LLVMCreateGenericValueOfPointer(void *P); 392e855e68d861224c9b61e2bc9cecad1536b1534bGordon Henriksen 402e855e68d861224c9b61e2bc9cecad1536b1534bGordon HenriksenLLVMGenericValueRef LLVMCreateGenericValueOfFloat(LLVMTypeRef Ty, double N); 412e855e68d861224c9b61e2bc9cecad1536b1534bGordon Henriksen 422e855e68d861224c9b61e2bc9cecad1536b1534bGordon Henriksenunsigned LLVMGenericValueIntWidth(LLVMGenericValueRef GenValRef); 432e855e68d861224c9b61e2bc9cecad1536b1534bGordon Henriksen 442e855e68d861224c9b61e2bc9cecad1536b1534bGordon Henriksenunsigned long long LLVMGenericValueToInt(LLVMGenericValueRef GenVal, 452e855e68d861224c9b61e2bc9cecad1536b1534bGordon Henriksen int IsSigned); 462e855e68d861224c9b61e2bc9cecad1536b1534bGordon Henriksen 472e855e68d861224c9b61e2bc9cecad1536b1534bGordon Henriksenvoid *LLVMGenericValueToPointer(LLVMGenericValueRef GenVal); 482e855e68d861224c9b61e2bc9cecad1536b1534bGordon Henriksen 492e855e68d861224c9b61e2bc9cecad1536b1534bGordon Henriksendouble LLVMGenericValueToFloat(LLVMTypeRef TyRef, LLVMGenericValueRef GenVal); 502e855e68d861224c9b61e2bc9cecad1536b1534bGordon Henriksen 512e855e68d861224c9b61e2bc9cecad1536b1534bGordon Henriksenvoid LLVMDisposeGenericValue(LLVMGenericValueRef GenVal); 522e855e68d861224c9b61e2bc9cecad1536b1534bGordon Henriksen 532e855e68d861224c9b61e2bc9cecad1536b1534bGordon Henriksen/*===-- Operations on execution engines -----------------------------------===*/ 542e855e68d861224c9b61e2bc9cecad1536b1534bGordon Henriksen 552e855e68d861224c9b61e2bc9cecad1536b1534bGordon Henriksenint LLVMCreateExecutionEngine(LLVMExecutionEngineRef *OutEE, 562e855e68d861224c9b61e2bc9cecad1536b1534bGordon Henriksen LLVMModuleProviderRef MP, 572e855e68d861224c9b61e2bc9cecad1536b1534bGordon Henriksen char **OutError); 582e855e68d861224c9b61e2bc9cecad1536b1534bGordon Henriksen 592e855e68d861224c9b61e2bc9cecad1536b1534bGordon Henriksenint LLVMCreateInterpreter(LLVMExecutionEngineRef *OutInterp, 602e855e68d861224c9b61e2bc9cecad1536b1534bGordon Henriksen LLVMModuleProviderRef MP, 612e855e68d861224c9b61e2bc9cecad1536b1534bGordon Henriksen char **OutError); 622e855e68d861224c9b61e2bc9cecad1536b1534bGordon Henriksen 632e855e68d861224c9b61e2bc9cecad1536b1534bGordon Henriksenint LLVMCreateJITCompiler(LLVMExecutionEngineRef *OutJIT, 642e855e68d861224c9b61e2bc9cecad1536b1534bGordon Henriksen LLVMModuleProviderRef MP, 652e855e68d861224c9b61e2bc9cecad1536b1534bGordon Henriksen char **OutError); 662e855e68d861224c9b61e2bc9cecad1536b1534bGordon Henriksen 672e855e68d861224c9b61e2bc9cecad1536b1534bGordon Henriksenvoid LLVMDisposeExecutionEngine(LLVMExecutionEngineRef EE); 682e855e68d861224c9b61e2bc9cecad1536b1534bGordon Henriksen 692e855e68d861224c9b61e2bc9cecad1536b1534bGordon Henriksenvoid LLVMRunStaticConstructors(LLVMExecutionEngineRef EE); 702e855e68d861224c9b61e2bc9cecad1536b1534bGordon Henriksen 712e855e68d861224c9b61e2bc9cecad1536b1534bGordon Henriksenvoid LLVMRunStaticDestructors(LLVMExecutionEngineRef EE); 722e855e68d861224c9b61e2bc9cecad1536b1534bGordon Henriksen 732e855e68d861224c9b61e2bc9cecad1536b1534bGordon Henriksenint LLVMRunFunctionAsMain(LLVMExecutionEngineRef EE, LLVMValueRef F, 742e855e68d861224c9b61e2bc9cecad1536b1534bGordon Henriksen unsigned ArgC, const char * const *ArgV, 752e855e68d861224c9b61e2bc9cecad1536b1534bGordon Henriksen const char * const *EnvP); 762e855e68d861224c9b61e2bc9cecad1536b1534bGordon Henriksen 772e855e68d861224c9b61e2bc9cecad1536b1534bGordon HenriksenLLVMGenericValueRef LLVMRunFunction(LLVMExecutionEngineRef EE, LLVMValueRef F, 782e855e68d861224c9b61e2bc9cecad1536b1534bGordon Henriksen unsigned NumArgs, 792e855e68d861224c9b61e2bc9cecad1536b1534bGordon Henriksen LLVMGenericValueRef *Args); 802e855e68d861224c9b61e2bc9cecad1536b1534bGordon Henriksen 812e855e68d861224c9b61e2bc9cecad1536b1534bGordon Henriksenvoid LLVMFreeMachineCodeForFunction(LLVMExecutionEngineRef EE, LLVMValueRef F); 822e855e68d861224c9b61e2bc9cecad1536b1534bGordon Henriksen 832e855e68d861224c9b61e2bc9cecad1536b1534bGordon Henriksenvoid LLVMAddModuleProvider(LLVMExecutionEngineRef EE, LLVMModuleProviderRef MP); 842e855e68d861224c9b61e2bc9cecad1536b1534bGordon Henriksen 852e855e68d861224c9b61e2bc9cecad1536b1534bGordon Henriksenint LLVMRemoveModuleProvider(LLVMExecutionEngineRef EE, 862e855e68d861224c9b61e2bc9cecad1536b1534bGordon Henriksen LLVMModuleProviderRef MP, 872e855e68d861224c9b61e2bc9cecad1536b1534bGordon Henriksen LLVMModuleRef *OutMod, char **OutError); 882e855e68d861224c9b61e2bc9cecad1536b1534bGordon Henriksen 892e855e68d861224c9b61e2bc9cecad1536b1534bGordon Henriksenint LLVMFindFunction(LLVMExecutionEngineRef EE, const char *Name, 902e855e68d861224c9b61e2bc9cecad1536b1534bGordon Henriksen LLVMValueRef *OutFn); 912e855e68d861224c9b61e2bc9cecad1536b1534bGordon Henriksen 927c1483bc6f009318ce66c4d37d1ba930e01a6d13Erick TryzelaarLLVMTargetDataRef LLVMGetExecutionEngineTargetData(LLVMExecutionEngineRef EE); 937c1483bc6f009318ce66c4d37d1ba930e01a6d13Erick Tryzelaar 942e855e68d861224c9b61e2bc9cecad1536b1534bGordon Henriksen#ifdef __cplusplus 952e855e68d861224c9b61e2bc9cecad1536b1534bGordon Henriksen} 962e855e68d861224c9b61e2bc9cecad1536b1534bGordon Henriksen 972e855e68d861224c9b61e2bc9cecad1536b1534bGordon Henriksennamespace llvm { 982e855e68d861224c9b61e2bc9cecad1536b1534bGordon Henriksen class GenericValue; 992e855e68d861224c9b61e2bc9cecad1536b1534bGordon Henriksen class ExecutionEngine; 1002e855e68d861224c9b61e2bc9cecad1536b1534bGordon Henriksen 1012e855e68d861224c9b61e2bc9cecad1536b1534bGordon Henriksen #define DEFINE_SIMPLE_CONVERSION_FUNCTIONS(ty, ref) \ 1022e855e68d861224c9b61e2bc9cecad1536b1534bGordon Henriksen inline ty *unwrap(ref P) { \ 1032e855e68d861224c9b61e2bc9cecad1536b1534bGordon Henriksen return reinterpret_cast<ty*>(P); \ 1042e855e68d861224c9b61e2bc9cecad1536b1534bGordon Henriksen } \ 1052e855e68d861224c9b61e2bc9cecad1536b1534bGordon Henriksen \ 1062e855e68d861224c9b61e2bc9cecad1536b1534bGordon Henriksen inline ref wrap(const ty *P) { \ 1072e855e68d861224c9b61e2bc9cecad1536b1534bGordon Henriksen return reinterpret_cast<ref>(const_cast<ty*>(P)); \ 1082e855e68d861224c9b61e2bc9cecad1536b1534bGordon Henriksen } 1092e855e68d861224c9b61e2bc9cecad1536b1534bGordon Henriksen 1102e855e68d861224c9b61e2bc9cecad1536b1534bGordon Henriksen DEFINE_SIMPLE_CONVERSION_FUNCTIONS(GenericValue, LLVMGenericValueRef ) 1112e855e68d861224c9b61e2bc9cecad1536b1534bGordon Henriksen DEFINE_SIMPLE_CONVERSION_FUNCTIONS(ExecutionEngine, LLVMExecutionEngineRef) 1122e855e68d861224c9b61e2bc9cecad1536b1534bGordon Henriksen 1132e855e68d861224c9b61e2bc9cecad1536b1534bGordon Henriksen #undef DEFINE_SIMPLE_CONVERSION_FUNCTIONS 1142e855e68d861224c9b61e2bc9cecad1536b1534bGordon Henriksen} 1152e855e68d861224c9b61e2bc9cecad1536b1534bGordon Henriksen 1162e855e68d861224c9b61e2bc9cecad1536b1534bGordon Henriksen#endif /* defined(__cplusplus) */ 1172e855e68d861224c9b61e2bc9cecad1536b1534bGordon Henriksen 1182e855e68d861224c9b61e2bc9cecad1536b1534bGordon Henriksen#endif 119