LLVM  8.0.1
Types.h
Go to the documentation of this file.
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  */
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  */
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
struct LLVMOpaqueModule * LLVMModuleRef
The top-level container for all other LLVM Intermediate Representation (IR) objects.
Definition: Types.h:62
struct LLVMOpaqueMemoryBuffer * LLVMMemoryBufferRef
LLVM uses a polymorphic type hierarchy which C cannot represent, therefore parameters must be passed ...
Definition: Types.h:49
struct LLVMOpaquePassRegistry * LLVMPassRegistryRef
Definition: Types.h:131
struct LLVMOpaqueBuilder * LLVMBuilderRef
Represents an LLVM basic block builder.
Definition: Types.h:111
struct LLVMComdat * LLVMComdatRef
Definition: Types.h:154
struct LLVMOpaqueDIBuilder * LLVMDIBuilderRef
Represents an LLVM debug info builder.
Definition: Types.h:118
struct LLVMOpaqueNamedMDNode * LLVMNamedMDNodeRef
Represents an LLVM Named Metadata Node.
Definition: Types.h:97
struct LLVMOpaqueType * LLVMTypeRef
Each value in the LLVM IR has a type, an LLVMTypeRef.
Definition: Types.h:69
struct LLVMOpaqueUse * LLVMUseRef
Used to get the users and usees of a Value.
Definition: Types.h:137
struct LLVMOpaqueContext * LLVMContextRef
The top-level container for all LLVM global data.
Definition: Types.h:54
struct LLVMOpaqueAttributeRef * LLVMAttributeRef
Used to represent an attributes.
Definition: Types.h:144
struct LLVMOpaqueModuleProvider * LLVMModuleProviderRef
Interface used to provide a module to JIT or interpreter.
Definition: Types.h:125
int LLVMBool
Definition: Types.h:29
struct LLVMOpaqueDiagnosticInfo * LLVMDiagnosticInfoRef
Definition: Types.h:149
struct LLVMOpaqueBasicBlock * LLVMBasicBlockRef
Represents a basic block of instructions in LLVM IR.
Definition: Types.h:83
struct LLVMOpaquePassManager * LLVMPassManagerRef
Definition: Types.h:128
struct LLVMOpaqueMetadata * LLVMMetadataRef
Represents an LLVM Metadata.
Definition: Types.h:90
struct LLVMOpaqueJITEventListener * LLVMJITEventListenerRef
Definition: Types.h:164
struct LLVMOpaqueValue * LLVMValueRef
Represents an individual value in LLVM IR.
Definition: Types.h:76