1 module llvm.types; 2 3 public import std.stdint : uintptr_t; 4 5 import llvm.config; 6 import core.stdc.stdint; 7 8 /+ Analysis +/ 9 10 alias int LLVMVerifierFailureAction; 11 12 /+ Transforms +/ 13 14 /++ Pass manager builder ++/ 15 16 struct LLVMOpaquePassManagerBuilder {}; alias LLVMOpaquePassManagerBuilder* LLVMPassManagerBuilderRef; 17 18 /+ Core +/ 19 20 static if (LLVM_Version >= asVersion(3, 4, 0)) 21 { 22 alias extern(C) void function(const char* Reason) LLVMFatalErrorHandler; 23 } 24 25 static if (LLVM_Version >= asVersion(3, 5, 0)) 26 { 27 //This is here because putting it where it semantically belongs creates a forward reference issues. 28 struct LLVMOpaqueDiagnosticInfo {}; alias LLVMOpaqueDiagnosticInfo* LLVMDiagnosticInfoRef; 29 30 alias extern(C) void function(LLVMDiagnosticInfoRef, void*) LLVMDiagnosticHandler; 31 alias extern(C) void function(LLVMContextRef, void *) LLVMYieldCallback; 32 } 33 34 /++ Types and Enumerations ++/ 35 36 alias int LLVMBool; 37 struct LLVMOpaqueContext {}; alias LLVMOpaqueContext* LLVMContextRef; 38 struct LLVMOpaqueModule {}; alias LLVMOpaqueModule* LLVMModuleRef; 39 struct LLVMOpaqueType {}; alias LLVMOpaqueType* LLVMTypeRef; 40 struct LLVMOpaqueValue {}; alias LLVMOpaqueValue* LLVMValueRef; 41 static if (LLVM_Version >= asVersion(5, 0, 0)) { 42 struct LLVMOpaqueMetadata; alias LLVMOpaqueMetadata* LLVMMetadataRef; 43 } 44 struct LLVMOpaqueBasicBlock {}; alias LLVMOpaqueBasicBlock* LLVMBasicBlockRef; 45 static if (LLVM_Version >= asVersion(5, 0, 0)) { 46 struct LLVMOpaqueDIBuilder; alias LLVMOpaqueDIBuilder* LLVMDIBuilderRef; 47 } 48 struct LLVMOpaqueBuilder {}; alias LLVMOpaqueBuilder* LLVMBuilderRef; 49 struct LLVMOpaqueModuleProvider {}; alias LLVMOpaqueModuleProvider* LLVMModuleProviderRef; 50 struct LLVMOpaqueMemoryBuffer {}; alias LLVMOpaqueMemoryBuffer* LLVMMemoryBufferRef; 51 struct LLVMOpaquePassManager {}; alias LLVMOpaquePassManager* LLVMPassManagerRef; 52 struct LLVMOpaquePassRegistry {}; alias LLVMOpaquePassRegistry* LLVMPassRegistryRef; 53 struct LLVMOpaqueUse {}; alias LLVMOpaqueUse* LLVMUseRef; 54 55 static if (LLVM_Version >= asVersion(3, 9, 0)) { 56 struct LLVMOpaqueAttributeRef {}; alias LLVMOpaqueAttributeRef* LLVMAttributeRef; 57 } 58 59 alias long LLVMAttribute; 60 alias int LLVMOpcode; 61 alias int LLVMTypeKind; 62 alias int LLVMLinkage; 63 alias int LLVMVisibility; 64 alias int LLVMDLLStorageClass; 65 alias int LLVMCallConv; 66 alias int LLVMIntPredicate; 67 alias int LLVMRealPredicate; 68 alias int LLVMLandingPadClauseTy; 69 static if (LLVM_Version >= asVersion(3, 3, 0)) 70 { 71 alias int LLVMThreadLocalMode; 72 alias int LLVMAtomicOrdering; 73 alias int LLVMAtomicRMWBinOp; 74 } 75 static if (LLVM_Version >= asVersion(3, 5, 0)) 76 { 77 alias int LLVMDiagnosticSeverity; 78 } 79 static if (LLVM_Version >= asVersion(3, 9, 0)) 80 { 81 alias int LLVMValueKind; 82 alias uint LLVMAttributeIndex; 83 } 84 /+ Disassembler +/ 85 86 alias void* LLVMDisasmContextRef; 87 alias extern(C) int function(void* DisInfo, ulong PC, ulong Offset, ulong Size, int TagType, void* TagBuf) LLVMOpInfoCallback; 88 alias extern(C) const char* function(void* DisInfo, ulong ReferenceValue, ulong* ReferenceType, ulong ReferencePC, const char** ReferenceName) LLVMSymbolLookupCallback; 89 90 struct LLVMOpInfoSymbol1 91 { 92 ulong Present; 93 const(char)* Name; 94 ulong Value; 95 } 96 97 struct LLVMOpInfo1 98 { 99 LLVMOpInfoSymbol1 AddSymbol; 100 LLVMOpInfoSymbol1 SubtractSymbol; 101 ulong Value; 102 ulong VariantKind; 103 } 104 105 static if (LLVM_Version < asVersion(3, 3, 0)) 106 { 107 /+ Enhanced Disassembly +/ 108 109 alias void* EDDisassemblerRef; 110 alias void* EDInstRef; 111 alias void* EDTokenRef; 112 alias void* EDOperandRef; 113 114 alias int EDAssemblySyntax_t; 115 116 alias extern(C) int function(ubyte* Byte, ulong address, void* arg) EDByteReaderCallback; 117 alias extern(C) int function(ulong* value, uint regID, void* arg) EDRegisterReaderCallback; 118 119 alias extern(C) int function(ubyte* Byte, ulong address) EDByteBlock_t; 120 alias extern(C) int function(ulong* value, uint regID) EDRegisterBlock_t; 121 alias extern(C) int function(EDTokenRef token) EDTokenVisitor_t; 122 } 123 124 /+ Execution Engine +/ 125 126 struct LLVMOpaqueGenericValue {}; alias LLVMOpaqueGenericValue* LLVMGenericValueRef; 127 struct LLVMOpaqueExecutionEngine {}; alias LLVMOpaqueExecutionEngine* LLVMExecutionEngineRef; 128 129 static if (LLVM_Version >= asVersion(3, 3, 0)) 130 { 131 static if (LLVM_Version >= asVersion(3, 4, 0)) 132 { 133 struct LLVMOpaqueMCJITMemoryManager {}; alias LLVMOpaqueMCJITMemoryManager* LLVMMCJITMemoryManagerRef; 134 135 struct LLVMMCJITCompilerOptions 136 { 137 uint OptLevel; 138 LLVMCodeModel CodeModel; 139 LLVMBool NoFramePointerElim; 140 LLVMBool EnableFastISel; 141 LLVMMCJITMemoryManagerRef MCJMM; 142 } 143 144 alias extern(C) ubyte function(void* Opaque, uintptr_t Size, uint Alignment, uint SectionID, const char* SectionName) LLVMMemoryManagerAllocateCodeSectionCallback; 145 alias extern(C) ubyte function(void* Opaque, uintptr_t Size, uint Alignment, uint SectionID, const char* SectionName, LLVMBool IsReadOnly) LLVMMemoryManagerAllocateDataSectionCallback; 146 alias extern(C) LLVMBool function(void* Opaque, char** ErrMsg) LLVMMemoryManagerFinalizeMemoryCallback; 147 alias extern(C) void function(void* Opaque) LLVMMemoryManagerDestroyCallback; 148 } 149 else 150 { 151 struct LLVMMCJITCompilerOptions 152 { 153 uint OptLevel; 154 LLVMCodeModel CodeModel; 155 LLVMBool NoFramePointerElim; 156 LLVMBool EnableFastISel; 157 } 158 } 159 } 160 161 static if (LLVM_Version >= asVersion(3, 2, 0)) 162 { 163 /+ Linker +/ 164 165 alias int LLVMLinkerMode; 166 } 167 168 /+ Link Time Optimization +/ 169 alias bool lto_bool_t; 170 alias void* llvm_lto_t; 171 alias llvm_lto_status llvm_lto_status_t; 172 173 174 alias int llvm_lto_status; 175 176 /+ LTO +/ 177 178 static if (LLVM_Version >= asVersion(3, 5, 0)) 179 { 180 struct LLVMOpaqueLTOModule {}; alias LLVMOpaqueLTOModule* lto_module_t; 181 } 182 else 183 { 184 struct LTOModule {}; alias LTOModule* lto_module_t; 185 } 186 static if (LLVM_Version >= asVersion(3, 5, 0)) 187 { 188 struct LLVMOpaqueLTOCodeGenerator {}; alias LLVMOpaqueLTOCodeGenerator* lto_code_gen_t; 189 } 190 else 191 { 192 struct LTOCodeGenerator {}; alias LTOCodeGenerator* lto_code_gen_t; 193 } 194 static if (LLVM_Version >= asVersion(3, 9, 0)) 195 { 196 struct LLVMOpaqueThinLTOCodeGenerator {}; alias LLVMOpaqueThinLTOCodeGenerator* thinlto_code_gen_t; 197 } 198 199 alias int lto_symbol_attributes; 200 alias int lto_debug_model; 201 alias int lto_codegen_model; 202 alias int lto_codegen_diagnostic_severity_t; 203 alias extern(C) void function(lto_codegen_diagnostic_severity_t severity, const(char)* diag, void* ctxt) lto_diagnostic_handler_t; 204 205 /+ Object file reading and writing +/ 206 207 struct LLVMOpaqueObjectFile {}; alias LLVMOpaqueObjectFile* LLVMObjectFileRef; 208 struct LLVMOpaqueSectionIterator {}; alias LLVMOpaqueSectionIterator* LLVMSectionIteratorRef; 209 struct LLVMOpaqueSymbolIterator {}; alias LLVMOpaqueSymbolIterator* LLVMSymbolIteratorRef; 210 struct LLVMOpaqueRelocationIterator {}; alias LLVMOpaqueRelocationIterator* LLVMRelocationIteratorRef; 211 212 /+ Target information +/ 213 214 struct LLVMOpaqueTargetData {}; alias LLVMOpaqueTargetData* LLVMTargetDataRef; 215 struct LLVMOpaqueTargetLibraryInfotData {}; alias LLVMOpaqueTargetLibraryInfotData* LLVMTargetLibraryInfoRef; 216 static if (LLVM_Version < asVersion(3, 4, 0)) 217 { 218 struct LLVMStructLayout {}; alias LLVMStructLayout* LLVMStructLayoutRef; 219 } 220 alias int LLVMByteOrdering; 221 222 /+ Target machine +/ 223 224 struct LLVMOpaqueTargetMachine {}; alias LLVMOpaqueTargetMachine* LLVMTargetMachineRef; 225 struct LLVMTarget {}; alias LLVMTarget* LLVMTargetRef; 226 227 alias int LLVMCodeGenOptLevel; 228 alias int LLVMRelocMode; 229 alias int LLVMCodeModel; 230 alias int LLVMCodeGenFileType; 231 232 static if (LLVM_Version >= asVersion(5, 0, 0) && LLVM_Version < asVersion(7, 0, 0)) { 233 struct LLVMOpaqueSharedModule; alias LLVMOpaqueSharedModule* LLVMSharedModuleRef; 234 } 235 static if (LLVM_Version >= asVersion(5, 0, 0) && LLVM_Version < asVersion(6, 0, 0)) { 236 struct LLVMOpaqueSharedObjectBuffer; alias LLVMOpaqueSharedObjectBuffer* LLVMSharedObjectBufferRef; 237 } 238 239 static if (LLVM_Version >= asVersion(3, 8, 0)) 240 { 241 /+ JIT compilation of LLVM IR +/ 242 243 struct LLVMOrcOpaqueJITStack {}; alias LLVMOrcOpaqueJITStack* LLVMOrcJITStackRef; 244 } 245 246 static if (LLVM_Version >= asVersion(7, 0, 0)) 247 { 248 alias uint64_t LLVMOrcModuleHandle; 249 } 250 else static if (LLVM_Version >= asVersion(3, 8, 0)) 251 { 252 alias uint32_t LLVMOrcModuleHandle; 253 } 254 255 static if (LLVM_Version >= asVersion(3, 8, 0)) 256 { 257 alias ulong LLVMOrcTargetAddress; 258 259 alias extern(C) ulong function(const(char)* Name, void* LookupCtx) LLVMOrcSymbolResolverFn; 260 alias extern(C) ulong function(LLVMOrcJITStackRef JITStack, void* CallbackCtx) LLVMOrcLazyCompileCallbackFn; 261 } 262 263 static if (LLVM_Version >= asVersion(3, 9, 0)) 264 { 265 alias int LLVMOrcErrorCode; 266 267 struct LTOObjectBuffer 268 { 269 const(char)* Buffer; 270 size_t Size; 271 } 272 } 273 274 /+ Debug info flags +/ 275 276 static if (LLVM_Version >= asVersion(6, 0, 0)) 277 { 278 alias int LLVMDIFlags; 279 alias int LLVMDWARFSourceLanguage; 280 alias int LLVMDWARFEmissionKind; 281 } 282 283 284 static if (LLVM_Version >= asVersion(7, 0, 0)) 285 { 286 alias int LLVMComdatSelectionKind; 287 alias int LLVMUnnamedAddr; 288 alias int LLVMInlineAsmDialect; 289 alias int LLVMModuleFlagBehavior; 290 alias int LLVMDWARFTypeEncoding; 291 292 } 293 294 295 static if (LLVM_Version >= asVersion(7, 0, 0)) { 296 struct LLVMComdat; alias LLVMComdat* LLVMComdatRef; 297 } 298 299 static if (LLVM_Version >= asVersion(7, 0, 0)) { 300 struct LLVMOpaqueModuleFlagEntry; alias LLVMOpaqueModuleFlagEntry* LLVMModuleFlagEntry; 301 } 302 303 static if (LLVM_Version >= asVersion(7, 0, 0)) { 304 struct LLVMOpaqueJITEventListener; alias LLVMOpaqueJITEventListener* LLVMJITEventListenerRef; 305 }