1 //===-- llvm/ADT/Triple.h - Target triple helper class ----------*- 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 #ifndef LLVM_ADT_TRIPLE_H 11 #define LLVM_ADT_TRIPLE_H 12 13 #include "llvm/ADT/Twine.h" 14 15 // Some system headers or GCC predefined macros conflict with identifiers in 16 // this file. Undefine them here. 17 #undef NetBSD 18 #undef mips 19 #undef sparc 20 21 namespace llvm { 22 23 /// Triple - Helper class for working with autoconf configuration names. For 24 /// historical reasons, we also call these 'triples' (they used to contain 25 /// exactly three fields). 26 /// 27 /// Configuration names are strings in the canonical form: 28 /// ARCHITECTURE-VENDOR-OPERATING_SYSTEM 29 /// or 30 /// ARCHITECTURE-VENDOR-OPERATING_SYSTEM-ENVIRONMENT 31 /// 32 /// This class is used for clients which want to support arbitrary 33 /// configuration names, but also want to implement certain special 34 /// behavior for particular configurations. This class isolates the mapping 35 /// from the components of the configuration name to well known IDs. 36 /// 37 /// At its core the Triple class is designed to be a wrapper for a triple 38 /// string; the constructor does not change or normalize the triple string. 39 /// Clients that need to handle the non-canonical triples that users often 40 /// specify should use the normalize method. 41 /// 42 /// See autoconf/config.guess for a glimpse into what configuration names 43 /// look like in practice. 44 class Triple { 45 public: 46 enum ArchType { 47 UnknownArch, 48 49 arm, // ARM (little endian): arm, armv.*, xscale 50 armeb, // ARM (big endian): armeb 51 aarch64, // AArch64 (little endian): aarch64 52 aarch64_be, // AArch64 (big endian): aarch64_be 53 avr, // AVR: Atmel AVR microcontroller 54 bpfel, // eBPF or extended BPF or 64-bit BPF (little endian) 55 bpfeb, // eBPF or extended BPF or 64-bit BPF (big endian) 56 hexagon, // Hexagon: hexagon 57 mips, // MIPS: mips, mipsallegrex 58 mipsel, // MIPSEL: mipsel, mipsallegrexel 59 mips64, // MIPS64: mips64 60 mips64el, // MIPS64EL: mips64el 61 msp430, // MSP430: msp430 62 ppc, // PPC: powerpc 63 ppc64, // PPC64: powerpc64, ppu 64 ppc64le, // PPC64LE: powerpc64le 65 r600, // R600: AMD GPUs HD2XXX - HD6XXX 66 amdgcn, // AMDGCN: AMD GCN GPUs 67 sparc, // Sparc: sparc 68 sparcv9, // Sparcv9: Sparcv9 69 sparcel, // Sparc: (endianness = little). NB: 'Sparcle' is a CPU variant 70 systemz, // SystemZ: s390x 71 tce, // TCE (http://tce.cs.tut.fi/): tce 72 thumb, // Thumb (little endian): thumb, thumbv.* 73 thumbeb, // Thumb (big endian): thumbeb 74 x86, // X86: i[3-9]86 75 x86_64, // X86-64: amd64, x86_64 76 xcore, // XCore: xcore 77 nvptx, // NVPTX: 32-bit 78 nvptx64, // NVPTX: 64-bit 79 le32, // le32: generic little-endian 32-bit CPU (PNaCl) 80 le64, // le64: generic little-endian 64-bit CPU (PNaCl) 81 amdil, // AMDIL 82 amdil64, // AMDIL with 64-bit pointers 83 hsail, // AMD HSAIL 84 hsail64, // AMD HSAIL with 64-bit pointers 85 spir, // SPIR: standard portable IR for OpenCL 32-bit version 86 spir64, // SPIR: standard portable IR for OpenCL 64-bit version 87 kalimba, // Kalimba: generic kalimba 88 shave, // SHAVE: Movidius vector VLIW processors 89 lanai, // Lanai: Lanai 32-bit 90 wasm32, // WebAssembly with 32-bit pointers 91 wasm64, // WebAssembly with 64-bit pointers 92 renderscript32, // 32-bit RenderScript 93 renderscript64, // 64-bit RenderScript 94 LastArchType = renderscript64 95 }; 96 enum SubArchType { 97 NoSubArch, 98 99 ARMSubArch_v8_2a, 100 ARMSubArch_v8_1a, 101 ARMSubArch_v8, 102 ARMSubArch_v8m_baseline, 103 ARMSubArch_v8m_mainline, 104 ARMSubArch_v7, 105 ARMSubArch_v7em, 106 ARMSubArch_v7m, 107 ARMSubArch_v7s, 108 ARMSubArch_v7k, 109 ARMSubArch_v6, 110 ARMSubArch_v6m, 111 ARMSubArch_v6k, 112 ARMSubArch_v6t2, 113 ARMSubArch_v5, 114 ARMSubArch_v5te, 115 ARMSubArch_v4t, 116 117 KalimbaSubArch_v3, 118 KalimbaSubArch_v4, 119 KalimbaSubArch_v5 120 }; 121 enum VendorType { 122 UnknownVendor, 123 124 Apple, 125 PC, 126 SCEI, 127 BGP, 128 BGQ, 129 Freescale, 130 IBM, 131 ImaginationTechnologies, 132 MipsTechnologies, 133 NVIDIA, 134 CSR, 135 Myriad, 136 AMD, 137 Mesa, 138 LastVendorType = Mesa 139 }; 140 enum OSType { 141 UnknownOS, 142 143 CloudABI, 144 Darwin, 145 DragonFly, 146 FreeBSD, 147 IOS, 148 KFreeBSD, 149 Linux, 150 Lv2, // PS3 151 MacOSX, 152 NetBSD, 153 OpenBSD, 154 Solaris, 155 Win32, 156 Haiku, 157 Minix, 158 RTEMS, 159 NaCl, // Native Client 160 CNK, // BG/P Compute-Node Kernel 161 Bitrig, 162 AIX, 163 CUDA, // NVIDIA CUDA 164 NVCL, // NVIDIA OpenCL 165 AMDHSA, // AMD HSA Runtime 166 PS4, 167 ELFIAMCU, 168 TvOS, // Apple tvOS 169 WatchOS, // Apple watchOS 170 Mesa3D, 171 LastOSType = Mesa3D 172 }; 173 enum EnvironmentType { 174 UnknownEnvironment, 175 176 GNU, 177 GNUEABI, 178 GNUEABIHF, 179 GNUX32, 180 CODE16, 181 EABI, 182 EABIHF, 183 Android, 184 Musl, 185 MuslEABI, 186 MuslEABIHF, 187 188 MSVC, 189 Itanium, 190 Cygnus, 191 AMDOpenCL, 192 CoreCLR, 193 LastEnvironmentType = CoreCLR 194 }; 195 enum ObjectFormatType { 196 UnknownObjectFormat, 197 198 COFF, 199 ELF, 200 MachO, 201 }; 202 203 private: 204 std::string Data; 205 206 /// The parsed arch type. 207 ArchType Arch; 208 209 /// The parsed subarchitecture type. 210 SubArchType SubArch; 211 212 /// The parsed vendor type. 213 VendorType Vendor; 214 215 /// The parsed OS type. 216 OSType OS; 217 218 /// The parsed Environment type. 219 EnvironmentType Environment; 220 221 /// The object format type. 222 ObjectFormatType ObjectFormat; 223 224 public: 225 /// @name Constructors 226 /// @{ 227 228 /// Default constructor is the same as an empty string and leaves all 229 /// triple fields unknown. 230 Triple() : Data(), Arch(), Vendor(), OS(), Environment(), ObjectFormat() {} 231 232 explicit Triple(const Twine &Str); 233 Triple(const Twine &ArchStr, const Twine &VendorStr, const Twine &OSStr); 234 Triple(const Twine &ArchStr, const Twine &VendorStr, const Twine &OSStr, 235 const Twine &EnvironmentStr); 236 237 bool operator==(const Triple &Other) const { 238 return Arch == Other.Arch && SubArch == Other.SubArch && 239 Vendor == Other.Vendor && OS == Other.OS && 240 Environment == Other.Environment && 241 ObjectFormat == Other.ObjectFormat; 242 } 243 244 /// @} 245 /// @name Normalization 246 /// @{ 247 248 /// normalize - Turn an arbitrary machine specification into the canonical 249 /// triple form (or something sensible that the Triple class understands if 250 /// nothing better can reasonably be done). In particular, it handles the 251 /// common case in which otherwise valid components are in the wrong order. 252 static std::string normalize(StringRef Str); 253 254 /// Return the normalized form of this triple's string. 255 std::string normalize() const { return normalize(Data); } 256 257 /// @} 258 /// @name Typed Component Access 259 /// @{ 260 261 /// getArch - Get the parsed architecture type of this triple. 262 ArchType getArch() const { return Arch; } 263 264 /// getSubArch - get the parsed subarchitecture type for this triple. 265 SubArchType getSubArch() const { return SubArch; } 266 267 /// getVendor - Get the parsed vendor type of this triple. 268 VendorType getVendor() const { return Vendor; } 269 270 /// getOS - Get the parsed operating system type of this triple. 271 OSType getOS() const { return OS; } 272 273 /// hasEnvironment - Does this triple have the optional environment 274 /// (fourth) component? 275 bool hasEnvironment() const { 276 return getEnvironmentName() != ""; 277 } 278 279 /// getEnvironment - Get the parsed environment type of this triple. 280 EnvironmentType getEnvironment() const { return Environment; } 281 282 /// Parse the version number from the OS name component of the 283 /// triple, if present. 284 /// 285 /// For example, "fooos1.2.3" would return (1, 2, 3). 286 /// 287 /// If an entry is not defined, it will be returned as 0. 288 void getEnvironmentVersion(unsigned &Major, unsigned &Minor, 289 unsigned &Micro) const; 290 291 /// getFormat - Get the object format for this triple. 292 ObjectFormatType getObjectFormat() const { return ObjectFormat; } 293 294 /// getOSVersion - Parse the version number from the OS name component of the 295 /// triple, if present. 296 /// 297 /// For example, "fooos1.2.3" would return (1, 2, 3). 298 /// 299 /// If an entry is not defined, it will be returned as 0. 300 void getOSVersion(unsigned &Major, unsigned &Minor, unsigned &Micro) const; 301 302 /// getOSMajorVersion - Return just the major version number, this is 303 /// specialized because it is a common query. 304 unsigned getOSMajorVersion() const { 305 unsigned Maj, Min, Micro; 306 getOSVersion(Maj, Min, Micro); 307 return Maj; 308 } 309 310 /// getMacOSXVersion - Parse the version number as with getOSVersion and then 311 /// translate generic "darwin" versions to the corresponding OS X versions. 312 /// This may also be called with IOS triples but the OS X version number is 313 /// just set to a constant 10.4.0 in that case. Returns true if successful. 314 bool getMacOSXVersion(unsigned &Major, unsigned &Minor, 315 unsigned &Micro) const; 316 317 /// getiOSVersion - Parse the version number as with getOSVersion. This should 318 /// only be called with IOS or generic triples. 319 void getiOSVersion(unsigned &Major, unsigned &Minor, 320 unsigned &Micro) const; 321 322 /// getWatchOSVersion - Parse the version number as with getOSVersion. This 323 /// should only be called with WatchOS or generic triples. 324 void getWatchOSVersion(unsigned &Major, unsigned &Minor, 325 unsigned &Micro) const; 326 327 /// @} 328 /// @name Direct Component Access 329 /// @{ 330 331 const std::string &str() const { return Data; } 332 333 const std::string &getTriple() const { return Data; } 334 335 /// getArchName - Get the architecture (first) component of the 336 /// triple. 337 StringRef getArchName() const; 338 339 /// getVendorName - Get the vendor (second) component of the triple. 340 StringRef getVendorName() const; 341 342 /// getOSName - Get the operating system (third) component of the 343 /// triple. 344 StringRef getOSName() const; 345 346 /// getEnvironmentName - Get the optional environment (fourth) 347 /// component of the triple, or "" if empty. 348 StringRef getEnvironmentName() const; 349 350 /// getOSAndEnvironmentName - Get the operating system and optional 351 /// environment components as a single string (separated by a '-' 352 /// if the environment component is present). 353 StringRef getOSAndEnvironmentName() const; 354 355 /// @} 356 /// @name Convenience Predicates 357 /// @{ 358 359 /// Test whether the architecture is 64-bit 360 /// 361 /// Note that this tests for 64-bit pointer width, and nothing else. Note 362 /// that we intentionally expose only three predicates, 64-bit, 32-bit, and 363 /// 16-bit. The inner details of pointer width for particular architectures 364 /// is not summed up in the triple, and so only a coarse grained predicate 365 /// system is provided. 366 bool isArch64Bit() const; 367 368 /// Test whether the architecture is 32-bit 369 /// 370 /// Note that this tests for 32-bit pointer width, and nothing else. 371 bool isArch32Bit() const; 372 373 /// Test whether the architecture is 16-bit 374 /// 375 /// Note that this tests for 16-bit pointer width, and nothing else. 376 bool isArch16Bit() const; 377 378 /// isOSVersionLT - Helper function for doing comparisons against version 379 /// numbers included in the target triple. 380 bool isOSVersionLT(unsigned Major, unsigned Minor = 0, 381 unsigned Micro = 0) const { 382 unsigned LHS[3]; 383 getOSVersion(LHS[0], LHS[1], LHS[2]); 384 385 if (LHS[0] != Major) 386 return LHS[0] < Major; 387 if (LHS[1] != Minor) 388 return LHS[1] < Minor; 389 if (LHS[2] != Micro) 390 return LHS[1] < Micro; 391 392 return false; 393 } 394 395 bool isOSVersionLT(const Triple &Other) const { 396 unsigned RHS[3]; 397 Other.getOSVersion(RHS[0], RHS[1], RHS[2]); 398 return isOSVersionLT(RHS[0], RHS[1], RHS[2]); 399 } 400 401 /// isMacOSXVersionLT - Comparison function for checking OS X version 402 /// compatibility, which handles supporting skewed version numbering schemes 403 /// used by the "darwin" triples. 404 bool isMacOSXVersionLT(unsigned Major, unsigned Minor = 0, 405 unsigned Micro = 0) const { 406 assert(isMacOSX() && "Not an OS X triple!"); 407 408 // If this is OS X, expect a sane version number. 409 if (getOS() == Triple::MacOSX) 410 return isOSVersionLT(Major, Minor, Micro); 411 412 // Otherwise, compare to the "Darwin" number. 413 assert(Major == 10 && "Unexpected major version"); 414 return isOSVersionLT(Minor + 4, Micro, 0); 415 } 416 417 /// isMacOSX - Is this a Mac OS X triple. For legacy reasons, we support both 418 /// "darwin" and "osx" as OS X triples. 419 bool isMacOSX() const { 420 return getOS() == Triple::Darwin || getOS() == Triple::MacOSX; 421 } 422 423 /// Is this an iOS triple. 424 /// Note: This identifies tvOS as a variant of iOS. If that ever 425 /// changes, i.e., if the two operating systems diverge or their version 426 /// numbers get out of sync, that will need to be changed. 427 /// watchOS has completely different version numbers so it is not included. 428 bool isiOS() const { 429 return getOS() == Triple::IOS || isTvOS(); 430 } 431 432 /// Is this an Apple tvOS triple. 433 bool isTvOS() const { 434 return getOS() == Triple::TvOS; 435 } 436 437 /// Is this an Apple watchOS triple. 438 bool isWatchOS() const { 439 return getOS() == Triple::WatchOS; 440 } 441 442 bool isWatchABI() const { 443 return getSubArch() == Triple::ARMSubArch_v7k; 444 } 445 446 /// isOSDarwin - Is this a "Darwin" OS (OS X, iOS, or watchOS). 447 bool isOSDarwin() const { 448 return isMacOSX() || isiOS() || isWatchOS(); 449 } 450 451 bool isOSNetBSD() const { 452 return getOS() == Triple::NetBSD; 453 } 454 455 bool isOSOpenBSD() const { 456 return getOS() == Triple::OpenBSD; 457 } 458 459 bool isOSFreeBSD() const { 460 return getOS() == Triple::FreeBSD; 461 } 462 463 bool isOSDragonFly() const { return getOS() == Triple::DragonFly; } 464 465 bool isOSSolaris() const { 466 return getOS() == Triple::Solaris; 467 } 468 469 bool isOSBitrig() const { 470 return getOS() == Triple::Bitrig; 471 } 472 473 bool isOSIAMCU() const { 474 return getOS() == Triple::ELFIAMCU; 475 } 476 477 bool isGNUEnvironment() const { 478 EnvironmentType Env = getEnvironment(); 479 return Env == Triple::GNU || Env == Triple::GNUEABI || 480 Env == Triple::GNUEABIHF || Env == Triple::GNUX32; 481 } 482 483 /// Checks if the environment could be MSVC. 484 bool isWindowsMSVCEnvironment() const { 485 return getOS() == Triple::Win32 && 486 (getEnvironment() == Triple::UnknownEnvironment || 487 getEnvironment() == Triple::MSVC); 488 } 489 490 /// Checks if the environment is MSVC. 491 bool isKnownWindowsMSVCEnvironment() const { 492 return getOS() == Triple::Win32 && getEnvironment() == Triple::MSVC; 493 } 494 495 bool isWindowsCoreCLREnvironment() const { 496 return getOS() == Triple::Win32 && getEnvironment() == Triple::CoreCLR; 497 } 498 499 bool isWindowsItaniumEnvironment() const { 500 return getOS() == Triple::Win32 && getEnvironment() == Triple::Itanium; 501 } 502 503 bool isWindowsCygwinEnvironment() const { 504 return getOS() == Triple::Win32 && getEnvironment() == Triple::Cygnus; 505 } 506 507 bool isWindowsGNUEnvironment() const { 508 return getOS() == Triple::Win32 && getEnvironment() == Triple::GNU; 509 } 510 511 /// Tests for either Cygwin or MinGW OS 512 bool isOSCygMing() const { 513 return isWindowsCygwinEnvironment() || isWindowsGNUEnvironment(); 514 } 515 516 /// Is this a "Windows" OS targeting a "MSVCRT.dll" environment. 517 bool isOSMSVCRT() const { 518 return isWindowsMSVCEnvironment() || isWindowsGNUEnvironment() || 519 isWindowsItaniumEnvironment(); 520 } 521 522 /// Tests whether the OS is Windows. 523 bool isOSWindows() const { 524 return getOS() == Triple::Win32; 525 } 526 527 /// Tests whether the OS is NaCl (Native Client) 528 bool isOSNaCl() const { 529 return getOS() == Triple::NaCl; 530 } 531 532 /// Tests whether the OS is Linux. 533 bool isOSLinux() const { 534 return getOS() == Triple::Linux; 535 } 536 537 /// Tests whether the OS is kFreeBSD. 538 bool isOSKFreeBSD() const { 539 return getOS() == Triple::KFreeBSD; 540 } 541 542 /// Tests whether the OS uses glibc. 543 bool isOSGlibc() const { 544 return getOS() == Triple::Linux || getOS() == Triple::KFreeBSD; 545 } 546 547 /// Tests whether the OS uses the ELF binary format. 548 bool isOSBinFormatELF() const { 549 return getObjectFormat() == Triple::ELF; 550 } 551 552 /// Tests whether the OS uses the COFF binary format. 553 bool isOSBinFormatCOFF() const { 554 return getObjectFormat() == Triple::COFF; 555 } 556 557 /// Tests whether the environment is MachO. 558 bool isOSBinFormatMachO() const { 559 return getObjectFormat() == Triple::MachO; 560 } 561 562 /// Tests whether the target is the PS4 CPU 563 bool isPS4CPU() const { 564 return getArch() == Triple::x86_64 && 565 getVendor() == Triple::SCEI && 566 getOS() == Triple::PS4; 567 } 568 569 /// Tests whether the target is the PS4 platform 570 bool isPS4() const { 571 return getVendor() == Triple::SCEI && 572 getOS() == Triple::PS4; 573 } 574 575 /// Tests whether the target is Android 576 bool isAndroid() const { return getEnvironment() == Triple::Android; } 577 578 /// Tests whether the environment is musl-libc 579 bool isMusl() const { 580 return getEnvironment() == Triple::Musl || 581 getEnvironment() == Triple::MuslEABI || 582 getEnvironment() == Triple::MuslEABIHF; 583 } 584 585 /// Tests whether the target is NVPTX (32- or 64-bit). 586 bool isNVPTX() const { 587 return getArch() == Triple::nvptx || getArch() == Triple::nvptx64; 588 } 589 590 /// Tests wether the target supports comdat 591 bool supportsCOMDAT() const { return !isOSBinFormatMachO(); } 592 593 /// @} 594 /// @name Mutators 595 /// @{ 596 597 /// setArch - Set the architecture (first) component of the triple 598 /// to a known type. 599 void setArch(ArchType Kind); 600 601 /// setVendor - Set the vendor (second) component of the triple to a 602 /// known type. 603 void setVendor(VendorType Kind); 604 605 /// setOS - Set the operating system (third) component of the triple 606 /// to a known type. 607 void setOS(OSType Kind); 608 609 /// setEnvironment - Set the environment (fourth) component of the triple 610 /// to a known type. 611 void setEnvironment(EnvironmentType Kind); 612 613 /// setObjectFormat - Set the object file format 614 void setObjectFormat(ObjectFormatType Kind); 615 616 /// setTriple - Set all components to the new triple \p Str. 617 void setTriple(const Twine &Str); 618 619 /// setArchName - Set the architecture (first) component of the 620 /// triple by name. 621 void setArchName(StringRef Str); 622 623 /// setVendorName - Set the vendor (second) component of the triple 624 /// by name. 625 void setVendorName(StringRef Str); 626 627 /// setOSName - Set the operating system (third) component of the 628 /// triple by name. 629 void setOSName(StringRef Str); 630 631 /// setEnvironmentName - Set the optional environment (fourth) 632 /// component of the triple by name. 633 void setEnvironmentName(StringRef Str); 634 635 /// setOSAndEnvironmentName - Set the operating system and optional 636 /// environment components with a single string. 637 void setOSAndEnvironmentName(StringRef Str); 638 639 /// @} 640 /// @name Helpers to build variants of a particular triple. 641 /// @{ 642 643 /// Form a triple with a 32-bit variant of the current architecture. 644 /// 645 /// This can be used to move across "families" of architectures where useful. 646 /// 647 /// \returns A new triple with a 32-bit architecture or an unknown 648 /// architecture if no such variant can be found. 649 llvm::Triple get32BitArchVariant() const; 650 651 /// Form a triple with a 64-bit variant of the current architecture. 652 /// 653 /// This can be used to move across "families" of architectures where useful. 654 /// 655 /// \returns A new triple with a 64-bit architecture or an unknown 656 /// architecture if no such variant can be found. 657 llvm::Triple get64BitArchVariant() const; 658 659 /// Form a triple with a big endian variant of the current architecture. 660 /// 661 /// This can be used to move across "families" of architectures where useful. 662 /// 663 /// \returns A new triple with a big endian architecture or an unknown 664 /// architecture if no such variant can be found. 665 llvm::Triple getBigEndianArchVariant() const; 666 667 /// Form a triple with a little endian variant of the current architecture. 668 /// 669 /// This can be used to move across "families" of architectures where useful. 670 /// 671 /// \returns A new triple with a little endian architecture or an unknown 672 /// architecture if no such variant can be found. 673 llvm::Triple getLittleEndianArchVariant() const; 674 675 /// Get the (LLVM) name of the minimum ARM CPU for the arch we are targeting. 676 /// 677 /// \param Arch the architecture name (e.g., "armv7s"). If it is an empty 678 /// string then the triple's arch name is used. 679 StringRef getARMCPUForArch(StringRef Arch = StringRef()) const; 680 681 /// Tests whether the target triple is little endian. 682 /// 683 /// \returns true if the triple is little endian, false otherwise. 684 bool isLittleEndian() const; 685 686 /// @} 687 /// @name Static helpers for IDs. 688 /// @{ 689 690 /// getArchTypeName - Get the canonical name for the \p Kind architecture. 691 static const char *getArchTypeName(ArchType Kind); 692 693 /// getArchTypePrefix - Get the "prefix" canonical name for the \p Kind 694 /// architecture. This is the prefix used by the architecture specific 695 /// builtins, and is suitable for passing to \see 696 /// Intrinsic::getIntrinsicForGCCBuiltin(). 697 /// 698 /// \return - The architecture prefix, or 0 if none is defined. 699 static const char *getArchTypePrefix(ArchType Kind); 700 701 /// getVendorTypeName - Get the canonical name for the \p Kind vendor. 702 static const char *getVendorTypeName(VendorType Kind); 703 704 /// getOSTypeName - Get the canonical name for the \p Kind operating system. 705 static const char *getOSTypeName(OSType Kind); 706 707 /// getEnvironmentTypeName - Get the canonical name for the \p Kind 708 /// environment. 709 static const char *getEnvironmentTypeName(EnvironmentType Kind); 710 711 /// @} 712 /// @name Static helpers for converting alternate architecture names. 713 /// @{ 714 715 /// getArchTypeForLLVMName - The canonical type for the given LLVM 716 /// architecture name (e.g., "x86"). 717 static ArchType getArchTypeForLLVMName(StringRef Str); 718 719 /// @} 720 }; 721 722 } // End llvm namespace 723 724 725 #endif 726