From 59fc42debd571bbafc52c20bc418fdc3f4d00188 Mon Sep 17 00:00:00 2001 From: Daniel Dunbar Date: Tue, 11 Aug 2009 20:59:47 +0000 Subject: llvm-mc/AsmParser: Allow target to specific a comment delimiter, which will be used to strip hard coded comments out of .td assembly strings. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@78716 91177308-0d34-0410-b5e6-96231b3b80d8 --- utils/TableGen/AsmMatcherEmitter.cpp | 27 ++++++++++++++++++++++++++- 1 file changed, 26 insertions(+), 1 deletion(-) (limited to 'utils') diff --git a/utils/TableGen/AsmMatcherEmitter.cpp b/utils/TableGen/AsmMatcherEmitter.cpp index 57b93b1d27..4dbd24c70d 100644 --- a/utils/TableGen/AsmMatcherEmitter.cpp +++ b/utils/TableGen/AsmMatcherEmitter.cpp @@ -501,6 +501,15 @@ public: class AsmMatcherInfo { public: + /// The tablegen AsmParser record. + Record *AsmParser; + + /// The AsmParser "CommentDelimiter" value. + std::string CommentDelimiter; + + /// The AsmParser "RegisterPrefix" value. + std::string RegisterPrefix; + /// The classes which are needed for matching. std::vector Classes; @@ -537,6 +546,8 @@ private: void BuildOperandClasses(CodeGenTarget &Target); public: + AsmMatcherInfo(Record *_AsmParser); + /// BuildInfo - Construct the various tables used during matching. void BuildInfo(CodeGenTarget &Target); }; @@ -778,6 +789,13 @@ void AsmMatcherInfo::BuildOperandClasses(CodeGenTarget &Target) { } } +AsmMatcherInfo::AsmMatcherInfo(Record *_AsmParser) + : AsmParser(_AsmParser), + CommentDelimiter(AsmParser->getValueAsString("CommentDelimiter")), + RegisterPrefix(AsmParser->getValueAsString("RegisterPrefix")) +{ +} + void AsmMatcherInfo::BuildInfo(CodeGenTarget &Target) { // Build info for the register classes. BuildRegisterClasses(Target); @@ -801,6 +819,13 @@ void AsmMatcherInfo::BuildInfo(CodeGenTarget &Target) { II->Instr = &it->second; II->AsmString = FlattenVariants(CGI.AsmString, 0); + // Remove comments from the asm string. + if (!CommentDelimiter.empty()) { + size_t Idx = StringRef(II->AsmString).find(CommentDelimiter); + if (Idx != StringRef::npos) + II->AsmString = II->AsmString.substr(0, Idx); + } + TokenizeAsmString(II->AsmString, II->Tokens); // Ignore instructions which shouldn't be matched. @@ -1309,7 +1334,7 @@ void AsmMatcherEmitter::run(raw_ostream &OS) { EmitMatchRegisterName(Target, AsmParser, OS); // Compute the information on the instructions to match. - AsmMatcherInfo Info; + AsmMatcherInfo Info(AsmParser); Info.BuildInfo(Target); // Sort the instruction table using the partial order on classes. -- cgit v1.2.3