summaryrefslogtreecommitdiff
path: root/utils/TableGen
diff options
context:
space:
mode:
authorDaniel Dunbar <daniel@zuster.org>2010-03-18 20:05:56 +0000
committerDaniel Dunbar <daniel@zuster.org>2010-03-18 20:05:56 +0000
commit8cc9c0c487128c4d675d45803a0711c3e43534af (patch)
treea4bbeb64c6daec5825ad0cae1ebaa4799f8c3a09 /utils/TableGen
parent618d0ed4bc0b68d87f86eace0cd6b9c05329dfc7 (diff)
downloadllvm-8cc9c0c487128c4d675d45803a0711c3e43534af.tar.gz
llvm-8cc9c0c487128c4d675d45803a0711c3e43534af.tar.bz2
llvm-8cc9c0c487128c4d675d45803a0711c3e43534af.tar.xz
MC/AsmMatcher: Add support for target specific "instruction cleanup" functions,
to allow custom post-processing of matched instructions. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@98857 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'utils/TableGen')
-rw-r--r--utils/TableGen/AsmMatcherEmitter.cpp16
1 files changed, 11 insertions, 5 deletions
diff --git a/utils/TableGen/AsmMatcherEmitter.cpp b/utils/TableGen/AsmMatcherEmitter.cpp
index b823e57b37..7446ba0efd 100644
--- a/utils/TableGen/AsmMatcherEmitter.cpp
+++ b/utils/TableGen/AsmMatcherEmitter.cpp
@@ -998,7 +998,7 @@ static void EmitConvertToMCInst(CodeGenTarget &Target,
// Start the unified conversion function.
- CvtOS << "static bool ConvertToMCInst(ConversionKind Kind, MCInst &Inst, "
+ CvtOS << "static void ConvertToMCInst(ConversionKind Kind, MCInst &Inst, "
<< "unsigned Opcode,\n"
<< " const SmallVectorImpl<MCParsedAsmOperand*"
<< "> &Operands) {\n";
@@ -1155,13 +1155,12 @@ static void EmitConvertToMCInst(CodeGenTarget &Target,
}
}
- CvtOS << " break;\n";
+ CvtOS << " return;\n";
}
// Finish the convert function.
CvtOS << " }\n";
- CvtOS << " return false;\n";
CvtOS << "}\n\n";
// Finish the enum, and drop the convert function after it.
@@ -1634,8 +1633,15 @@ void AsmMatcherEmitter::run(raw_ostream &OS) {
OS << " continue;\n";
}
OS << "\n";
- OS << " return ConvertToMCInst(it->ConvertFn, Inst, "
- << "it->Opcode, Operands);\n";
+ OS << " ConvertToMCInst(it->ConvertFn, Inst, it->Opcode, Operands);\n";
+
+ // Call the post-processing function, if used.
+ std::string InsnCleanupFn =
+ AsmParser->getValueAsString("AsmParserInstCleanup");
+ if (!InsnCleanupFn.empty())
+ OS << " " << InsnCleanupFn << "(Inst);\n";
+
+ OS << " return false;\n";
OS << " }\n\n";
OS << " return true;\n";