[llvm-commits] CVS: llvm/lib/Support/Compressor.cpp
Chris Lattner
lattner at cs.uiuc.edu
Sat Jan 29 09:06:11 PST 2005
Changes in directory llvm/lib/Support:
Compressor.cpp updated: 1.11 -> 1.12
---
Log message:
After reading in a bc file, trim the resultant buffer down to what we
really need. This reduces 4M of memory consumption reading 176.gcc.
---
Diffs of the changes: (+12 -2)
Compressor.cpp | 14 ++++++++++++--
1 files changed, 12 insertions(+), 2 deletions(-)
Index: llvm/lib/Support/Compressor.cpp
diff -u llvm/lib/Support/Compressor.cpp:1.11 llvm/lib/Support/Compressor.cpp:1.12
--- llvm/lib/Support/Compressor.cpp:1.11 Sat Jan 29 10:53:02 2005
+++ llvm/lib/Support/Compressor.cpp Sat Jan 29 11:05:56 2005
@@ -119,7 +119,7 @@
struct BufferContext {
char* buff;
unsigned size;
- BufferContext(unsigned compressedSize ) {
+ BufferContext(unsigned compressedSize) {
// Null to indicate malloc of a new block
buff = 0;
@@ -128,12 +128,21 @@
// in the callback for an initial allocation of 4x compressedSize. This
// calculation is based on the typical compression ratio of bzip2 on LLVM
// bytecode files which typically ranges in the 50%-75% range. Since we
- // tyipcally get at least 50%, doubling is insufficient. By using a 4x
+ // typically get at least 50%, doubling is insufficient. By using a 4x
// multiplier on the first allocation, we minimize the impact of having to
// copy the buffer on reallocation.
size = compressedSize*2;
}
+ /// trimTo - Reduce the size of the buffer down to the specified amount. This
+ /// is useful after have read in the bytecode file to discard extra unused
+ /// memory.
+ ///
+ void trimTo(size_t NewSize) {
+ buff = (char*)::realloc(buff, NewSize);
+ size = NewSize;
+ }
+
/// This function handles allocation of the buffer used for decompression of
/// compressed bytecode files. It is called by Compressor::decompress which is
/// called by BytecodeReader::ParseBytecode.
@@ -333,6 +342,7 @@
Compressor::compressToNewBuffer(const char* in, unsigned size, char*&out) {
BufferContext bc(size);
uint64_t result = compress(in,size,BufferContext::callback,(void*)&bc);
+ bc.trimTo(result);
out = bc.buff;
return result;
}
More information about the llvm-commits
mailing list