[cfe-commits] r81282 - /cfe/trunk/lib/Driver/HostInfo.cpp
Daniel Dunbar
daniel at zuster.org
Tue Sep 8 16:37:36 PDT 2009
Author: ddunbar
Date: Tue Sep 8 18:37:36 2009
New Revision: 81282
URL: http://llvm.org/viewvc/llvm-project?rev=81282&view=rev
Log:
Change Darwin toolchain lookup to use llvm::Triple.
- -2+1 FIXMEs.
Modified:
cfe/trunk/lib/Driver/HostInfo.cpp
Modified: cfe/trunk/lib/Driver/HostInfo.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Driver/HostInfo.cpp?rev=81282&r1=81281&r2=81282&view=diff
==============================================================================
--- cfe/trunk/lib/Driver/HostInfo.cpp (original)
+++ cfe/trunk/lib/Driver/HostInfo.cpp Tue Sep 8 18:37:36 2009
@@ -47,7 +47,7 @@
unsigned GCCVersion[3];
/// Cache of tool chains we have created.
- mutable llvm::StringMap<ToolChain *> ToolChains;
+ mutable llvm::DenseMap<unsigned, ToolChain*> ToolChains;
public:
DarwinHostInfo(const Driver &D, const llvm::Triple &Triple);
@@ -73,20 +73,14 @@
DarwinHostInfo::DarwinHostInfo(const Driver &D, const llvm::Triple& Triple)
: HostInfo(D, Triple) {
- assert((getArchName() == "i386" || getArchName() == "x86_64" ||
- getArchName() == "powerpc" || getArchName() == "powerpc64" ||
- getArchName() == "arm") &&
- "Unknown Darwin arch.");
-
+ assert(Triple.getArch() != llvm::Triple::UnknownArch && "Invalid arch!");
assert(memcmp(&getOSName()[0], "darwin", 6) == 0 &&
"Unknown Darwin platform.");
bool HadExtra;
if (!Driver::GetReleaseVersion(&getOSName()[6],
DarwinVersion[0], DarwinVersion[1],
- DarwinVersion[2], HadExtra)) {
- D.Diag(clang::diag::err_drv_invalid_darwin_version)
- << getOSName();
- }
+ DarwinVersion[2], HadExtra))
+ D.Diag(clang::diag::err_drv_invalid_darwin_version) << getOSName();
// We can only call 4.2.1 for now.
GCCVersion[0] = 4;
@@ -95,7 +89,7 @@
}
DarwinHostInfo::~DarwinHostInfo() {
- for (llvm::StringMap<ToolChain*>::iterator
+ for (llvm::DenseMap<unsigned, ToolChain*>::iterator
it = ToolChains.begin(), ie = ToolChains.end(); it != ie; ++it)
delete it->second;
}
@@ -106,66 +100,57 @@
ToolChain *DarwinHostInfo::CreateToolChain(const ArgList &Args,
const char *ArchName) const {
- std::string Arch;
+ llvm::Triple::ArchType Arch;
+
if (!ArchName) {
// If we aren't looking for a specific arch, infer the default architecture
// based on -arch and -m32/-m64 command line options.
if (Arg *A = Args.getLastArg(options::OPT_arch)) {
// The gcc driver behavior with multiple -arch flags wasn't consistent for
// things which rely on a default architecture. We just use the last -arch
- // to find the default tool chain.
- Arch = A->getValue(Args);
+ // to find the default tool chain (assuming it is valid..
+ Arch = llvm::Triple::getArchTypeForDarwinArchName(A->getValue(Args));
- // Normalize arch name; we shouldn't be doing this here.
- //
- // FIXME: This should be unnecessary once everything moves over to using
- // the ID based Triple interface.
- if (Arch == "ppc")
- Arch = "powerpc";
- else if (Arch == "ppc64")
- Arch = "powerpc64";
+ // If it was invalid just use the host, we will reject this command line
+ // later.
+ if (Arch == llvm::Triple::UnknownArch)
+ Arch = getTriple().getArch();
} else {
// Otherwise default to the arch of the host.
- Arch = getArchName();
+ Arch = getTriple().getArch();
}
- ArchName = Arch.c_str();
// Honor -m32 and -m64 when finding the default tool chain.
+ //
+ // FIXME: Should this information be in llvm::Triple?
if (Arg *A = Args.getLastArg(options::OPT_m32, options::OPT_m64)) {
- if (Arch == "i386" || Arch == "x86_64") {
- ArchName = (A->getOption().getId() == options::OPT_m32) ? "i386" :
- "x86_64";
- } else if (Arch == "powerpc" || Arch == "powerpc64") {
- ArchName = (A->getOption().getId() == options::OPT_m32) ? "powerpc" :
- "powerpc64";
+ if (A->getOption().getId() == options::OPT_m32) {
+ if (Arch == llvm::Triple::x86_64)
+ Arch = llvm::Triple::x86;
+ if (Arch == llvm::Triple::ppc64)
+ Arch = llvm::Triple::ppc;
+ } else {
+ if (Arch == llvm::Triple::x86)
+ Arch = llvm::Triple::x86_64;
+ if (Arch == llvm::Triple::ppc)
+ Arch = llvm::Triple::ppc64;
}
}
- } else {
- // Normalize arch name; we shouldn't be doing this here.
- //
- // FIXME: This should be unnecessary once everything moves over to using the
- // ID based Triple interface.
- if (strcmp(ArchName, "ppc") == 0)
- ArchName = "powerpc";
- else if (strcmp(ArchName, "ppc64") == 0)
- ArchName = "powerpc64";
- }
+ } else
+ Arch = llvm::Triple::getArchTypeForDarwinArchName(ArchName);
- ToolChain *&TC = ToolChains[ArchName];
+ assert(Arch != llvm::Triple::UnknownArch && "Unexpected arch!");
+ ToolChain *&TC = ToolChains[Arch];
if (!TC) {
llvm::Triple TCTriple(getTriple());
- TCTriple.setArchName(ArchName);
+ TCTriple.setArch(Arch);
- if (strcmp(ArchName, "i386") == 0 || strcmp(ArchName, "x86_64") == 0)
- TC = new toolchains::Darwin(*this, TCTriple,
- DarwinVersion,
- GCCVersion,
+ // If we recognized the arch, match it to the toolchains we support.
+ if (Arch == llvm::Triple::x86 || Arch == llvm::Triple::x86_64)
+ TC = new toolchains::Darwin(*this, TCTriple, DarwinVersion, GCCVersion,
false);
- else if (strncmp(ArchName, "arm", 3) == 0 ||
- strncmp(ArchName, "thumb", 5) == 0)
- TC = new toolchains::Darwin(*this, TCTriple,
- DarwinVersion,
- GCCVersion,
+ else if (Arch == llvm::Triple::arm || Arch == llvm::Triple::thumb)
+ TC = new toolchains::Darwin(*this, TCTriple, DarwinVersion, GCCVersion,
true);
else
TC = new toolchains::Darwin_GCC(*this, TCTriple);
More information about the cfe-commits
mailing list