summaryrefslogtreecommitdiffstats
path: root/llvm/utils/TableGen/AsmMatcherEmitter.cpp
diff options
context:
space:
mode:
authorSam Kolton <Sam.Kolton@amd.com>2016-09-08 15:50:52 +0000
committerSam Kolton <Sam.Kolton@amd.com>2016-09-08 15:50:52 +0000
commit1b746d1b9de6d11acebde850a231b697f623f17e (patch)
tree49a5afae47d70b725dba71e3e997b00e60a59290 /llvm/utils/TableGen/AsmMatcherEmitter.cpp
parent1361c0c6efc08e4808b67cab6e22d0a7a5f81fc7 (diff)
downloadbcm5719-llvm-1b746d1b9de6d11acebde850a231b697f623f17e.tar.gz
bcm5719-llvm-1b746d1b9de6d11acebde850a231b697f623f17e.zip
[TableGen] AsmMatcher: Add AsmVariantName to Instruction class.
Summary: This allows specifying instructions that are available only in specific assembler variant. If AsmVariantName is specified then instruction will be presented only in MatchTable for this variant. If not specified then assembler variants will be determined based on AsmString. Also this allows splitting assembler match tables in same way as it is done in dissasembler. Reviewers: ab, tstellarAMD, craig.topper, vpykhtin Subscribers: wdng Differential Revision: https://reviews.llvm.org/D24249 llvm-svn: 280952
Diffstat (limited to 'llvm/utils/TableGen/AsmMatcherEmitter.cpp')
-rw-r--r--llvm/utils/TableGen/AsmMatcherEmitter.cpp11
1 files changed, 11 insertions, 0 deletions
diff --git a/llvm/utils/TableGen/AsmMatcherEmitter.cpp b/llvm/utils/TableGen/AsmMatcherEmitter.cpp
index 6f7fd2bca85..fb715364b71 100644
--- a/llvm/utils/TableGen/AsmMatcherEmitter.cpp
+++ b/llvm/utils/TableGen/AsmMatcherEmitter.cpp
@@ -353,6 +353,7 @@ public:
std::string TokenizingCharacters;
std::string SeparatorCharacters;
std::string BreakCharacters;
+ std::string Name;
int AsmVariantNo;
};
@@ -1468,6 +1469,7 @@ void AsmMatcherInfo::buildInfo() {
AsmVariant->getValueAsString("SeparatorCharacters");
Variant.BreakCharacters =
AsmVariant->getValueAsString("BreakCharacters");
+ Variant.Name = AsmVariant->getValueAsString("Name");
Variant.AsmVariantNo = AsmVariant->getValueAsInt("Variant");
for (const CodeGenInstruction *CGI : Target.getInstructionsByEnumValue()) {
@@ -1481,6 +1483,11 @@ void AsmMatcherInfo::buildInfo() {
if (CGI->TheDef->getValueAsBit("isCodeGenOnly"))
continue;
+ // Ignore instructions for different instructions
+ const std::string V = CGI->TheDef->getValueAsString("AsmVariantName");
+ if (!V.empty() && V != Variant.Name)
+ continue;
+
auto II = llvm::make_unique<MatchableInfo>(*CGI);
II->initialize(*this, SingletonRegisters, Variant, HasMnemonicFirst);
@@ -1509,6 +1516,10 @@ void AsmMatcherInfo::buildInfo() {
.startswith( MatchPrefix))
continue;
+ const std::string V = Alias->TheDef->getValueAsString("AsmVariantName");
+ if (!V.empty() && V != Variant.Name)
+ continue;
+
auto II = llvm::make_unique<MatchableInfo>(std::move(Alias));
II->initialize(*this, SingletonRegisters, Variant, HasMnemonicFirst);
OpenPOWER on IntegriCloud