Index: lib/Support/TargetParser.cpp =================================================================== --- lib/Support/TargetParser.cpp +++ lib/Support/TargetParser.cpp @@ -27,7 +27,7 @@ // features they correspond to (use getFPUFeatures). // FIXME: TableGen this. // The entries must appear in the order listed in ARM::FPUKind for correct indexing -struct { +static const struct { const char *NameCStr; size_t NameLength; ARM::FPUKind ID; @@ -50,7 +50,7 @@ // of the triples and are not conforming with their official names. // Check to see if the expectation should be changed. // FIXME: TableGen this. -struct { +static const struct { const char *NameCStr; size_t NameLength; ARM::ArchKind ID; @@ -78,7 +78,7 @@ // List of Arch Extension names. // FIXME: TableGen this. -struct { +static const struct { const char *NameCStr; size_t NameLength; unsigned ID; @@ -92,7 +92,7 @@ // List of HWDiv names (use getHWDivSynonym) and which architectural // features they correspond to (use getHWDivFeatures). // FIXME: TableGen this. -struct { +static const struct { const char *NameCStr; size_t NameLength; unsigned ID; @@ -108,7 +108,7 @@ // When finding the Arch for a CPU, first-found prevails. Sort them accordingly. // When this becomes table-generated, we'd probably need two tables. // FIXME: TableGen this. -struct { +static const struct { const char *NameCStr; size_t NameLength; ARM::ArchKind ArchID; @@ -163,6 +163,17 @@ .Default(ARM::FK_INVALID); } +unsigned llvm::ARM::getDefaultExtensions(StringRef CPU, unsigned ArchKind) { + if (CPU == "generic") + return ARCHNames[ArchKind].ArchBaseExtensions; + + return StringSwitch(CPU) +#define ARM_CPU_NAME(NAME, ID, DEFAULT_FPU, IS_DEFAULT, DEFAULT_EXT) \ + .Case(NAME, ARCHNames[ID].ArchBaseExtensions | DEFAULT_EXT) +#include "llvm/Support/ARMTargetParser.def" + .Default(ARM::AEK_INVALID); +} + bool llvm::ARM::getHWDivFeatures(unsigned HWDivKind, std::vector &Features) { @@ -323,17 +334,6 @@ return StringRef(); } -unsigned llvm::ARM::getDefaultExtensions(StringRef CPU, unsigned ArchKind) { - if (CPU == "generic") - return ARCHNames[ArchKind].ArchBaseExtensions; - - for (const auto C : CPUNames) { - if (CPU == C.getName()) - return (ARCHNames[C.ArchID].ArchBaseExtensions | C.DefaultExtensions); - } - return ARM::AEK_INVALID; -} - StringRef llvm::ARM::getDefaultCPU(StringRef Arch) { unsigned AK = parseArch(Arch); if (AK == ARM::AK_INVALID)