diff options
author | Chris Lattner <sabre@nondot.org> | 2011-04-17 22:24:13 +0000 |
---|---|---|
committer | Chris Lattner <sabre@nondot.org> | 2011-04-17 22:24:13 +0000 |
commit | 9080391b5591e3a0647a5b0a26c404246f726f65 (patch) | |
tree | 6cbbb83868f3eef5185384fc9c70b2dab8b4875a /llvm/utils/TableGen/FastISelEmitter.cpp | |
parent | 0d7a5a7daad34fa9de07e5987272e77347aaf502 (diff) | |
download | bcm5719-llvm-9080391b5591e3a0647a5b0a26c404246f726f65.tar.gz bcm5719-llvm-9080391b5591e3a0647a5b0a26c404246f726f65.zip |
change OperandsSignature to use SmallVector<char> instead of std::vector<string>
since the strings are always exactly one character, and there are usually only 2-3 operands.
llvm-svn: 129678
Diffstat (limited to 'llvm/utils/TableGen/FastISelEmitter.cpp')
-rw-r--r-- | llvm/utils/TableGen/FastISelEmitter.cpp | 32 |
1 files changed, 16 insertions, 16 deletions
diff --git a/llvm/utils/TableGen/FastISelEmitter.cpp b/llvm/utils/TableGen/FastISelEmitter.cpp index 8e04e40c0a9..62ac64d8c12 100644 --- a/llvm/utils/TableGen/FastISelEmitter.cpp +++ b/llvm/utils/TableGen/FastISelEmitter.cpp @@ -40,7 +40,7 @@ struct InstructionMemo { /// types. It has utility methods for emitting text based on the operands. /// struct OperandsSignature { - std::vector<std::string> Operands; + SmallVector<char, 3> Operands; bool operator<(const OperandsSignature &O) const { return Operands < O.Operands; @@ -57,11 +57,11 @@ struct OperandsSignature { if (!InstPatNode->isLeaf()) { if (InstPatNode->getOperator()->getName() == "imm") { - Operands.push_back("i"); + Operands.push_back('i'); return true; } if (InstPatNode->getOperator()->getName() == "fpimm") { - Operands.push_back("f"); + Operands.push_back('f'); return true; } } @@ -78,11 +78,11 @@ struct OperandsSignature { if (!Op->isLeaf()) { if (Op->getOperator()->getName() == "imm") { - Operands.push_back("i"); + Operands.push_back('i'); continue; } if (Op->getOperator()->getName() == "fpimm") { - Operands.push_back("f"); + Operands.push_back('f'); continue; } // For now, ignore other non-leaf nodes. @@ -122,18 +122,18 @@ struct OperandsSignature { return false; } else DstRC = RC; - Operands.push_back("r"); + Operands.push_back('r'); } return true; } void PrintParameters(raw_ostream &OS) const { for (unsigned i = 0, e = Operands.size(); i != e; ++i) { - if (Operands[i] == "r") { + if (Operands[i] == 'r') { OS << "unsigned Op" << i << ", bool Op" << i << "IsKill"; - } else if (Operands[i] == "i") { + } else if (Operands[i] == 'i') { OS << "uint64_t imm" << i; - } else if (Operands[i] == "f") { + } else if (Operands[i] == 'f') { OS << "ConstantFP *f" << i; } else { assert("Unknown operand kind!"); @@ -155,13 +155,13 @@ struct OperandsSignature { if (PrintedArg) OS << ", "; - if (Operands[i] == "r") { + if (Operands[i] == 'r') { OS << "Op" << i << ", Op" << i << "IsKill"; PrintedArg = true; - } else if (Operands[i] == "i") { + } else if (Operands[i] == 'i') { OS << "imm" << i; PrintedArg = true; - } else if (Operands[i] == "f") { + } else if (Operands[i] == 'f') { OS << "f" << i; PrintedArg = true; } else { @@ -173,11 +173,11 @@ struct OperandsSignature { void PrintArguments(raw_ostream &OS) const { for (unsigned i = 0, e = Operands.size(); i != e; ++i) { - if (Operands[i] == "r") { + if (Operands[i] == 'r') { OS << "Op" << i << ", Op" << i << "IsKill"; - } else if (Operands[i] == "i") { + } else if (Operands[i] == 'i') { OS << "imm" << i; - } else if (Operands[i] == "f") { + } else if (Operands[i] == 'f') { OS << "f" << i; } else { assert("Unknown operand kind!"); @@ -266,7 +266,7 @@ void FastISelMap::CollectPatterns(CodeGenDAGPatterns &CGP) { if (!Op->isSubClassOf("Instruction")) continue; CodeGenInstruction &II = CGP.getTargetInfo().getInstruction(Op); - if (II.Operands.size() == 0) + if (II.Operands.empty()) continue; // For now, ignore multi-instruction patterns. |