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