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