From dcbf698ddec148c8acddfe53538f8b7e83c324aa Mon Sep 17 00:00:00 2001 From: Rafael Espindola Date: Wed, 31 Oct 2012 18:51:07 +0000 Subject: [PATCH] getArchTypeForDarwinArchName is only used in the clang driver, copy it there. I will remove it from llvm in the next commit. llvm-svn: 167156 --- clang/lib/Driver/Driver.cpp | 6 +++--- clang/lib/Driver/ToolChains.cpp | 4 ++-- clang/lib/Driver/Tools.cpp | 31 +++++++++++++++++++++++++++++++ clang/lib/Driver/Tools.h | 2 ++ 4 files changed, 38 insertions(+), 5 deletions(-) diff --git a/clang/lib/Driver/Driver.cpp b/clang/lib/Driver/Driver.cpp index ac1e112..6b0300b 100644 --- a/clang/lib/Driver/Driver.cpp +++ b/clang/lib/Driver/Driver.cpp @@ -790,7 +790,7 @@ void Driver::BuildUniversalActions(const ToolChain &TC, // Validate the option here; we don't save the type here because its // particular spelling may participate in other driver choices. llvm::Triple::ArchType Arch = - llvm::Triple::getArchTypeForDarwinArchName(A->getValue(Args)); + tools::darwin::getArchTypeForDarwinArchName(A->getValue(Args)); if (Arch == llvm::Triple::UnknownArch) { Diag(clang::diag::err_drv_invalid_arch_name) << A->getAsString(Args); @@ -1623,14 +1623,14 @@ static llvm::Triple computeTargetTriple(StringRef DefaultTargetTriple, // If an explict Darwin arch name is given, that trumps all. if (!DarwinArchName.empty()) { Target.setArch( - llvm::Triple::getArchTypeForDarwinArchName(DarwinArchName)); + tools::darwin::getArchTypeForDarwinArchName(DarwinArchName)); return Target; } // Handle the Darwin '-arch' flag. if (Arg *A = Args.getLastArg(options::OPT_arch)) { llvm::Triple::ArchType DarwinArch - = llvm::Triple::getArchTypeForDarwinArchName(A->getValue(Args)); + = tools::darwin::getArchTypeForDarwinArchName(A->getValue(Args)); if (DarwinArch != llvm::Triple::UnknownArch) Target.setArch(DarwinArch); } diff --git a/clang/lib/Driver/ToolChains.cpp b/clang/lib/Driver/ToolChains.cpp index e403e20..eca5b3b 100644 --- a/clang/lib/Driver/ToolChains.cpp +++ b/clang/lib/Driver/ToolChains.cpp @@ -714,10 +714,10 @@ DerivedArgList *Darwin::TranslateArgs(const DerivedArgList &Args, // Skip this argument unless the architecture matches either the toolchain // triple arch, or the arch being bound. llvm::Triple::ArchType XarchArch = - llvm::Triple::getArchTypeForDarwinArchName(A->getValue(Args, 0)); + tools::darwin::getArchTypeForDarwinArchName(A->getValue(Args, 0)); if (!(XarchArch == getArch() || (BoundArch && XarchArch == - llvm::Triple::getArchTypeForDarwinArchName(BoundArch)))) + tools::darwin::getArchTypeForDarwinArchName(BoundArch)))) continue; Arg *OriginalArg = A; diff --git a/clang/lib/Driver/Tools.cpp b/clang/lib/Driver/Tools.cpp index 7c48d6b..95db821 100644 --- a/clang/lib/Driver/Tools.cpp +++ b/clang/lib/Driver/Tools.cpp @@ -3526,6 +3526,37 @@ void hexagon::Link::ConstructJob(Compilation &C, const JobAction &JA, } // Hexagon tools end. +llvm::Triple::ArchType darwin::getArchTypeForDarwinArchName(StringRef Str) { + // See arch(3) and llvm-gcc's driver-driver.c. We don't implement support for + // archs which Darwin doesn't use. + + // The matching this routine does is fairly pointless, since it is neither the + // complete architecture list, nor a reasonable subset. The problem is that + // historically the driver driver accepts this and also ties its -march= + // handling to the architecture name, so we need to be careful before removing + // support for it. + + // This code must be kept in sync with Clang's Darwin specific argument + // translation. + + return llvm::StringSwitch(Str) + .Cases("ppc", "ppc601", "ppc603", "ppc604", "ppc604e", llvm::Triple::ppc) + .Cases("ppc750", "ppc7400", "ppc7450", "ppc970", llvm::Triple::ppc) + .Case("ppc64", llvm::Triple::ppc64) + .Cases("i386", "i486", "i486SX", "i586", "i686", llvm::Triple::x86) + .Cases("pentium", "pentpro", "pentIIm3", "pentIIm5", "pentium4", + llvm::Triple::x86) + .Case("x86_64", llvm::Triple::x86_64) + // This is derived from the driver driver. + .Cases("arm", "armv4t", "armv5", "armv6", llvm::Triple::arm) + .Cases("armv7", "armv7f", "armv7k", "armv7s", "xscale", llvm::Triple::arm) + .Case("r600", llvm::Triple::r600) + .Case("nvptx", llvm::Triple::nvptx) + .Case("nvptx64", llvm::Triple::nvptx64) + .Case("amdil", llvm::Triple::amdil) + .Case("spir", llvm::Triple::spir) + .Default(llvm::Triple::UnknownArch); +} const char *darwin::CC1::getCC1Name(types::ID Type) const { switch (Type) { diff --git a/clang/lib/Driver/Tools.h b/clang/lib/Driver/Tools.h index 9d0778b..5898c66 100644 --- a/clang/lib/Driver/Tools.h +++ b/clang/lib/Driver/Tools.h @@ -202,6 +202,8 @@ namespace hexagon { namespace darwin { + llvm::Triple::ArchType getArchTypeForDarwinArchName(StringRef Str); + class LLVM_LIBRARY_VISIBILITY DarwinTool : public Tool { virtual void anchor(); protected: -- 2.7.4