blob: 05f2a892e22309bc84fbe93080e8d28742469cc8 [file] [log] [blame]
Gordon Henriksen2e855e62007-12-23 16:59:28 +00001/*===-- llvm-c/ExecutionEngine.h - ExecutionEngine Lib C Iface --*- C++ -*-===*\
2|* *|
3|* The LLVM Compiler Infrastructure *|
4|* *|
Chris Lattner7ed47a12007-12-29 19:59:42 +00005|* This file is distributed under the University of Illinois Open Source *|
6|* License. See LICENSE.TXT for details. *|
Gordon Henriksen2e855e62007-12-23 16:59:28 +00007|* *|
8|*===----------------------------------------------------------------------===*|
9|* *|
10|* This header declares the C interface to libLLVMExecutionEngine.o, which *|
11|* implements various analyses of the LLVM IR. *|
12|* *|
13|* Many exotic languages can interoperate with C code but have a harder time *|
14|* with C++ due to name mangling. So in addition to C, this interface enables *|
15|* tools written in such languages. *|
16|* *|
17\*===----------------------------------------------------------------------===*/
18
19#ifndef LLVM_C_EXECUTIONENGINE_H
20#define LLVM_C_EXECUTIONENGINE_H
21
22#include "llvm-c/Core.h"
Erick Tryzelaar7c1483b2008-03-27 00:27:14 +000023#include "llvm-c/Target.h"
Gordon Henriksen2e855e62007-12-23 16:59:28 +000024
25#ifdef __cplusplus
26extern "C" {
27#endif
28
Bob Wilsone46161f2009-06-24 21:09:18 +000029void LLVMLinkInJIT(void);
30void LLVMLinkInInterpreter(void);
31
Gordon Henriksen2e855e62007-12-23 16:59:28 +000032typedef struct LLVMOpaqueGenericValue *LLVMGenericValueRef;
33typedef struct LLVMOpaqueExecutionEngine *LLVMExecutionEngineRef;
34
35/*===-- Operations on generic values --------------------------------------===*/
36
37LLVMGenericValueRef LLVMCreateGenericValueOfInt(LLVMTypeRef Ty,
38 unsigned long long N,
39 int IsSigned);
40
41LLVMGenericValueRef LLVMCreateGenericValueOfPointer(void *P);
42
43LLVMGenericValueRef LLVMCreateGenericValueOfFloat(LLVMTypeRef Ty, double N);
44
45unsigned LLVMGenericValueIntWidth(LLVMGenericValueRef GenValRef);
46
47unsigned long long LLVMGenericValueToInt(LLVMGenericValueRef GenVal,
48 int IsSigned);
49
50void *LLVMGenericValueToPointer(LLVMGenericValueRef GenVal);
51
52double LLVMGenericValueToFloat(LLVMTypeRef TyRef, LLVMGenericValueRef GenVal);
53
54void LLVMDisposeGenericValue(LLVMGenericValueRef GenVal);
55
56/*===-- Operations on execution engines -----------------------------------===*/
57
58int LLVMCreateExecutionEngine(LLVMExecutionEngineRef *OutEE,
59 LLVMModuleProviderRef MP,
60 char **OutError);
61
62int LLVMCreateInterpreter(LLVMExecutionEngineRef *OutInterp,
63 LLVMModuleProviderRef MP,
64 char **OutError);
65
66int LLVMCreateJITCompiler(LLVMExecutionEngineRef *OutJIT,
67 LLVMModuleProviderRef MP,
Bill Wendling5e5cb792009-04-29 00:32:19 +000068 unsigned OptLevel,
Gordon Henriksen2e855e62007-12-23 16:59:28 +000069 char **OutError);
70
71void LLVMDisposeExecutionEngine(LLVMExecutionEngineRef EE);
72
73void LLVMRunStaticConstructors(LLVMExecutionEngineRef EE);
74
75void LLVMRunStaticDestructors(LLVMExecutionEngineRef EE);
76
77int LLVMRunFunctionAsMain(LLVMExecutionEngineRef EE, LLVMValueRef F,
78 unsigned ArgC, const char * const *ArgV,
79 const char * const *EnvP);
80
81LLVMGenericValueRef LLVMRunFunction(LLVMExecutionEngineRef EE, LLVMValueRef F,
82 unsigned NumArgs,
83 LLVMGenericValueRef *Args);
84
85void LLVMFreeMachineCodeForFunction(LLVMExecutionEngineRef EE, LLVMValueRef F);
86
87void LLVMAddModuleProvider(LLVMExecutionEngineRef EE, LLVMModuleProviderRef MP);
88
89int LLVMRemoveModuleProvider(LLVMExecutionEngineRef EE,
90 LLVMModuleProviderRef MP,
91 LLVMModuleRef *OutMod, char **OutError);
92
93int LLVMFindFunction(LLVMExecutionEngineRef EE, const char *Name,
94 LLVMValueRef *OutFn);
95
Erick Tryzelaar7c1483b2008-03-27 00:27:14 +000096LLVMTargetDataRef LLVMGetExecutionEngineTargetData(LLVMExecutionEngineRef EE);
97
Gordon Henriksen54227f62008-06-20 02:16:11 +000098void LLVMAddGlobalMapping(LLVMExecutionEngineRef EE, LLVMValueRef Global,
99 void* Addr);
100
Chris Lattner1e42c5b2009-01-21 18:11:10 +0000101void *LLVMGetPointerToGlobal(LLVMExecutionEngineRef EE, LLVMValueRef Global);
102
Gordon Henriksen2e855e62007-12-23 16:59:28 +0000103#ifdef __cplusplus
104}
105
106namespace llvm {
Daniel Dunbardeb052a2009-07-12 23:50:34 +0000107 struct GenericValue;
Gordon Henriksen2e855e62007-12-23 16:59:28 +0000108 class ExecutionEngine;
109
110 #define DEFINE_SIMPLE_CONVERSION_FUNCTIONS(ty, ref) \
111 inline ty *unwrap(ref P) { \
112 return reinterpret_cast<ty*>(P); \
113 } \
114 \
115 inline ref wrap(const ty *P) { \
116 return reinterpret_cast<ref>(const_cast<ty*>(P)); \
117 }
118
119 DEFINE_SIMPLE_CONVERSION_FUNCTIONS(GenericValue, LLVMGenericValueRef )
120 DEFINE_SIMPLE_CONVERSION_FUNCTIONS(ExecutionEngine, LLVMExecutionEngineRef)
121
122 #undef DEFINE_SIMPLE_CONVERSION_FUNCTIONS
123}
124
125#endif /* defined(__cplusplus) */
126
127#endif