holdingarea/llvm/llvm-2.7/include/llvm-c/ExecutionEngine.h
branchbug235_bringup_0
changeset 20 d2d6724aef32
child 24 a3f46bb01be2
equal deleted inserted replaced
19:da7c1a80df0d 20:d2d6724aef32
       
     1 /*===-- llvm-c/ExecutionEngine.h - ExecutionEngine Lib C Iface --*- C++ -*-===*\
       
     2 |*                                                                            *|
       
     3 |*                     The LLVM Compiler Infrastructure                       *|
       
     4 |*                                                                            *|
       
     5 |* This file is distributed under the University of Illinois Open Source      *|
       
     6 |* License. See LICENSE.TXT for details.                                      *|
       
     7 |*                                                                            *|
       
     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"
       
    23 #include "llvm-c/Target.h"
       
    24 
       
    25 #ifdef __cplusplus
       
    26 extern "C" {
       
    27 #endif
       
    28 
       
    29 void LLVMLinkInJIT(void);
       
    30 void LLVMLinkInInterpreter(void);
       
    31 
       
    32 typedef struct LLVMOpaqueGenericValue *LLVMGenericValueRef;
       
    33 typedef struct LLVMOpaqueExecutionEngine *LLVMExecutionEngineRef;
       
    34 
       
    35 /*===-- Operations on generic values --------------------------------------===*/
       
    36 
       
    37 LLVMGenericValueRef LLVMCreateGenericValueOfInt(LLVMTypeRef Ty,
       
    38                                                 unsigned long long N,
       
    39                                                 LLVMBool IsSigned);
       
    40 
       
    41 LLVMGenericValueRef LLVMCreateGenericValueOfPointer(void *P);
       
    42 
       
    43 LLVMGenericValueRef LLVMCreateGenericValueOfFloat(LLVMTypeRef Ty, double N);
       
    44 
       
    45 unsigned LLVMGenericValueIntWidth(LLVMGenericValueRef GenValRef);
       
    46 
       
    47 unsigned long long LLVMGenericValueToInt(LLVMGenericValueRef GenVal,
       
    48                                          LLVMBool IsSigned);
       
    49 
       
    50 void *LLVMGenericValueToPointer(LLVMGenericValueRef GenVal);
       
    51 
       
    52 double LLVMGenericValueToFloat(LLVMTypeRef TyRef, LLVMGenericValueRef GenVal);
       
    53 
       
    54 void LLVMDisposeGenericValue(LLVMGenericValueRef GenVal);
       
    55 
       
    56 /*===-- Operations on execution engines -----------------------------------===*/
       
    57 
       
    58 LLVMBool LLVMCreateExecutionEngineForModule(LLVMExecutionEngineRef *OutEE,
       
    59                                             LLVMModuleRef M,
       
    60                                             char **OutError);
       
    61 
       
    62 LLVMBool LLVMCreateInterpreterForModule(LLVMExecutionEngineRef *OutInterp,
       
    63                                         LLVMModuleRef M,
       
    64                                         char **OutError);
       
    65 
       
    66 LLVMBool LLVMCreateJITCompilerForModule(LLVMExecutionEngineRef *OutJIT,
       
    67                                         LLVMModuleRef M,
       
    68                                         unsigned OptLevel,
       
    69                                         char **OutError);
       
    70 
       
    71 /** Deprecated: Use LLVMCreateExecutionEngineForModule instead. */
       
    72 LLVMBool LLVMCreateExecutionEngine(LLVMExecutionEngineRef *OutEE,
       
    73                                    LLVMModuleProviderRef MP,
       
    74                                    char **OutError);
       
    75 
       
    76 /** Deprecated: Use LLVMCreateInterpreterForModule instead. */
       
    77 LLVMBool LLVMCreateInterpreter(LLVMExecutionEngineRef *OutInterp,
       
    78                                LLVMModuleProviderRef MP,
       
    79                                char **OutError);
       
    80 
       
    81 /** Deprecated: Use LLVMCreateJITCompilerForModule instead. */
       
    82 LLVMBool LLVMCreateJITCompiler(LLVMExecutionEngineRef *OutJIT,
       
    83                                LLVMModuleProviderRef MP,
       
    84                                unsigned OptLevel,
       
    85                                char **OutError);
       
    86 
       
    87 void LLVMDisposeExecutionEngine(LLVMExecutionEngineRef EE);
       
    88 
       
    89 void LLVMRunStaticConstructors(LLVMExecutionEngineRef EE);
       
    90 
       
    91 void LLVMRunStaticDestructors(LLVMExecutionEngineRef EE);
       
    92 
       
    93 int LLVMRunFunctionAsMain(LLVMExecutionEngineRef EE, LLVMValueRef F,
       
    94                           unsigned ArgC, const char * const *ArgV,
       
    95                           const char * const *EnvP);
       
    96 
       
    97 LLVMGenericValueRef LLVMRunFunction(LLVMExecutionEngineRef EE, LLVMValueRef F,
       
    98                                     unsigned NumArgs,
       
    99                                     LLVMGenericValueRef *Args);
       
   100 
       
   101 void LLVMFreeMachineCodeForFunction(LLVMExecutionEngineRef EE, LLVMValueRef F);
       
   102 
       
   103 void LLVMAddModule(LLVMExecutionEngineRef EE, LLVMModuleRef M);
       
   104 
       
   105 /** Deprecated: Use LLVMAddModule instead. */
       
   106 void LLVMAddModuleProvider(LLVMExecutionEngineRef EE, LLVMModuleProviderRef MP);
       
   107 
       
   108 LLVMBool LLVMRemoveModule(LLVMExecutionEngineRef EE, LLVMModuleRef M,
       
   109                           LLVMModuleRef *OutMod, char **OutError);
       
   110 
       
   111 /** Deprecated: Use LLVMRemoveModule instead. */
       
   112 LLVMBool LLVMRemoveModuleProvider(LLVMExecutionEngineRef EE,
       
   113                                   LLVMModuleProviderRef MP,
       
   114                                   LLVMModuleRef *OutMod, char **OutError);
       
   115 
       
   116 LLVMBool LLVMFindFunction(LLVMExecutionEngineRef EE, const char *Name,
       
   117                           LLVMValueRef *OutFn);
       
   118 
       
   119 LLVMTargetDataRef LLVMGetExecutionEngineTargetData(LLVMExecutionEngineRef EE);
       
   120 
       
   121 void LLVMAddGlobalMapping(LLVMExecutionEngineRef EE, LLVMValueRef Global,
       
   122                           void* Addr);
       
   123 
       
   124 void *LLVMGetPointerToGlobal(LLVMExecutionEngineRef EE, LLVMValueRef Global);
       
   125 
       
   126 #ifdef __cplusplus
       
   127 }
       
   128 
       
   129 namespace llvm {
       
   130   struct GenericValue;
       
   131   class ExecutionEngine;
       
   132   
       
   133   #define DEFINE_SIMPLE_CONVERSION_FUNCTIONS(ty, ref)   \
       
   134     inline ty *unwrap(ref P) {                          \
       
   135       return reinterpret_cast<ty*>(P);                  \
       
   136     }                                                   \
       
   137                                                         \
       
   138     inline ref wrap(const ty *P) {                      \
       
   139       return reinterpret_cast<ref>(const_cast<ty*>(P)); \
       
   140     }
       
   141   
       
   142   DEFINE_SIMPLE_CONVERSION_FUNCTIONS(GenericValue,    LLVMGenericValueRef   )
       
   143   DEFINE_SIMPLE_CONVERSION_FUNCTIONS(ExecutionEngine, LLVMExecutionEngineRef)
       
   144   
       
   145   #undef DEFINE_SIMPLE_CONVERSION_FUNCTIONS
       
   146 }
       
   147   
       
   148 #endif /* defined(__cplusplus) */
       
   149 
       
   150 #endif