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