X-Git-Url: http://demsky.eecs.uci.edu/git/?a=blobdiff_plain;f=lib%2FSupport%2FTriple.cpp;h=b3d48fb537af0cc3a5b33cc7545ebe0ad4af3db4;hb=aebcee661e1de0ea8a21dc50891926a91ba78039;hp=85a3422bb7c42722a0b36bd1c5b5e900904d8a46;hpb=2ea701e67a136b834f059d87e389060d60cba05a;p=oota-llvm.git diff --git a/lib/Support/Triple.cpp b/lib/Support/Triple.cpp index 85a3422bb7c..b3d48fb537a 100644 --- a/lib/Support/Triple.cpp +++ b/lib/Support/Triple.cpp @@ -22,6 +22,9 @@ const char *Triple::getArchTypeName(ArchType Kind) { case aarch64: return "aarch64"; case aarch64_be: return "aarch64_be"; case arm: return "arm"; + case armeb: return "armeb"; + case arm64: return "arm64"; + case arm64_be: return "arm64_be"; case hexagon: return "hexagon"; case mips: return "mips"; case mipsel: return "mipsel"; @@ -37,6 +40,7 @@ const char *Triple::getArchTypeName(ArchType Kind) { case systemz: return "s390x"; case tce: return "tce"; case thumb: return "thumb"; + case thumbeb: return "thumbeb"; case x86: return "i386"; case x86_64: return "x86_64"; case xcore: return "xcore"; @@ -54,13 +58,18 @@ const char *Triple::getArchTypeName(ArchType Kind) { const char *Triple::getArchTypePrefix(ArchType Kind) { switch (Kind) { default: - return 0; + return nullptr; case aarch64: case aarch64_be: return "aarch64"; case arm: - case thumb: return "arm"; + case armeb: + case thumb: + case thumbeb: return "arm"; + + case arm64: + case arm64_be: return "arm64"; case ppc64: case ppc64le: @@ -87,6 +96,7 @@ const char *Triple::getArchTypePrefix(ArchType Kind) { case nvptx: return "nvptx"; case nvptx64: return "nvptx"; + case le32: return "le32"; case amdil: return "amdil"; case spir: return "spir"; @@ -168,6 +178,9 @@ Triple::ArchType Triple::getArchTypeForLLVMName(StringRef Name) { .Case("aarch64", aarch64) .Case("aarch64_be", aarch64_be) .Case("arm", arm) + .Case("armeb", armeb) + .Case("arm64", arm64) + .Case("arm64_be", arm64_be) .Case("mips", mips) .Case("mipsel", mipsel) .Case("mips64", mips64) @@ -184,6 +197,7 @@ Triple::ArchType Triple::getArchTypeForLLVMName(StringRef Name) { .Case("systemz", systemz) .Case("tce", tce) .Case("thumb", thumb) + .Case("thumbeb", thumbeb) .Case("x86", x86) .Case("x86-64", x86_64) .Case("xcore", xcore) @@ -199,7 +213,7 @@ Triple::ArchType Triple::getArchTypeForLLVMName(StringRef Name) { // Returns architecture name that is understood by the target assembler. const char *Triple::getArchNameForAssembler() { if (!isOSDarwin() && getVendor() != Triple::Apple) - return NULL; + return nullptr; return StringSwitch(getArchName()) .Case("i386", "i386") @@ -212,6 +226,9 @@ const char *Triple::getArchNameForAssembler() { .Cases("armv5", "armv5e", "thumbv5", "thumbv5e", "armv5") .Cases("armv6", "thumbv6", "armv6") .Cases("armv7", "thumbv7", "armv7") + .Case("armeb", "armeb") + .Case("arm64", "arm64") + .Case("arm64_be", "arm64") .Case("r600", "r600") .Case("nvptx", "nvptx") .Case("nvptx64", "nvptx64") @@ -219,7 +236,7 @@ const char *Triple::getArchNameForAssembler() { .Case("amdil", "amdil") .Case("spir", "spir") .Case("spir64", "spir64") - .Default(NULL); + .Default(nullptr); } static Triple::ArchType parseArch(StringRef ArchName) { @@ -237,8 +254,14 @@ static Triple::ArchType parseArch(StringRef ArchName) { // FIXME: It would be good to replace these with explicit names for all the // various suffixes supported. .StartsWith("armv", Triple::arm) + .Case("armeb", Triple::armeb) + .StartsWith("armebv", Triple::armeb) .Case("thumb", Triple::thumb) .StartsWith("thumbv", Triple::thumb) + .Case("thumbeb", Triple::thumbeb) + .StartsWith("thumbebv", Triple::thumbeb) + .Case("arm64", Triple::arm64) + .Case("arm64_be", Triple::arm64_be) .Case("msp430", Triple::msp430) .Cases("mips", "mipseb", "mipsallegrex", Triple::mips) .Cases("mipsel", "mipsallegrexel", Triple::mipsel) @@ -416,6 +439,8 @@ std::string Triple::normalize(StringRef Str) { if (Components.size() > 3) Environment = parseEnvironment(Components[3]); ObjectFormatType ObjectFormat = UnknownObjectFormat; + if (Components.size() > 4) + ObjectFormat = parseFormat(Components[4]); // Note which components are already in their final position. These will not // be moved. @@ -526,17 +551,28 @@ std::string Triple::normalize(StringRef Str) { if (OS == Triple::Win32) { Components.resize(4); Components[2] = "windows"; - if (Environment == UnknownEnvironment && ObjectFormat == UnknownObjectFormat) - Components[3] = "msvc"; + if (Environment == UnknownEnvironment) { + if (ObjectFormat == UnknownObjectFormat || ObjectFormat == Triple::COFF) + Components[3] = "msvc"; + else + Components[3] = getObjectFormatTypeName(ObjectFormat); + } } else if (OS == Triple::MinGW32) { Components.resize(4); Components[2] = "windows"; - Components[3] = (ObjectFormat == Triple::ELF) ? "gnuelf" : "gnu"; + Components[3] = "gnu"; } else if (OS == Triple::Cygwin) { Components.resize(4); Components[2] = "windows"; Components[3] = "cygnus"; } + if (OS == Triple::MinGW32 || OS == Triple::Cygwin || + (OS == Triple::Win32 && Environment != UnknownEnvironment)) { + if (ObjectFormat != UnknownObjectFormat && ObjectFormat != Triple::COFF) { + Components.resize(5); + Components[4] = getObjectFormatTypeName(ObjectFormat); + } + } // Stick the corrected components back together to form the normalized string. std::string Normalized; @@ -670,9 +706,9 @@ void Triple::getiOSVersion(unsigned &Major, unsigned &Minor, break; case IOS: getOSVersion(Major, Minor, Micro); - // Default to 5.0. + // Default to 5.0 (or 7.0 for arm64). if (Major == 0) - Major = 5; + Major = (getArch() == arm64) ? 7 : 5; break; } } @@ -698,7 +734,12 @@ void Triple::setEnvironment(EnvironmentType Kind) { } void Triple::setObjectFormat(ObjectFormatType Kind) { - setEnvironmentName(getObjectFormatTypeName(Kind)); + if (Environment == UnknownEnvironment) + return setEnvironmentName(getObjectFormatTypeName(Kind)); + + Twine Env = getEnvironmentTypeName(Environment) + Twine("-") + + getObjectFormatTypeName(Kind); + setEnvironmentName(Env.str()); } void Triple::setArchName(StringRef Str) { @@ -743,6 +784,7 @@ static unsigned getArchPointerBitWidth(llvm::Triple::ArchType Arch) { case llvm::Triple::amdil: case llvm::Triple::arm: + case llvm::Triple::armeb: case llvm::Triple::hexagon: case llvm::Triple::le32: case llvm::Triple::mips: @@ -753,11 +795,14 @@ static unsigned getArchPointerBitWidth(llvm::Triple::ArchType Arch) { case llvm::Triple::sparc: case llvm::Triple::tce: case llvm::Triple::thumb: + case llvm::Triple::thumbeb: case llvm::Triple::x86: case llvm::Triple::xcore: case llvm::Triple::spir: return 32; + case llvm::Triple::arm64: + case llvm::Triple::arm64_be: case llvm::Triple::aarch64: case llvm::Triple::aarch64_be: case llvm::Triple::mips64: @@ -792,6 +837,8 @@ Triple Triple::get32BitArchVariant() const { case Triple::UnknownArch: case Triple::aarch64: case Triple::aarch64_be: + case Triple::arm64: + case Triple::arm64_be: case Triple::msp430: case Triple::systemz: case Triple::ppc64le: @@ -801,6 +848,7 @@ Triple Triple::get32BitArchVariant() const { case Triple::amdil: case Triple::spir: case Triple::arm: + case Triple::armeb: case Triple::hexagon: case Triple::le32: case Triple::mips: @@ -811,6 +859,7 @@ Triple Triple::get32BitArchVariant() const { case Triple::sparc: case Triple::tce: case Triple::thumb: + case Triple::thumbeb: case Triple::x86: case Triple::xcore: // Already 32-bit. @@ -833,12 +882,14 @@ Triple Triple::get64BitArchVariant() const { case Triple::UnknownArch: case Triple::amdil: case Triple::arm: + case Triple::armeb: case Triple::hexagon: case Triple::le32: case Triple::msp430: case Triple::r600: case Triple::tce: case Triple::thumb: + case Triple::thumbeb: case Triple::xcore: T.setArch(UnknownArch); break; @@ -854,6 +905,8 @@ Triple Triple::get64BitArchVariant() const { case Triple::sparcv9: case Triple::systemz: case Triple::x86_64: + case Triple::arm64: + case Triple::arm64_be: // Already 64-bit. break;