diff options
author | Bradley Smith <bradley.smith@arm.com> | 2015-11-18 16:32:12 +0000 |
---|---|---|
committer | Bradley Smith <bradley.smith@arm.com> | 2015-11-18 16:32:12 +0000 |
commit | 7b0a7d8d1e35720e55805587cadf7973bba36032 (patch) | |
tree | 21a4ad33a5255fd892a9f9f4968ea263a72ab423 /llvm/lib/Support/TargetParser.cpp | |
parent | 3d4a20662a1e76e0df17ebb9585474e440cbf3e1 (diff) | |
download | bcm5719-llvm-7b0a7d8d1e35720e55805587cadf7973bba36032.tar.gz bcm5719-llvm-7b0a7d8d1e35720e55805587cadf7973bba36032.zip |
[ARM] Add +feature names to TargetParser extensions table
llvm-svn: 253470
Diffstat (limited to 'llvm/lib/Support/TargetParser.cpp')
-rw-r--r-- | llvm/lib/Support/TargetParser.cpp | 18 |
1 files changed, 17 insertions, 1 deletions
diff --git a/llvm/lib/Support/TargetParser.cpp b/llvm/lib/Support/TargetParser.cpp index a57b48f8a4e..213275ab009 100644 --- a/llvm/lib/Support/TargetParser.cpp +++ b/llvm/lib/Support/TargetParser.cpp @@ -16,6 +16,7 @@ #include "llvm/Support/TargetParser.h" #include "llvm/ADT/StringExtras.h" #include "llvm/ADT/StringSwitch.h" +#include "llvm/ADT/Twine.h" #include <cctype> using namespace llvm; @@ -82,10 +83,14 @@ static const struct { const char *NameCStr; size_t NameLength; unsigned ID; + const char *Feature; + const char *NegFeature; StringRef getName() const { return StringRef(NameCStr, NameLength); } + StringRef getNegName() const { return (Twine("no") + getName()).str(); } } ARCHExtNames[] = { -#define ARM_ARCH_EXT_NAME(NAME, ID) { NAME, sizeof(NAME) - 1, ID }, +#define ARM_ARCH_EXT_NAME(NAME, ID, FEATURE, NEGFEATURE) \ + { NAME, sizeof(NAME) - 1, ID, FEATURE, NEGFEATURE }, #include "llvm/Support/ARMTargetParser.def" }; @@ -326,6 +331,17 @@ StringRef llvm::ARM::getArchExtName(unsigned ArchExtKind) { return StringRef(); } +const char *llvm::ARM::getArchExtFeature(StringRef ArchExt) { + for (const auto AE : ARCHExtNames) { + if (AE.Feature && ArchExt == AE.getName()) + return AE.Feature; + else if (AE.NegFeature && ArchExt == AE.getNegName()) + return AE.NegFeature; + } + + return nullptr; +} + StringRef llvm::ARM::getHWDivName(unsigned HWDivKind) { for (const auto D : HWDivNames) { if (HWDivKind == D.ID) |