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