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