blob: d138d072c632c9da4fb108960e399acc8809684f [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
29typedef struct LLVMOpaqueGenericValue *LLVMGenericValueRef;
30typedef struct LLVMOpaqueExecutionEngine *LLVMExecutionEngineRef;
31
32/*===-- Operations on generic values --------------------------------------===*/
33
34LLVMGenericValueRef LLVMCreateGenericValueOfInt(LLVMTypeRef Ty,
35 unsigned long long N,
36 int IsSigned);
37
38LLVMGenericValueRef LLVMCreateGenericValueOfPointer(void *P);
39
40LLVMGenericValueRef LLVMCreateGenericValueOfFloat(LLVMTypeRef Ty, double N);
41
42unsigned LLVMGenericValueIntWidth(LLVMGenericValueRef GenValRef);
43
44unsigned long long LLVMGenericValueToInt(LLVMGenericValueRef GenVal,
45 int IsSigned);
46
47void *LLVMGenericValueToPointer(LLVMGenericValueRef GenVal);
48
49double LLVMGenericValueToFloat(LLVMTypeRef TyRef, LLVMGenericValueRef GenVal);
50
51void LLVMDisposeGenericValue(LLVMGenericValueRef GenVal);
52
53/*===-- Operations on execution engines -----------------------------------===*/
54
55int LLVMCreateExecutionEngine(LLVMExecutionEngineRef *OutEE,
56 LLVMModuleProviderRef MP,
57 char **OutError);
58
59int LLVMCreateInterpreter(LLVMExecutionEngineRef *OutInterp,
60 LLVMModuleProviderRef MP,
61 char **OutError);
62
63int LLVMCreateJITCompiler(LLVMExecutionEngineRef *OutJIT,
64 LLVMModuleProviderRef MP,
Gordon Henriksenc13c4d62008-08-08 20:49:28 +000065 int Fast,
Gordon Henriksen2e855e62007-12-23 16:59:28 +000066 char **OutError);
67
68void LLVMDisposeExecutionEngine(LLVMExecutionEngineRef EE);
69
70void LLVMRunStaticConstructors(LLVMExecutionEngineRef EE);
71
72void LLVMRunStaticDestructors(LLVMExecutionEngineRef EE);
73
74int LLVMRunFunctionAsMain(LLVMExecutionEngineRef EE, LLVMValueRef F,
75 unsigned ArgC, const char * const *ArgV,
76 const char * const *EnvP);
77
78LLVMGenericValueRef LLVMRunFunction(LLVMExecutionEngineRef EE, LLVMValueRef F,
79 unsigned NumArgs,
80 LLVMGenericValueRef *Args);
81
82void LLVMFreeMachineCodeForFunction(LLVMExecutionEngineRef EE, LLVMValueRef F);
83
84void LLVMAddModuleProvider(LLVMExecutionEngineRef EE, LLVMModuleProviderRef MP);
85
86int LLVMRemoveModuleProvider(LLVMExecutionEngineRef EE,
87 LLVMModuleProviderRef MP,
88 LLVMModuleRef *OutMod, char **OutError);
89
90int LLVMFindFunction(LLVMExecutionEngineRef EE, const char *Name,
91 LLVMValueRef *OutFn);
92
Erick Tryzelaar7c1483b2008-03-27 00:27:14 +000093LLVMTargetDataRef LLVMGetExecutionEngineTargetData(LLVMExecutionEngineRef EE);
94
Gordon Henriksen54227f62008-06-20 02:16:11 +000095void LLVMAddGlobalMapping(LLVMExecutionEngineRef EE, LLVMValueRef Global,
96 void* Addr);
97
Gordon Henriksen2e855e62007-12-23 16:59:28 +000098#ifdef __cplusplus
99}
100
101namespace llvm {
102 class GenericValue;
103 class ExecutionEngine;
104
105 #define DEFINE_SIMPLE_CONVERSION_FUNCTIONS(ty, ref) \
106 inline ty *unwrap(ref P) { \
107 return reinterpret_cast<ty*>(P); \
108 } \
109 \
110 inline ref wrap(const ty *P) { \
111 return reinterpret_cast<ref>(const_cast<ty*>(P)); \
112 }
113
114 DEFINE_SIMPLE_CONVERSION_FUNCTIONS(GenericValue, LLVMGenericValueRef )
115 DEFINE_SIMPLE_CONVERSION_FUNCTIONS(ExecutionEngine, LLVMExecutionEngineRef)
116
117 #undef DEFINE_SIMPLE_CONVERSION_FUNCTIONS
118}
119
120#endif /* defined(__cplusplus) */
121
122#endif