From 28179db68b8cb71c82132d37935b8511c067d220 Mon Sep 17 00:00:00 2001 From: Chris Lattner Date: Wed, 9 Sep 2009 23:09:29 +0000 Subject: [PATCH] Fix a subtle bug in "return;" generation which caused us to miss a return in one case. Instead of sprinking return handling code throughout the asmprinter generator, just treat it like any other normal statement. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@81395 91177308-0d34-0410-b5e6-96231b3b80d8 --- utils/TableGen/AsmWriterEmitter.cpp | 25 +++---------------------- 1 file changed, 3 insertions(+), 22 deletions(-) diff --git a/utils/TableGen/AsmWriterEmitter.cpp b/utils/TableGen/AsmWriterEmitter.cpp index 34dc30f6048..d6aa8bf0466 100644 --- a/utils/TableGen/AsmWriterEmitter.cpp +++ b/utils/TableGen/AsmWriterEmitter.cpp @@ -322,11 +322,13 @@ AsmWriterInst::AsmWriterInst(const CodeGenInstruction &CGI, Record *AsmWriter) { LastEmitted = VarEnd; } } - + Operands.push_back( AsmWriterOperand("EmitComments(*MI);\n", AsmWriterOperand::isLiteralStatementOperand)); AddLiteralString("\\n"); + Operands.push_back(AsmWriterOperand("return;", + AsmWriterOperand::isLiteralStatementOperand)); } /// MatchesAllButOneOp - If this instruction is exactly identical to the @@ -449,10 +451,6 @@ FindUniqueOperandCommands(std::vector &UniqueOperandCommands, Command = " " + Inst->Operands[0].getCode() + "\n"; - // If this is the last operand, emit a return. - if (Inst->Operands.size() == 1) - Command += " return;\n"; - // Check to see if we already have 'Command' in UniqueOperandCommands. // If not, add it. bool FoundIt = false; @@ -524,14 +522,6 @@ FindUniqueOperandCommands(std::vector &UniqueOperandCommands, // to UniqueOperandCommands and remember that it was consumed. std::string Command = " " + FirstInst->Operands[Op].getCode() + "\n"; - // If this is the last operand, emit a return after the code. - if (FirstInst->Operands.size() == Op+1 && - // Don't early-out too soon. Other instructions in this - // group may have more operands. - FirstInst->Operands.size() == MaxSize) { - Command += " return;\n"; - } - UniqueOperandCommands[CommandIdx] += Command; InstOpsUsed[CommandIdx]++; } @@ -633,17 +623,8 @@ void AsmWriterEmitter::run(raw_ostream &O) { std::vector > TableDrivenOperandPrinters; - bool isFirst = true; while (1) { std::vector UniqueOperandCommands; - - // For the first operand check, add a default value for instructions with - // just opcode strings to use. - if (isFirst) { - UniqueOperandCommands.push_back(" return;\n"); - isFirst = false; - } - std::vector InstIdxs; std::vector NumInstOpsHandled; FindUniqueOperandCommands(UniqueOperandCommands, InstIdxs,