diff options
author | Chris Lattner <sabre@nondot.org> | 2013-01-21 18:24:49 +0000 |
---|---|---|
committer | Chris Lattner <sabre@nondot.org> | 2013-01-21 18:24:49 +0000 |
commit | 69582cf6c46456ad542df5aa09c47700c9525645 (patch) | |
tree | 9cbf35947385101c7c8f9d9586f3bf6b1f7ad86b /lib/Bitcode | |
parent | afe77f33b2a361ed0d001596dcdde0e16d57abee (diff) | |
download | external_llvm-69582cf6c46456ad542df5aa09c47700c9525645.zip external_llvm-69582cf6c46456ad542df5aa09c47700c9525645.tar.gz external_llvm-69582cf6c46456ad542df5aa09c47700c9525645.tar.bz2 |
Fix a heinous inefficiency introduced in r149918, wherein reading each byte of a
BLOB (i.e., large, performance intensive data) in a bitcode file was switched to
invoking one virtual method call per byte read. Now we do one virtual call per
BLOB.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@173065 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Bitcode')
-rw-r--r-- | lib/Bitcode/Reader/BitstreamReader.cpp | 17 |
1 files changed, 8 insertions, 9 deletions
diff --git a/lib/Bitcode/Reader/BitstreamReader.cpp b/lib/Bitcode/Reader/BitstreamReader.cpp index 92133bb..7984512 100644 --- a/lib/Bitcode/Reader/BitstreamReader.cpp +++ b/lib/Bitcode/Reader/BitstreamReader.cpp @@ -255,18 +255,17 @@ unsigned BitstreamCursor::readRecord(unsigned AbbrevID, break; } - // Otherwise, read the number of bytes. If we can return a reference to - // the data, do so to avoid copying it. + // Otherwise, inform the streamer that we need these bytes in memory. + const char *Ptr = (const char*) + BitStream->getBitcodeBytes().getPointer(CurBitPos/8, NumElts); + + // If we can return a reference to the data, do so to avoid copying it. if (Blob) { - *Blob = - StringRef((const char*)BitStream->getBitcodeBytes().getPointer( - CurBitPos/8, NumElts), - NumElts); + *Blob = StringRef(Ptr, NumElts); } else { - // FIXME: This is a brutally inefficient way to do this. Why isn't this - // just using getPointer? + // Otherwise, unpack into Vals with zero extension. for (; NumElts; --NumElts) - Vals.push_back(Read(8)); + Vals.push_back((unsigned char)*Ptr++); } // Skip over tail padding. JumpToBit(NewEnd); |