1 module llvm.constants; 2 3 import llvm.config; 4 import llvm.types; 5 6 /+ Analysis +/ 7 8 enum : LLVMVerifierFailureAction 9 { 10 LLVMAbortProcessAction, 11 LLVMPrintMessageAction, 12 LLVMReturnStatusAction 13 } 14 15 /+ Core +/ 16 17 /++ Types and Enumerations ++/ 18 19 enum : LLVMAttribute 20 { 21 LLVMZExtAttribute = 1<<0, 22 LLVMSExtAttribute = 1<<1, 23 LLVMNoReturnAttribute = 1<<2, 24 LLVMInRegAttribute = 1<<3, 25 LLVMStructRetAttribute = 1<<4, 26 LLVMNoUnwindAttribute = 1<<5, 27 LLVMNoAliasAttribute = 1<<6, 28 LLVMByValAttribute = 1<<7, 29 LLVMNestAttribute = 1<<8, 30 LLVMReadNoneAttribute = 1<<9, 31 LLVMReadOnlyAttribute = 1<<10, 32 LLVMNoInlineAttribute = 1<<11, 33 LLVMAlwaysInlineAttribute = 1<<12, 34 LLVMOptimizeForSizeAttribute = 1<<13, 35 LLVMStackProtectAttribute = 1<<14, 36 LLVMStackProtectReqAttribute = 1<<15, 37 LLVMAlignment = 31<<16, 38 LLVMNoCaptureAttribute = 1<<21, 39 LLVMNoRedZoneAttribute = 1<<22, 40 LLVMNoImplicitFloatAttribute = 1<<23, 41 LLVMNakedAttribute = 1<<24, 42 LLVMInlineHintAttribute = 1<<25, 43 LLVMStackAlignment = 7<<26, 44 LLVMReturnsTwice = 1<<29, 45 LLVMUWTable = 1<<30, 46 LLVMNonLazyBind = 1<<31 47 } 48 49 enum : LLVMOpcode 50 { 51 LLVMRet = 1, 52 LLVMBr = 2, 53 LLVMSwitch = 3, 54 LLVMIndirectBr = 4, 55 LLVMInvoke = 5, 56 LLVMUnreachable = 7, 57 LLVMAdd = 8, 58 LLVMFAdd = 9, 59 LLVMSub = 10, 60 LLVMFSub = 11, 61 LLVMMul = 12, 62 LLVMFMul = 13, 63 LLVMUDiv = 14, 64 LLVMSDiv = 15, 65 LLVMFDiv = 16, 66 LLVMURem = 17, 67 LLVMSRem = 18, 68 LLVMFRem = 19, 69 LLVMShl = 20, 70 LLVMLShr = 21, 71 LLVMAShr = 22, 72 LLVMAnd = 23, 73 LLVMOr = 24, 74 LLVMXor = 25, 75 LLVMAlloca = 26, 76 LLVMLoad = 27, 77 LLVMStore = 28, 78 LLVMGetElementPtr = 29, 79 LLVMTrunc = 30, 80 LLVMZExt = 31, 81 LLVMSExt = 32, 82 LLVMFPToUI = 33, 83 LLVMFPToSI = 34, 84 LLVMUIToFP = 35, 85 LLVMSIToFP = 36, 86 LLVMFPTrunc = 37, 87 LLVMFPExt = 38, 88 LLVMPtrToInt = 39, 89 LLVMIntToPtr = 40, 90 LLVMBitCast = 41, 91 LLVMICmp = 42, 92 LLVMFCmp = 43, 93 LLVMPHI = 44, 94 LLVMCall = 45, 95 LLVMSelect = 46, 96 LLVMUserOp1 = 47, 97 LLVMUserOp2 = 48, 98 LLVMVAArg = 49, 99 LLVMExtractElement = 50, 100 LLVMInsertElement = 51, 101 LLVMShuffleVector = 52, 102 LLVMExtractValue = 53, 103 LLVMInsertValue = 54, 104 LLVMFence = 55, 105 LLVMAtomicCmpXchg = 56, 106 LLVMAtomicRMW = 57, 107 LLVMResume = 58, 108 LLVMLandingPad = 59, 109 } 110 static if (LLVM_Version >= asVersion(3, 4, 0)) 111 { 112 enum : LLVMOpcode 113 { 114 LLVMAddrSpaceCast = 60 115 } 116 } 117 static if (LLVM_Version >= asVersion(3, 8, 0)) 118 { 119 enum : LLVMOpcode 120 { 121 LLVMCleanupRet = 61, 122 LLVMCatchRet = 62, 123 LLVMCatchPad = 63, 124 LLVMCleanupPad = 64, 125 LLVMCatchSwitch = 65 126 } 127 } 128 129 static if (LLVM_Version >= asVersion(3, 9, 0)) 130 { 131 enum : LLVMValueKind 132 { 133 LLVMArgumentValueKind, 134 LLVMBasicBlockValueKind, 135 LLVMMemoryUseValueKind, 136 LLVMMemoryDefValueKind, 137 LLVMMemoryPhiValueKind, 138 LLVMFunctionValueKind, 139 LLVMGlobalAliasValueKind, 140 LLVMGlobalIFuncValueKind, 141 LLVMGlobalVariableValueKind, 142 LLVMBlockAddressValueKind, 143 LLVMConstantExprValueKind, 144 LLVMConstantArrayValueKind, 145 LLVMConstantStructValueKind, 146 LLVMConstantVectorValueKind, 147 LLVMUndefValueValueKind, 148 LLVMConstantAggregateZeroValueKind, 149 LLVMConstantDataArrayValueKind, 150 LLVMConstantDataVectorValueKind, 151 LLVMConstantIntValueKind, 152 LLVMConstantFPValueKind, 153 LLVMConstantPointerNullValueKind, 154 LLVMConstantTokenNoneValueKind, 155 LLVMMetadataAsValueValueKind, 156 LLVMInlineAsmValueKind, 157 LLVMInstructionValueKind, 158 } 159 160 enum : LLVMAttributeIndex 161 { 162 LLVMAttributeReturnIndex = 0U, 163 LLVMAttributeFunctionIndex = -1, 164 } 165 } 166 167 static if (LLVM_Version >= asVersion(3, 8, 0)) { 168 enum : LLVMTypeKind 169 { 170 LLVMVoidTypeKind, 171 LLVMHalfTypeKind, 172 LLVMFloatTypeKind, 173 LLVMDoubleTypeKind, 174 LLVMX86_FP80TypeKind, 175 LLVMFP128TypeKind, 176 LLVMPPC_FP128TypeKind, 177 LLVMLabelTypeKind, 178 LLVMIntegerTypeKind, 179 LLVMFunctionTypeKind, 180 LLVMStructTypeKind, 181 LLVMArrayTypeKind, 182 LLVMPointerTypeKind, 183 LLVMVectorTypeKind, 184 LLVMMetadataTypeKind, 185 LLVMX86_MMXTypeKind, 186 LLVMTokenTypeKind 187 } 188 } else { 189 enum : LLVMTypeKind 190 { 191 LLVMVoidTypeKind, 192 LLVMHalfTypeKind, 193 LLVMFloatTypeKind, 194 LLVMDoubleTypeKind, 195 LLVMX86_FP80TypeKind, 196 LLVMFP128TypeKind, 197 LLVMPPC_FP128TypeKind, 198 LLVMLabelTypeKind, 199 LLVMIntegerTypeKind, 200 LLVMFunctionTypeKind, 201 LLVMStructTypeKind, 202 LLVMArrayTypeKind, 203 LLVMPointerTypeKind, 204 LLVMVectorTypeKind, 205 LLVMMetadataTypeKind, 206 LLVMX86_MMXTypeKind, 207 LLVMTokenTypeKind 208 } 209 } 210 211 static if (LLVM_Version >= asVersion(3, 2, 0)) { 212 enum : LLVMLinkage 213 { 214 LLVMExternalLinkage, 215 LLVMAvailableExternallyLinkage, 216 LLVMLinkOnceAnyLinkage, 217 LLVMLinkOnceODRLinkage, 218 LLVMLinkOnceODRAutoHideLinkage, 219 LLVMWeakAnyLinkage, 220 LLVMWeakODRLinkage, 221 LLVMAppendingLinkage, 222 LLVMInternalLinkage, 223 LLVMPrivateLinkage, 224 LLVMDLLImportLinkage, 225 LLVMDLLExportLinkage, 226 LLVMExternalWeakLinkage, 227 LLVMGhostLinkage, 228 LLVMCommonLinkage, 229 LLVMLinkerPrivateLinkage, 230 LLVMLinkerPrivateWeakLinkage, 231 } 232 } else { 233 enum : LLVMLinkage 234 { 235 LLVMExternalLinkage, 236 LLVMAvailableExternallyLinkage, 237 LLVMLinkOnceAnyLinkage, 238 LLVMLinkOnceODRLinkage, 239 LLVMWeakAnyLinkage, 240 LLVMWeakODRLinkage, 241 LLVMAppendingLinkage, 242 LLVMInternalLinkage, 243 LLVMPrivateLinkage, 244 LLVMDLLImportLinkage, 245 LLVMDLLExportLinkage, 246 LLVMExternalWeakLinkage, 247 LLVMGhostLinkage, 248 LLVMCommonLinkage, 249 LLVMLinkerPrivateLinkage, 250 LLVMLinkerPrivateWeakLinkage, 251 LLVMLinkerPrivateWeakDefAutoLinkage 252 } 253 } 254 255 enum : LLVMVisibility 256 { 257 LLVMDefaultVisibility, 258 LLVMHiddenVisibility, 259 LLVMProtectedVisibility 260 } 261 262 static if (LLVM_Version >= asVersion(3, 5, 0)) 263 { 264 enum : LLVMDLLStorageClass { 265 LLVMDefaultStorageClass = 0, 266 LLVMDLLImportStorageClass = 1, 267 LLVMDLLExportStorageClass = 2 268 } 269 } 270 271 static if (LLVM_Version >= asVersion(3, 4, 0)) 272 { 273 enum : LLVMCallConv { 274 LLVMCCallConv = 0, 275 LLVMFastCallConv = 8, 276 LLVMColdCallConv = 9, 277 LLVMWebKitJSCallConv = 12, 278 LLVMAnyRegCallConv = 13, 279 LLVMX86StdcallCallConv = 64, 280 LLVMX86FastcallCallConv = 65 281 } 282 } else { 283 enum : LLVMCallConv { 284 LLVMCCallConv = 0, 285 LLVMFastCallConv = 8, 286 LLVMColdCallConv = 9, 287 LLVMX86StdcallCallConv = 64, 288 LLVMX86FastcallCallConv = 65 289 } 290 } 291 292 enum : LLVMIntPredicate 293 { 294 LLVMIntEQ = 32, 295 LLVMIntNE, 296 LLVMIntUGT, 297 LLVMIntUGE, 298 LLVMIntULT, 299 LLVMIntULE, 300 LLVMIntSGT, 301 LLVMIntSGE, 302 LLVMIntSLT, 303 LLVMIntSLE 304 } 305 306 enum : LLVMRealPredicate 307 { 308 LLVMRealPredicateFalse, 309 LLVMRealOEQ, 310 LLVMRealOGT, 311 LLVMRealOGE, 312 LLVMRealOLT, 313 LLVMRealOLE, 314 LLVMRealONE, 315 LLVMRealORD, 316 LLVMRealUNO, 317 LLVMRealUEQ, 318 LLVMRealUGT, 319 LLVMRealUGE, 320 LLVMRealULT, 321 LLVMRealULE, 322 LLVMRealUNE, 323 LLVMRealPredicateTrue 324 } 325 326 enum : LLVMLandingPadClauseTy 327 { 328 LLVMLandingPadCatch, 329 LLVMLandingPadFilter 330 } 331 332 static if (LLVM_Version >= asVersion(3, 3, 0)) 333 { 334 enum : LLVMThreadLocalMode 335 { 336 LLVMNotThreadLocal = 0, 337 LLVMGeneralDynamicTLSModel, 338 LLVMLocalDynamicTLSModel, 339 LLVMInitialExecTLSModel, 340 LLVMLocalExecTLSModel 341 } 342 343 enum : LLVMAtomicOrdering 344 { 345 LLVMAtomicOrderingNotAtomic = 0, 346 LLVMAtomicOrderingUnordered = 1, 347 LLVMAtomicOrderingMonotonic = 2, 348 LLVMAtomicOrderingAcquire = 4, 349 LLVMAtomicOrderingRelease = 5, 350 LLVMAtomicOrderingAcquireRelease = 6, 351 LLVMAtomicOrderingSequentiallyConsistent = 7 352 } 353 354 enum : LLVMAtomicRMWBinOp 355 { 356 LLVMAtomicRMWBinOpXchg, 357 LLVMAtomicRMWBinOpAdd, 358 LLVMAtomicRMWBinOpSub, 359 LLVMAtomicRMWBinOpAnd, 360 LLVMAtomicRMWBinOpNand, 361 LLVMAtomicRMWBinOpOr, 362 LLVMAtomicRMWBinOpXor, 363 LLVMAtomicRMWBinOpMax, 364 LLVMAtomicRMWBinOpMin, 365 LLVMAtomicRMWBinOpUMax, 366 LLVMAtomicRMWBinOpUMin 367 } 368 } 369 static if (LLVM_Version >= asVersion(3, 5, 0)) 370 { 371 enum : LLVMDiagnosticSeverity { 372 LLVMDSError, 373 LLVMDSWarning, 374 LLVMDSRemark, 375 LLVMDSNote 376 } 377 } 378 379 /+ Disassembler +/ 380 381 //TODO: replace const with enum? 382 const 383 { 384 uint LLVMDisassembler_VariantKind_None = 0; 385 uint LLVMDisassembler_VariantKind_ARM_HI16 = 1; 386 uint LLVMDisassembler_VariantKind_ARM_LO16 = 2; 387 static if (LLVM_Version >= asVersion(3, 5, 0)) 388 { 389 uint LLVMDisassembler_VariantKind_ARM64_PAGE = 1; 390 uint LLVMDisassembler_VariantKind_ARM64_PAGEOFF = 2; 391 uint LLVMDisassembler_VariantKind_ARM64_GOTPAGE = 3; 392 uint LLVMDisassembler_VariantKind_ARM64_GOTPAGEOFF = 4; 393 uint LLVMDisassembler_VariantKind_ARM64_TLVP = 5; 394 uint LLVMDisassembler_VariantKind_ARM64_TLVOFF = 6; 395 } 396 uint LLVMDisassembler_ReferenceType_InOut_None = 0; 397 uint LLVMDisassembler_ReferenceType_In_Branch = 1; 398 uint LLVMDisassembler_ReferenceType_In_PCrel_Load = 2; 399 static if (LLVM_Version >= asVersion(3, 5, 0)) 400 { 401 ulong LLVMDisassembler_ReferenceType_In_ARM64_ADRP = 0x100000001; 402 ulong LLVMDisassembler_ReferenceType_In_ARM64_ADDXri = 0x100000002; 403 ulong LLVMDisassembler_ReferenceType_In_ARM64_LDRXui = 0x100000003; 404 ulong LLVMDisassembler_ReferenceType_In_ARM64_LDRXl = 0x100000004; 405 ulong LLVMDisassembler_ReferenceType_In_ARM64_ADR = 0x100000005; 406 } 407 uint LLVMDisassembler_ReferenceType_Out_SymbolStub = 1; 408 uint LLVMDisassembler_ReferenceType_Out_LitPool_SymAddr = 2; 409 uint LLVMDisassembler_ReferenceType_Out_LitPool_CstrAddr = 3; 410 static if (LLVM_Version >= asVersion(3, 2, 0)) 411 { 412 uint LLVMDisassembler_Option_UseMarkup = 1; 413 } 414 static if (LLVM_Version >= asVersion(3, 3, 0)) 415 { 416 uint LLVMDisassembler_Option_PrintImmHex = 2; 417 uint LLVMDisassembler_Option_AsmPrinterVariant = 4; 418 } 419 static if (LLVM_Version >= asVersion(3, 4, 0)) 420 { 421 uint LLVMDisassembler_ReferenceType_Out_Objc_CFString_Ref = 4; 422 uint LLVMDisassembler_ReferenceType_Out_Objc_Message = 5; 423 uint LLVMDisassembler_ReferenceType_Out_Objc_Message_Ref = 6; 424 uint LLVMDisassembler_ReferenceType_Out_Objc_Selector_Ref = 7; 425 uint LLVMDisassembler_ReferenceType_Out_Objc_Class_Ref = 8; 426 uint LLVMDisassembler_Option_SetInstrComments = 8; 427 uint LLVMDisassembler_Option_PrintLatency = 16; 428 } 429 static if (LLVM_Version >= asVersion(3, 5, 0)) 430 { 431 uint LLVMDisassembler_ReferenceType_DeMangled_Name = 9; 432 } 433 } 434 435 static if (LLVM_Version < asVersion(3, 3, 0)) 436 { 437 /+ Enhanced Disassembly +/ 438 439 enum : EDAssemblySyntax_t 440 { 441 kEDAssemblySyntaxX86Intel = 0, 442 kEDAssemblySyntaxX86ATT = 1, 443 kEDAssemblySyntaxARMUAL = 2 444 } 445 } 446 447 /+ Linker +/ 448 static if (LLVM_Version >= asVersion(3, 2, 0)) 449 { 450 enum : LLVMLinkerMode 451 { 452 LLVMLinkerDestroySource = 0 453 } 454 455 static if (LLVM_Version < asVersion(3, 7, 0)) 456 { 457 enum : LLVMLinkerMode 458 { 459 LLVMLinkerPreserveSource = 1 460 } 461 } 462 } 463 464 /+ Link Time Optimization +/ 465 466 enum : llvm_lto_status 467 { 468 LLVM_LTO_UNKNOWN, 469 LLVM_LTO_OPT_SUCCESS, 470 LLVM_LTO_READ_SUCCESS, 471 LLVM_LTO_READ_FAILURE, 472 LLVM_LTO_WRITE_FAILURE, 473 LLVM_LTO_NO_TARGET, 474 LLVM_LTO_NO_WORK, 475 LLVM_LTO_MODULE_MERGE_FAILURE, 476 LLVM_LTO_ASM_FAILURE, 477 LLVM_LTO_NULL_OBJECT 478 } 479 480 /+ LTO +/ 481 482 static if (LLVM_Version >= asVersion(3, 7, 0)) 483 { 484 const uint LTO_API_VERSION = 17; 485 } 486 else static if (LLVM_Version >= asVersion(3, 6, 0)) 487 { 488 const uint LTO_API_VERSION = 11; 489 } 490 else static if (LLVM_Version >= asVersion(3, 5, 0)) 491 { 492 const uint LTO_API_VERSION = 10; 493 } 494 else static if (LLVM_Version >= asVersion(3, 4, 0)) 495 { 496 const uint LTO_API_VERSION = 5; 497 } 498 else 499 { 500 const uint LTO_API_VERSION = 4; 501 } 502 503 enum : lto_symbol_attributes 504 { 505 LTO_SYMBOL_ALIGNMENT_MASK = 0x0000001F, 506 LTO_SYMBOL_PERMISSIONS_MASK = 0x000000E0, 507 LTO_SYMBOL_PERMISSIONS_CODE = 0x000000A0, 508 LTO_SYMBOL_PERMISSIONS_DATA = 0x000000C0, 509 LTO_SYMBOL_PERMISSIONS_RODATA = 0x00000080, 510 LTO_SYMBOL_DEFINITION_MASK = 0x00000700, 511 LTO_SYMBOL_DEFINITION_REGULAR = 0x00000100, 512 LTO_SYMBOL_DEFINITION_TENTATIVE = 0x00000200, 513 LTO_SYMBOL_DEFINITION_WEAK = 0x00000300, 514 LTO_SYMBOL_DEFINITION_UNDEFINED = 0x00000400, 515 LTO_SYMBOL_DEFINITION_WEAKUNDEF = 0x00000500, 516 LTO_SYMBOL_SCOPE_MASK = 0x00003800, 517 LTO_SYMBOL_SCOPE_INTERNAL = 0x00000800, 518 LTO_SYMBOL_SCOPE_HIDDEN = 0x00001000, 519 LTO_SYMBOL_SCOPE_PROTECTED = 0x00002000, 520 LTO_SYMBOL_SCOPE_DEFAULT = 0x00001800, 521 LTO_SYMBOL_SCOPE_DEFAULT_CAN_BE_HIDDEN = 0x00002800, 522 } 523 static if (LLVM_Version >= asVersion(3, 7, 0)) 524 { 525 enum : lto_symbol_attributes 526 { 527 LTO_SYMBOL_COMDAT = 0x00004000, 528 LTO_SYMBOL_ALIAS = 0x00008000 529 } 530 } 531 532 enum : lto_debug_model 533 { 534 LTO_DEBUG_MODEL_NONE = 0, 535 LTO_DEBUG_MODEL_DWARF = 1 536 } 537 538 enum : lto_codegen_model 539 { 540 LTO_CODEGEN_PIC_MODEL_STATIC = 0, 541 LTO_CODEGEN_PIC_MODEL_DYNAMIC = 1, 542 LTO_CODEGEN_PIC_MODEL_DYNAMIC_NO_PIC = 2, 543 LTO_CODEGEN_PIC_MODEL_DEFAULT = 3 544 } 545 546 static if (LLVM_Version >= asVersion(3, 5, 0)) 547 { 548 enum : lto_codegen_diagnostic_severity_t 549 { 550 LTO_DS_ERROR = 0, 551 LTO_DS_WARNING = 1, 552 LTO_DS_REMARK = 3, 553 LTO_DS_NOTE = 2 554 } 555 } 556 557 /+ Target information +/ 558 559 enum : LLVMByteOrdering 560 { 561 LLVMBigEndian, 562 LLVMLittleEndian 563 } 564 565 /+ Target machine +/ 566 567 enum : LLVMCodeGenOptLevel 568 { 569 LLVMCodeGenLevelNone, 570 LLVMCodeGenLevelLess, 571 LLVMCodeGenLevelDefault, 572 LLVMCodeGenLevelAggressive 573 } 574 575 enum : LLVMRelocMode 576 { 577 LLVMRelocDefault, 578 LLVMRelocStatic, 579 LLVMRelocPIC, 580 LLVMRelocDynamicNoPic 581 } 582 583 enum : LLVMCodeModel 584 { 585 LLVMCodeModelDefault, 586 LLVMCodeModelJITDefault, 587 LLVMCodeModelSmall, 588 LLVMCodeModelKernel, 589 LLVMCodeModelMedium, 590 LLVMCodeModelLarge 591 } 592 593 enum : LLVMCodeGenFileType 594 { 595 LLVMAssemblyFile, 596 LLVMObjectFile 597 } 598 599 /+ Orc +/ 600 601 static if (LLVM_Version >= asVersion(3, 9, 0)) 602 { 603 enum : LLVMOrcErrorCode 604 { 605 LLVMOrcErrSuccess = 0, 606 LLVMOrcErrGeneric, 607 } 608 }