]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - contrib/llvm-project/llvm/include/llvm-c/Types.h
Merge llvm, clang, compiler-rt, libc++, libunwind, lld, lldb and openmp
[FreeBSD/FreeBSD.git] / contrib / llvm-project / llvm / include / llvm-c / Types.h
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
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  * @see llvm::object::Binary
168  */
169 typedef struct LLVMOpaqueBinary *LLVMBinaryRef;
170
171 /**
172  * @}
173  */
174
175 #ifdef __cplusplus
176 }
177 #endif
178
179 #endif