1 /*===-- llvm-c/Support.h - C Interface Types declarations ---------*- 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 file defines types used by the C interface to LLVM. *| 11 |* *| 12 \*===----------------------------------------------------------------------===*/ 13 14 #ifndef LLVM_C_TYPES_H 15 #define LLVM_C_TYPES_H 16 17 #include "llvm-c/DataTypes.h" 18 19 #ifdef __cplusplus 20 extern "C" { 21 #endif 22 23 /** 24 * @defgroup LLVMCSupportTypes Types and Enumerations 25 * 26 * @{ 27 */ 28 29 typedef int LLVMBool; 30 31 /* Opaque types. */ 32 33 /** 34 * LLVM uses a polymorphic type hierarchy which C cannot represent, therefore 35 * parameters must be passed as base types. Despite the declared types, most 36 * of the functions provided operate only on branches of the type hierarchy. 37 * The declared parameter names are descriptive and specify which type is 38 * required. Additionally, each type hierarchy is documented along with the 39 * functions that operate upon it. For more detail, refer to LLVM's C++ code. 40 * If in doubt, refer to Core.cpp, which performs parameter downcasts in the 41 * form unwrap<RequiredType>(Param). 42 */ 43 44 /** 45 * Used to pass regions of memory through LLVM interfaces. 46 * 47 * @see llvm::MemoryBuffer 48 */ 49 typedef struct LLVMOpaqueMemoryBuffer *LLVMMemoryBufferRef; 50 51 /** 52 * The top-level container for all LLVM global data. See the LLVMContext class. 53 */ 54 typedef struct LLVMOpaqueContext *LLVMContextRef; 55 56 /** 57 * The top-level container for all other LLVM Intermediate Representation (IR) 58 * objects. 59 * 60 * @see llvm::Module 61 */ 62 typedef struct LLVMOpaqueModule *LLVMModuleRef; 63 64 /** 65 * Each value in the LLVM IR has a type, an LLVMTypeRef. 66 * 67 * @see llvm::Type 68 */ 69 typedef struct LLVMOpaqueType *LLVMTypeRef; 70 71 /** 72 * Represents an individual value in LLVM IR. 73 * 74 * This models llvm::Value. 75 */ 76 typedef struct LLVMOpaqueValue *LLVMValueRef; 77 78 /** 79 * Represents a basic block of instructions in LLVM IR. 80 * 81 * This models llvm::BasicBlock. 82 */ 83 typedef struct LLVMOpaqueBasicBlock *LLVMBasicBlockRef; 84 85 /** 86 * Represents an LLVM Metadata. 87 * 88 * This models llvm::Metadata. 89 */ 90 typedef struct LLVMOpaqueMetadata *LLVMMetadataRef; 91 92 /** 93 * Represents an LLVM Named Metadata Node. 94 * 95 * This models llvm::NamedMDNode. 96 */ 97 typedef struct LLVMOpaqueNamedMDNode *LLVMNamedMDNodeRef; 98 99 /** 100 * Represents an entry in a Global Object's metadata attachments. 101 * 102 * This models std::pair<unsigned, MDNode *> 103 */ 104 typedef struct LLVMOpaqueValueMetadataEntry LLVMValueMetadataEntry; 105 106 /** 107 * Represents an LLVM basic block builder. 108 * 109 * This models llvm::IRBuilder. 110 */ 111 typedef struct LLVMOpaqueBuilder *LLVMBuilderRef; 112 113 /** 114 * Represents an LLVM debug info builder. 115 * 116 * This models llvm::DIBuilder. 117 */ 118 typedef struct LLVMOpaqueDIBuilder *LLVMDIBuilderRef; 119 120 /** 121 * Interface used to provide a module to JIT or interpreter. 122 * This is now just a synonym for llvm::Module, but we have to keep using the 123 * different type to keep binary compatibility. 124 */ 125 typedef struct LLVMOpaqueModuleProvider *LLVMModuleProviderRef; 126 127 /** @see llvm::PassManagerBase */ 128 typedef struct LLVMOpaquePassManager *LLVMPassManagerRef; 129 130 /** @see llvm::PassRegistry */ 131 typedef struct LLVMOpaquePassRegistry *LLVMPassRegistryRef; 132 133 /** 134 * Used to get the users and usees of a Value. 135 * 136 * @see llvm::Use */ 137 typedef struct LLVMOpaqueUse *LLVMUseRef; 138 139 /** 140 * Used to represent an attributes. 141 * 142 * @see llvm::Attribute 143 */ 144 typedef struct LLVMOpaqueAttributeRef *LLVMAttributeRef; 145 146 /** 147 * @see llvm::DiagnosticInfo 148 */ 149 typedef struct LLVMOpaqueDiagnosticInfo *LLVMDiagnosticInfoRef; 150 151 /** 152 * @see llvm::Comdat 153 */ 154 typedef struct LLVMComdat *LLVMComdatRef; 155 156 /** 157 * @see llvm::Module::ModuleFlagEntry 158 */ 159 typedef struct LLVMOpaqueModuleFlagEntry LLVMModuleFlagEntry; 160 161 /** 162 * @see llvm::JITEventListener 163 */ 164 typedef struct LLVMOpaqueJITEventListener *LLVMJITEventListenerRef; 165 166 /** 167 * @} 168 */ 169 170 #ifdef __cplusplus 171 } 172 #endif 173 174 #endif 175