summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEvgeny Astigeevich <evgeny.astigeevich@arm.com>2014-12-16 18:16:17 +0000
committerEvgeny Astigeevich <evgeny.astigeevich@arm.com>2014-12-16 18:16:17 +0000
commitb42003d2bf015df6417cb3a60ec6a5fee8cc0279 (patch)
tree43e2ebf580b9deea51773c58667d7964bc9d1b49
parent0dc19792937bb64d795a9ff809eb73cc3fb81fd0 (diff)
downloadbcm5719-llvm-b42003d2bf015df6417cb3a60ec6a5fee8cc0279.tar.gz
bcm5719-llvm-b42003d2bf015df6417cb3a60ec6a5fee8cc0279.zip
On behalf of Matthew Wahab:
An instruction alias defined with InstAlias and an optional operand in the middle of the AsmString field, "..${a} <operands>", would get the final "}" printed in the instruction disassembly. This wouldn't happen if the optional operand appeared as the last item in the AsmString which is how the current backends avoided the problem. There don't appear to be any tests for this part of Tablegen but it passes the pre-commit tests. Manually tested the change by enabling the generic alias printer in the ARM backend and checking the output. Differential Revision: http://reviews.llvm.org/D6529 llvm-svn: 224348
-rw-r--r--llvm/utils/TableGen/AsmWriterEmitter.cpp8
1 files changed, 7 insertions, 1 deletions
diff --git a/llvm/utils/TableGen/AsmWriterEmitter.cpp b/llvm/utils/TableGen/AsmWriterEmitter.cpp
index 4cb7eeda18f..5924d5f48dc 100644
--- a/llvm/utils/TableGen/AsmWriterEmitter.cpp
+++ b/llvm/utils/TableGen/AsmWriterEmitter.cpp
@@ -655,20 +655,26 @@ public:
std::pair<StringRef, StringRef::iterator> parseName(StringRef::iterator Start,
StringRef::iterator End) {
StringRef::iterator I = Start;
+ StringRef::iterator Next;
if (*I == '{') {
// ${some_name}
Start = ++I;
while (I != End && *I != '}')
++I;
+ Next = I;
+ // eat the final '}'
+ if (Next != End)
+ ++Next;
} else {
// $name, just eat the usual suspects.
while (I != End &&
((*I >= 'a' && *I <= 'z') || (*I >= 'A' && *I <= 'Z') ||
(*I >= '0' && *I <= '9') || *I == '_'))
++I;
+ Next = I;
}
- return std::make_pair(StringRef(Start, I - Start), I);
+ return std::make_pair(StringRef(Start, I - Start), Next);
}
void print(raw_ostream &O) {
OpenPOWER on IntegriCloud