ExecutionEngine.h revision df7df075b723e926e51555bf5aff6e231279a479
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 29e46161f10c3e0c640b22e446b873df8b01413f52Bob Wilsonvoid LLVMLinkInJIT(void); 30e46161f10c3e0c640b22e446b873df8b01413f52Bob Wilsonvoid LLVMLinkInInterpreter(void); 31e46161f10c3e0c640b22e446b873df8b01413f52Bob Wilson 322e855e68d861224c9b61e2bc9cecad1536b1534bGordon Henriksentypedef struct LLVMOpaqueGenericValue *LLVMGenericValueRef; 332e855e68d861224c9b61e2bc9cecad1536b1534bGordon Henriksentypedef struct LLVMOpaqueExecutionEngine *LLVMExecutionEngineRef; 342e855e68d861224c9b61e2bc9cecad1536b1534bGordon Henriksen 352e855e68d861224c9b61e2bc9cecad1536b1534bGordon Henriksen/*===-- Operations on generic values --------------------------------------===*/ 362e855e68d861224c9b61e2bc9cecad1536b1534bGordon Henriksen 372e855e68d861224c9b61e2bc9cecad1536b1534bGordon HenriksenLLVMGenericValueRef LLVMCreateGenericValueOfInt(LLVMTypeRef Ty, 382e855e68d861224c9b61e2bc9cecad1536b1534bGordon Henriksen unsigned long long N, 39d686c8e73f74e37ab5f647b65a12051ee6cbad16Chris Lattner LLVMBool IsSigned); 402e855e68d861224c9b61e2bc9cecad1536b1534bGordon Henriksen 412e855e68d861224c9b61e2bc9cecad1536b1534bGordon HenriksenLLVMGenericValueRef LLVMCreateGenericValueOfPointer(void *P); 422e855e68d861224c9b61e2bc9cecad1536b1534bGordon Henriksen 432e855e68d861224c9b61e2bc9cecad1536b1534bGordon HenriksenLLVMGenericValueRef LLVMCreateGenericValueOfFloat(LLVMTypeRef Ty, double N); 442e855e68d861224c9b61e2bc9cecad1536b1534bGordon Henriksen 452e855e68d861224c9b61e2bc9cecad1536b1534bGordon Henriksenunsigned LLVMGenericValueIntWidth(LLVMGenericValueRef GenValRef); 462e855e68d861224c9b61e2bc9cecad1536b1534bGordon Henriksen 472e855e68d861224c9b61e2bc9cecad1536b1534bGordon Henriksenunsigned long long LLVMGenericValueToInt(LLVMGenericValueRef GenVal, 48d686c8e73f74e37ab5f647b65a12051ee6cbad16Chris Lattner LLVMBool IsSigned); 492e855e68d861224c9b61e2bc9cecad1536b1534bGordon Henriksen 502e855e68d861224c9b61e2bc9cecad1536b1534bGordon Henriksenvoid *LLVMGenericValueToPointer(LLVMGenericValueRef GenVal); 512e855e68d861224c9b61e2bc9cecad1536b1534bGordon Henriksen 522e855e68d861224c9b61e2bc9cecad1536b1534bGordon Henriksendouble LLVMGenericValueToFloat(LLVMTypeRef TyRef, LLVMGenericValueRef GenVal); 532e855e68d861224c9b61e2bc9cecad1536b1534bGordon Henriksen 542e855e68d861224c9b61e2bc9cecad1536b1534bGordon Henriksenvoid LLVMDisposeGenericValue(LLVMGenericValueRef GenVal); 552e855e68d861224c9b61e2bc9cecad1536b1534bGordon Henriksen 562e855e68d861224c9b61e2bc9cecad1536b1534bGordon Henriksen/*===-- Operations on execution engines -----------------------------------===*/ 572e855e68d861224c9b61e2bc9cecad1536b1534bGordon Henriksen 58df7df075b723e926e51555bf5aff6e231279a479Erick TryzelaarLLVMBool LLVMCreateExecutionEngineForModule(LLVMExecutionEngineRef *OutEE, 59df7df075b723e926e51555bf5aff6e231279a479Erick Tryzelaar LLVMModuleRef M, 60df7df075b723e926e51555bf5aff6e231279a479Erick Tryzelaar char **OutError); 61df7df075b723e926e51555bf5aff6e231279a479Erick Tryzelaar 62df7df075b723e926e51555bf5aff6e231279a479Erick TryzelaarLLVMBool LLVMCreateInterpreterForModule(LLVMExecutionEngineRef *OutInterp, 63df7df075b723e926e51555bf5aff6e231279a479Erick Tryzelaar LLVMModuleRef M, 64df7df075b723e926e51555bf5aff6e231279a479Erick Tryzelaar char **OutError); 65df7df075b723e926e51555bf5aff6e231279a479Erick Tryzelaar 66df7df075b723e926e51555bf5aff6e231279a479Erick TryzelaarLLVMBool LLVMCreateJITCompilerForModule(LLVMExecutionEngineRef *OutJIT, 67df7df075b723e926e51555bf5aff6e231279a479Erick Tryzelaar LLVMModuleRef M, 68df7df075b723e926e51555bf5aff6e231279a479Erick Tryzelaar unsigned OptLevel, 69df7df075b723e926e51555bf5aff6e231279a479Erick Tryzelaar char **OutError); 70df7df075b723e926e51555bf5aff6e231279a479Erick Tryzelaar 71df7df075b723e926e51555bf5aff6e231279a479Erick Tryzelaar/** Deprecated: Use LLVMCreateExecutionEngineForModule instead. */ 72d686c8e73f74e37ab5f647b65a12051ee6cbad16Chris LattnerLLVMBool LLVMCreateExecutionEngine(LLVMExecutionEngineRef *OutEE, 73d686c8e73f74e37ab5f647b65a12051ee6cbad16Chris Lattner LLVMModuleProviderRef MP, 74d686c8e73f74e37ab5f647b65a12051ee6cbad16Chris Lattner char **OutError); 752e855e68d861224c9b61e2bc9cecad1536b1534bGordon Henriksen 76df7df075b723e926e51555bf5aff6e231279a479Erick Tryzelaar/** Deprecated: Use LLVMCreateInterpreterForModule instead. */ 77d686c8e73f74e37ab5f647b65a12051ee6cbad16Chris LattnerLLVMBool LLVMCreateInterpreter(LLVMExecutionEngineRef *OutInterp, 78d686c8e73f74e37ab5f647b65a12051ee6cbad16Chris Lattner LLVMModuleProviderRef MP, 79d686c8e73f74e37ab5f647b65a12051ee6cbad16Chris Lattner char **OutError); 802e855e68d861224c9b61e2bc9cecad1536b1534bGordon Henriksen 81df7df075b723e926e51555bf5aff6e231279a479Erick Tryzelaar/** Deprecated: Use LLVMCreateJITCompilerForModule instead. */ 82d686c8e73f74e37ab5f647b65a12051ee6cbad16Chris LattnerLLVMBool LLVMCreateJITCompiler(LLVMExecutionEngineRef *OutJIT, 83d686c8e73f74e37ab5f647b65a12051ee6cbad16Chris Lattner LLVMModuleProviderRef MP, 84d686c8e73f74e37ab5f647b65a12051ee6cbad16Chris Lattner unsigned OptLevel, 85d686c8e73f74e37ab5f647b65a12051ee6cbad16Chris Lattner char **OutError); 862e855e68d861224c9b61e2bc9cecad1536b1534bGordon Henriksen 872e855e68d861224c9b61e2bc9cecad1536b1534bGordon Henriksenvoid LLVMDisposeExecutionEngine(LLVMExecutionEngineRef EE); 882e855e68d861224c9b61e2bc9cecad1536b1534bGordon Henriksen 892e855e68d861224c9b61e2bc9cecad1536b1534bGordon Henriksenvoid LLVMRunStaticConstructors(LLVMExecutionEngineRef EE); 902e855e68d861224c9b61e2bc9cecad1536b1534bGordon Henriksen 912e855e68d861224c9b61e2bc9cecad1536b1534bGordon Henriksenvoid LLVMRunStaticDestructors(LLVMExecutionEngineRef EE); 922e855e68d861224c9b61e2bc9cecad1536b1534bGordon Henriksen 932e855e68d861224c9b61e2bc9cecad1536b1534bGordon Henriksenint LLVMRunFunctionAsMain(LLVMExecutionEngineRef EE, LLVMValueRef F, 942e855e68d861224c9b61e2bc9cecad1536b1534bGordon Henriksen unsigned ArgC, const char * const *ArgV, 952e855e68d861224c9b61e2bc9cecad1536b1534bGordon Henriksen const char * const *EnvP); 962e855e68d861224c9b61e2bc9cecad1536b1534bGordon Henriksen 972e855e68d861224c9b61e2bc9cecad1536b1534bGordon HenriksenLLVMGenericValueRef LLVMRunFunction(LLVMExecutionEngineRef EE, LLVMValueRef F, 982e855e68d861224c9b61e2bc9cecad1536b1534bGordon Henriksen unsigned NumArgs, 992e855e68d861224c9b61e2bc9cecad1536b1534bGordon Henriksen LLVMGenericValueRef *Args); 1002e855e68d861224c9b61e2bc9cecad1536b1534bGordon Henriksen 1012e855e68d861224c9b61e2bc9cecad1536b1534bGordon Henriksenvoid LLVMFreeMachineCodeForFunction(LLVMExecutionEngineRef EE, LLVMValueRef F); 1022e855e68d861224c9b61e2bc9cecad1536b1534bGordon Henriksen 103df7df075b723e926e51555bf5aff6e231279a479Erick Tryzelaarvoid LLVMAddModule(LLVMExecutionEngineRef EE, LLVMModuleRef M); 104df7df075b723e926e51555bf5aff6e231279a479Erick Tryzelaar 105df7df075b723e926e51555bf5aff6e231279a479Erick Tryzelaar/** Deprecated: Use LLVMAddModule instead. */ 1062e855e68d861224c9b61e2bc9cecad1536b1534bGordon Henriksenvoid LLVMAddModuleProvider(LLVMExecutionEngineRef EE, LLVMModuleProviderRef MP); 1072e855e68d861224c9b61e2bc9cecad1536b1534bGordon Henriksen 108df7df075b723e926e51555bf5aff6e231279a479Erick TryzelaarLLVMBool LLVMRemoveModule(LLVMExecutionEngineRef EE, LLVMModuleRef M, 109df7df075b723e926e51555bf5aff6e231279a479Erick Tryzelaar LLVMModuleRef *OutMod, char **OutError); 110df7df075b723e926e51555bf5aff6e231279a479Erick Tryzelaar 111df7df075b723e926e51555bf5aff6e231279a479Erick Tryzelaar/** Deprecated: Use LLVMRemoveModule instead. */ 112d686c8e73f74e37ab5f647b65a12051ee6cbad16Chris LattnerLLVMBool LLVMRemoveModuleProvider(LLVMExecutionEngineRef EE, 113d686c8e73f74e37ab5f647b65a12051ee6cbad16Chris Lattner LLVMModuleProviderRef MP, 114d686c8e73f74e37ab5f647b65a12051ee6cbad16Chris Lattner LLVMModuleRef *OutMod, char **OutError); 1152e855e68d861224c9b61e2bc9cecad1536b1534bGordon Henriksen 116d686c8e73f74e37ab5f647b65a12051ee6cbad16Chris LattnerLLVMBool LLVMFindFunction(LLVMExecutionEngineRef EE, const char *Name, 117d686c8e73f74e37ab5f647b65a12051ee6cbad16Chris Lattner LLVMValueRef *OutFn); 1182e855e68d861224c9b61e2bc9cecad1536b1534bGordon Henriksen 1197c1483bc6f009318ce66c4d37d1ba930e01a6d13Erick TryzelaarLLVMTargetDataRef LLVMGetExecutionEngineTargetData(LLVMExecutionEngineRef EE); 1207c1483bc6f009318ce66c4d37d1ba930e01a6d13Erick Tryzelaar 12154227f6752befd3196e078b83e4c440ecaff2dd7Gordon Henriksenvoid LLVMAddGlobalMapping(LLVMExecutionEngineRef EE, LLVMValueRef Global, 12254227f6752befd3196e078b83e4c440ecaff2dd7Gordon Henriksen void* Addr); 12354227f6752befd3196e078b83e4c440ecaff2dd7Gordon Henriksen 1241e42c5bdf50b54e33afa840b5dbb2d7c7d861a44Chris Lattnervoid *LLVMGetPointerToGlobal(LLVMExecutionEngineRef EE, LLVMValueRef Global); 1251e42c5bdf50b54e33afa840b5dbb2d7c7d861a44Chris Lattner 1262e855e68d861224c9b61e2bc9cecad1536b1534bGordon Henriksen#ifdef __cplusplus 1272e855e68d861224c9b61e2bc9cecad1536b1534bGordon Henriksen} 1282e855e68d861224c9b61e2bc9cecad1536b1534bGordon Henriksen 1292e855e68d861224c9b61e2bc9cecad1536b1534bGordon Henriksennamespace llvm { 130deb052a3dd0227579f86d74b3c1d70384ea5c16bDaniel Dunbar struct GenericValue; 1312e855e68d861224c9b61e2bc9cecad1536b1534bGordon Henriksen class ExecutionEngine; 1322e855e68d861224c9b61e2bc9cecad1536b1534bGordon Henriksen 1332e855e68d861224c9b61e2bc9cecad1536b1534bGordon Henriksen #define DEFINE_SIMPLE_CONVERSION_FUNCTIONS(ty, ref) \ 1342e855e68d861224c9b61e2bc9cecad1536b1534bGordon Henriksen inline ty *unwrap(ref P) { \ 1352e855e68d861224c9b61e2bc9cecad1536b1534bGordon Henriksen return reinterpret_cast<ty*>(P); \ 1362e855e68d861224c9b61e2bc9cecad1536b1534bGordon Henriksen } \ 1372e855e68d861224c9b61e2bc9cecad1536b1534bGordon Henriksen \ 1382e855e68d861224c9b61e2bc9cecad1536b1534bGordon Henriksen inline ref wrap(const ty *P) { \ 1392e855e68d861224c9b61e2bc9cecad1536b1534bGordon Henriksen return reinterpret_cast<ref>(const_cast<ty*>(P)); \ 1402e855e68d861224c9b61e2bc9cecad1536b1534bGordon Henriksen } 1412e855e68d861224c9b61e2bc9cecad1536b1534bGordon Henriksen 1422e855e68d861224c9b61e2bc9cecad1536b1534bGordon Henriksen DEFINE_SIMPLE_CONVERSION_FUNCTIONS(GenericValue, LLVMGenericValueRef ) 1432e855e68d861224c9b61e2bc9cecad1536b1534bGordon Henriksen DEFINE_SIMPLE_CONVERSION_FUNCTIONS(ExecutionEngine, LLVMExecutionEngineRef) 1442e855e68d861224c9b61e2bc9cecad1536b1534bGordon Henriksen 1452e855e68d861224c9b61e2bc9cecad1536b1534bGordon Henriksen #undef DEFINE_SIMPLE_CONVERSION_FUNCTIONS 1462e855e68d861224c9b61e2bc9cecad1536b1534bGordon Henriksen} 1472e855e68d861224c9b61e2bc9cecad1536b1534bGordon Henriksen 1482e855e68d861224c9b61e2bc9cecad1536b1534bGordon Henriksen#endif /* defined(__cplusplus) */ 1492e855e68d861224c9b61e2bc9cecad1536b1534bGordon Henriksen 1502e855e68d861224c9b61e2bc9cecad1536b1534bGordon Henriksen#endif 151