[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