From ca96a861655d3fcfc5ff047e249703930c8330bc Mon Sep 17 00:00:00 2001 From: Jim Grosbach Date: Thu, 30 Sep 2010 01:29:54 +0000 Subject: [PATCH] Let a target specify whether it wants an assembly printer to be the MC version or not. TableGen needs to generate the printInstruction() function as taking an MCInstr* or a MachineInstr*, depending. Default to the old non-MC version so that everything not yet using MC continues to just work without fidding. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@115126 91177308-0d34-0410-b5e6-96231b3b80d8 --- include/llvm/Target/Target.td | 5 +++++ utils/TableGen/AsmWriterEmitter.cpp | 5 ++++- 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/include/llvm/Target/Target.td b/include/llvm/Target/Target.td index b141a77df4f..366a72fea7e 100644 --- a/include/llvm/Target/Target.td +++ b/include/llvm/Target/Target.td @@ -565,6 +565,11 @@ class AsmWriter { // OperandSpacing - Space between operand columns. int OperandSpacing = -1; + + // isMCAsmWriter - Is this assembly writer for an MC emitter? This controls + // generation of the printInstruction() method. For MC printers, it takes + // an MCInstr* operand, otherwise it takes a MachineInstr*. + bit isMCAsmWriter = 0; } def DefaultAsmWriter : AsmWriter; diff --git a/utils/TableGen/AsmWriterEmitter.cpp b/utils/TableGen/AsmWriterEmitter.cpp index 6ae0b39c8dd..1bca6607449 100644 --- a/utils/TableGen/AsmWriterEmitter.cpp +++ b/utils/TableGen/AsmWriterEmitter.cpp @@ -243,12 +243,15 @@ void AsmWriterEmitter::EmitPrintInstruction(raw_ostream &O) { CodeGenTarget Target; Record *AsmWriter = Target.getAsmWriter(); std::string ClassName = AsmWriter->getValueAsString("AsmWriterClassName"); + bool isMC = AsmWriter->getValueAsBit("isMCAsmWriter"); + const char *MachineInstrClassName = isMC ? "MCInst" : "MachineInstr"; O << "/// printInstruction - This method is automatically generated by tablegen\n" "/// from the instruction set description.\n" "void " << Target.getName() << ClassName - << "::printInstruction(const MachineInstr *MI, raw_ostream &O) {\n"; + << "::printInstruction(const " << MachineInstrClassName + << " *MI, raw_ostream &O) {\n"; std::vector Instructions;