aboutsummaryrefslogtreecommitdiff
path: root/lib/Bytecode
diff options
context:
space:
mode:
authorChris Lattner <sabre@nondot.org>2003-10-09 20:45:42 +0000
committerChris Lattner <sabre@nondot.org>2003-10-09 20:45:42 +0000
commit6fcf50338eb1ef3e6e290502faad855647ccf4ce (patch)
treebeee058c1639b274eed2e54da61214c2eea153c8 /lib/Bytecode
parent342be126ef5355143e75471bf42c64ac6d939808 (diff)
Pass a vector around to reduce dynamic allocation
Throw the RawInst class in an anon namespace git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@8990 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Bytecode')
-rw-r--r--lib/Bytecode/Reader/InstructionReader.cpp24
-rw-r--r--lib/Bytecode/Reader/Reader.cpp3
-rw-r--r--lib/Bytecode/Reader/ReaderInternals.h3
3 files changed, 17 insertions, 13 deletions
diff --git a/lib/Bytecode/Reader/InstructionReader.cpp b/lib/Bytecode/Reader/InstructionReader.cpp
index b085581c60..1b2ada0d49 100644
--- a/lib/Bytecode/Reader/InstructionReader.cpp
+++ b/lib/Bytecode/Reader/InstructionReader.cpp
@@ -14,15 +14,16 @@
#include "llvm/iPHINode.h"
#include "llvm/iOther.h"
-struct RawInst { // The raw fields out of the bytecode stream...
- unsigned NumOperands;
- unsigned Opcode;
- unsigned Type;
-
- RawInst(const unsigned char *&Buf, const unsigned char *EndBuf,
- std::vector<unsigned> &Args);
-
-};
+namespace {
+ struct RawInst { // The raw fields out of the bytecode stream...
+ unsigned NumOperands;
+ unsigned Opcode;
+ unsigned Type;
+
+ RawInst(const unsigned char *&Buf, const unsigned char *EndBuf,
+ std::vector<unsigned> &Args);
+ };
+}
@@ -102,8 +103,9 @@ RawInst::RawInst(const unsigned char *&Buf, const unsigned char *EndBuf,
Instruction *BytecodeParser::ParseInstruction(const unsigned char *&Buf,
- const unsigned char *EndBuf) {
- std::vector<unsigned> Args;
+ const unsigned char *EndBuf,
+ std::vector<unsigned> &Args) {
+ Args.clear();
RawInst RI(Buf, EndBuf, Args);
const Type *InstTy = getType(RI.Type);
diff --git a/lib/Bytecode/Reader/Reader.cpp b/lib/Bytecode/Reader/Reader.cpp
index bf2b0118a3..ac38037237 100644
--- a/lib/Bytecode/Reader/Reader.cpp
+++ b/lib/Bytecode/Reader/Reader.cpp
@@ -200,7 +200,8 @@ BasicBlock *BytecodeParser::ParseBasicBlock(const unsigned char *&Buf,
BB = ParsedBasicBlocks[BlockNo];
while (Buf < EndBuf) {
- Instruction *Inst = ParseInstruction(Buf, EndBuf);
+ std::vector<unsigned> Args;
+ Instruction *Inst = ParseInstruction(Buf, EndBuf, Args);
insertValue(Inst, Values);
BB->getInstList().push_back(Inst);
BCR_TRACE(4, Inst);
diff --git a/lib/Bytecode/Reader/ReaderInternals.h b/lib/Bytecode/Reader/ReaderInternals.h
index 1fefe23faf..2d75a32131 100644
--- a/lib/Bytecode/Reader/ReaderInternals.h
+++ b/lib/Bytecode/Reader/ReaderInternals.h
@@ -149,7 +149,8 @@ private:
unsigned BlockNo);
Instruction *ParseInstruction(const unsigned char *&Buf,
- const unsigned char *End);
+ const unsigned char *End,
+ std::vector<unsigned> &Args);
void ParseConstantPool(const unsigned char *&Buf, const unsigned char *EndBuf,
ValueTable &Tab, TypeValuesListTy &TypeTab);