[llvm-commits] [llvm] r76279 - in /llvm/trunk: include/llvm/Target/TargetAsmInfo.h lib/Target/TargetAsmInfo.cpp utils/TableGen/AsmWriterEmitter.cpp
Evan Cheng
evan.cheng at apple.com
Fri Jul 17 18:43:55 PDT 2009
Author: evancheng
Date: Fri Jul 17 20:43:53 2009
New Revision: 76279
URL: http://llvm.org/viewvc/llvm-project?rev=76279&view=rev
Log:
Revert 76177 for now. It's messing up ARM asm printing. Also this significant debate about its efficiency.
Modified:
llvm/trunk/include/llvm/Target/TargetAsmInfo.h
llvm/trunk/lib/Target/TargetAsmInfo.cpp
llvm/trunk/utils/TableGen/AsmWriterEmitter.cpp
Modified: llvm/trunk/include/llvm/Target/TargetAsmInfo.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Target/TargetAsmInfo.h?rev=76279&r1=76278&r2=76279&view=diff
==============================================================================
--- llvm/trunk/include/llvm/Target/TargetAsmInfo.h (original)
+++ llvm/trunk/include/llvm/Target/TargetAsmInfo.h Fri Jul 17 20:43:53 2009
@@ -222,14 +222,6 @@
/// assembler.
const char *CommentString; // Defaults to "#"
- /// FirstOperandColumn - The output column where the first operand
- /// should be printed
- unsigned FirstOperandColumn; // Defaults to 0 (ignored)
-
- /// MaxOperandLength - The maximum length of any printed asm
- /// operand
- unsigned MaxOperandLength; // Defaults to 0 (ignored)
-
/// GlobalPrefix - If this is set to a non-empty string, it is prepended
/// onto all global symbols. This is often used for "_" or ".".
const char *GlobalPrefix; // Defaults to ""
@@ -705,9 +697,6 @@
const char *getCommentString() const {
return CommentString;
}
- unsigned getOperandColumn(unsigned Operand) const {
- return FirstOperandColumn + (MaxOperandLength+1)*(Operand-1);
- }
const char *getGlobalPrefix() const {
return GlobalPrefix;
}
Modified: llvm/trunk/lib/Target/TargetAsmInfo.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/TargetAsmInfo.cpp?rev=76279&r1=76278&r2=76279&view=diff
==============================================================================
--- llvm/trunk/lib/Target/TargetAsmInfo.cpp (original)
+++ llvm/trunk/lib/Target/TargetAsmInfo.cpp Fri Jul 17 20:43:53 2009
@@ -45,8 +45,6 @@
SeparatorChar = ';';
CommentColumn = 60;
CommentString = "#";
- FirstOperandColumn = 0;
- MaxOperandLength = 0;
GlobalPrefix = "";
PrivateGlobalPrefix = ".";
LessPrivateGlobalPrefix = "";
Modified: llvm/trunk/utils/TableGen/AsmWriterEmitter.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/utils/TableGen/AsmWriterEmitter.cpp?rev=76279&r1=76278&r2=76279&view=diff
==============================================================================
--- llvm/trunk/utils/TableGen/AsmWriterEmitter.cpp (original)
+++ llvm/trunk/utils/TableGen/AsmWriterEmitter.cpp Fri Jul 17 20:43:53 2009
@@ -19,7 +19,6 @@
#include "llvm/Support/Debug.h"
#include "llvm/Support/MathExtras.h"
#include <algorithm>
-#include <sstream>
#include <iostream>
using namespace llvm;
@@ -33,11 +32,7 @@
// This should be an anon namespace, this works around a GCC warning.
namespace llvm {
struct AsmWriterOperand {
- enum OpType {
- isLiteralTextOperand,
- isMachineInstrOperand,
- isLiteralStatementOperand
- } OperandType;
+ enum { isLiteralTextOperand, isMachineInstrOperand } OperandType;
/// Str - For isLiteralTextOperand, this IS the literal text. For
/// isMachineInstrOperand, this is the PrinterMethodName for the operand.
@@ -52,16 +47,14 @@
std::string MiModifier;
// To make VS STL happy
- AsmWriterOperand(OpType op = isLiteralTextOperand):OperandType(op) {}
+ AsmWriterOperand():OperandType(isLiteralTextOperand) {}
- AsmWriterOperand(const std::string &LitStr,
- OpType op = isLiteralTextOperand)
- : OperandType(op), Str(LitStr) {}
+ explicit AsmWriterOperand(const std::string &LitStr)
+ : OperandType(isLiteralTextOperand), Str(LitStr) {}
AsmWriterOperand(const std::string &Printer, unsigned OpNo,
- const std::string &Modifier,
- OpType op = isMachineInstrOperand)
- : OperandType(op), Str(Printer), MIOpNo(OpNo),
+ const std::string &Modifier)
+ : OperandType(isMachineInstrOperand), Str(Printer), MIOpNo(OpNo),
MiModifier(Modifier) {}
bool operator!=(const AsmWriterOperand &Other) const {
@@ -85,22 +78,6 @@
std::vector<AsmWriterOperand> Operands;
const CodeGenInstruction *CGI;
- /// MAX_GROUP_NESTING_LEVEL - The maximum number of group nesting
- /// levels we ever expect to see in an asm operand.
- static const int MAX_GROUP_NESTING_LEVEL = 10;
-
- /// GroupLevel - The level of nesting of the current operand
- /// group, such as [reg + (reg + offset)]. -1 means we are not in
- /// a group.
- int GroupLevel;
-
- /// GroupDelim - Remember the delimeter for a group operand.
- char GroupDelim[MAX_GROUP_NESTING_LEVEL];
-
- /// InGroup - Determine whether we are in the middle of an
- /// operand group.
- bool InGroup() const { return GroupLevel != -1; }
-
AsmWriterInst(const CodeGenInstruction &CGI, unsigned Variant);
/// MatchesAllButOneOp - If this instruction is exactly identical to the
@@ -112,70 +89,6 @@
void AddLiteralString(const std::string &Str) {
// If the last operand was already a literal text string, append this to
// it, otherwise add a new operand.
-
- std::string::size_type SearchStart = 0;
- std::string::size_type SpaceStartPos = std::string::npos;
- do {
- // Search for whitespace and replace with calls to set the
- // output column.
- SpaceStartPos = Str.find_first_of(" \t", SearchStart);
- // Assume grouped text is one operand.
- std::string::size_type StartDelimPos = Str.find_first_of("[{(", SearchStart);
-
- SearchStart = std::string::npos;
-
- if (StartDelimPos != std::string::npos) {
- ++GroupLevel;
- assert(GroupLevel < MAX_GROUP_NESTING_LEVEL
- && "Exceeded maximum operand group nesting level");
- GroupDelim[GroupLevel] = Str[StartDelimPos];
- if (SpaceStartPos != std::string::npos &&
- SpaceStartPos > StartDelimPos) {
- // This space doesn't count.
- SpaceStartPos = std::string::npos;
- }
- }
-
- if (InGroup()) {
- // Find the end delimiter.
- char EndDelim = (GroupDelim[GroupLevel] == '{' ? '}' :
- (GroupDelim[GroupLevel] == '(' ? ')' : ']'));
- std::string::size_type EndDelimSearchStart =
- StartDelimPos == std::string::npos ? 0 : StartDelimPos+1;
- std::string::size_type EndDelimPos = Str.find(EndDelim,
- EndDelimSearchStart);
- SearchStart = EndDelimPos;
- if (EndDelimPos != std::string::npos) {
- // Iterate.
- SearchStart = EndDelimPos + 1;
- --GroupLevel;
- assert(GroupLevel > -2 && "Too many end delimeters!");
- }
- if (InGroup())
- SpaceStartPos = std::string::npos;
- }
- } while (SearchStart != std::string::npos);
-
-
- if (SpaceStartPos != std::string::npos) {
- std::string::size_type SpaceEndPos =
- Str.find_first_not_of(" \t", SpaceStartPos+1);
- if (SpaceStartPos != 0) {
- // Emit the first part of the string.
- AddLiteralString(Str.substr(0, SpaceStartPos));
- }
- Operands.push_back(
- AsmWriterOperand(
- "O.PadToColumn(TAI->getOperandColumn(OperandColumn++), 1);\n",
- AsmWriterOperand::isLiteralStatementOperand));
- if (SpaceEndPos != std::string::npos) {
- // Emit the last part of the string.
- AddLiteralString(Str.substr(SpaceEndPos));
- }
- // We've emitted the whole string.
- return;
- }
-
if (!Operands.empty() &&
Operands.back().OperandType == AsmWriterOperand::isLiteralTextOperand)
Operands.back().Str.append(Str);
@@ -190,18 +103,6 @@
if (OperandType == isLiteralTextOperand)
return "O << \"" + Str + "\"; ";
- if (OperandType == isLiteralStatementOperand) {
- return Str;
- }
-
- if (OperandType == isLiteralStatementOperand) {
- return Str;
- }
-
- if (OperandType == isLiteralStatementOperand) {
- return Str;
- }
-
std::string Result = Str + "(MI";
if (MIOpNo != ~0U)
Result += ", " + utostr(MIOpNo);
@@ -214,8 +115,7 @@
/// ParseAsmString - Parse the specified Instruction's AsmString into this
/// AsmWriterInst.
///
-AsmWriterInst::AsmWriterInst(const CodeGenInstruction &CGI, unsigned Variant)
- : GroupLevel(-1) {
+AsmWriterInst::AsmWriterInst(const CodeGenInstruction &CGI, unsigned Variant) {
this->CGI = &CGI;
unsigned CurVariant = ~0U; // ~0 if we are outside a {.|.|.} region, other #.
@@ -455,9 +355,6 @@
}
O << "\n";
}
- O << " EmitComments(*MI);\n";
- // Print the final newline
- O << " O << \"\\n\";\n";
O << " break;\n";
}
@@ -784,16 +681,8 @@
O << " // Emit the opcode for the instruction.\n"
<< " unsigned Bits = OpInfo[MI->getOpcode()];\n"
- << " if (Bits == 0) return false;\n\n";
-
- O << " std::string OpStr(AsmStrs+(Bits & " << (1 << AsmStrBits)-1 << "));\n"
- << " unsigned OperandColumn = 1;\n"
- << " O << OpStr;\n\n";
-
- O << " if (OpStr.find_last_of(\" \\t\") == OpStr.size()-1) {\n"
- << " O.PadToColumn(TAI->getOperandColumn(1));\n"
- << " OperandColumn = 2;\n"
- << " }\n\n";
+ << " if (Bits == 0) return false;\n"
+ << " O << AsmStrs+(Bits & " << (1 << AsmStrBits)-1 << ");\n\n";
// Output the table driven operand information.
BitsLeft = 32-AsmStrBits;
@@ -857,10 +746,10 @@
O << " }\n";
O << " EmitComments(*MI);\n";
+ // Print the final newline
+ O << " O << \"\\n\";\n";
+ O << " return true;\n";
}
- // Print the final newline
- O << " O << \"\\n\";\n";
- O << " return true;\n";
O << "}\n";
}
More information about the llvm-commits
mailing list