From f4c3d96eff55311ba470d8556ea71078d131baf9 Mon Sep 17 00:00:00 2001 From: Rui Ueyama Date: Sat, 4 Aug 2018 00:13:13 +0000 Subject: [PATCH] Use the same constants as zlib to represent compression level. This change allows users pass compression level that was not listed in the enum. Also, I think using different values than zlib's compression levels was just confusing. Differential Revision: https://reviews.llvm.org/D50196 llvm-svn: 338939 --- include/llvm/Support/Compression.h | 13 +++++-------- lib/Support/Compression.cpp | 21 ++++----------------- unittests/Support/CompressionTest.cpp | 2 +- 3 files changed, 10 insertions(+), 26 deletions(-) diff --git a/include/llvm/Support/Compression.h b/include/llvm/Support/Compression.h index 2d191abe4b1..f7258f4bf8f 100644 --- a/include/llvm/Support/Compression.h +++ b/include/llvm/Support/Compression.h @@ -23,17 +23,15 @@ class StringRef; namespace zlib { -enum CompressionLevel { - NoCompression, - DefaultCompression, - BestSpeedCompression, - BestSizeCompression -}; +static constexpr int NoCompression = 0; +static constexpr int BestSpeedCompression = 1; +static constexpr int DefaultCompression = 6; +static constexpr int BestSizeCompression = 9; bool isAvailable(); Error compress(StringRef InputBuffer, SmallVectorImpl &CompressedBuffer, - CompressionLevel Level = DefaultCompression); + int Level = DefaultCompression); Error uncompress(StringRef InputBuffer, char *UncompressedBuffer, size_t &UncompressedSize); @@ -49,4 +47,3 @@ uint32_t crc32(StringRef Buffer); } // End of namespace llvm #endif - diff --git a/lib/Support/Compression.cpp b/lib/Support/Compression.cpp index 05bd7b58e08..2217740e2ea 100644 --- a/lib/Support/Compression.cpp +++ b/lib/Support/Compression.cpp @@ -29,16 +29,6 @@ static Error createError(StringRef Err) { return make_error(Err, inconvertibleErrorCode()); } -static int encodeZlibCompressionLevel(zlib::CompressionLevel Level) { - switch (Level) { - case zlib::NoCompression: return 0; - case zlib::BestSpeedCompression: return 1; - case zlib::DefaultCompression: return Z_DEFAULT_COMPRESSION; - case zlib::BestSizeCompression: return 9; - } - llvm_unreachable("Invalid zlib::CompressionLevel!"); -} - static StringRef convertZlibCodeToString(int Code) { switch (Code) { case Z_MEM_ERROR: @@ -58,14 +48,12 @@ static StringRef convertZlibCodeToString(int Code) { bool zlib::isAvailable() { return true; } Error zlib::compress(StringRef InputBuffer, - SmallVectorImpl &CompressedBuffer, - CompressionLevel Level) { + SmallVectorImpl &CompressedBuffer, int Level) { unsigned long CompressedSize = ::compressBound(InputBuffer.size()); CompressedBuffer.reserve(CompressedSize); - int CLevel = encodeZlibCompressionLevel(Level); - int Res = ::compress2((Bytef *)CompressedBuffer.data(), &CompressedSize, - (const Bytef *)InputBuffer.data(), InputBuffer.size(), - CLevel); + int Res = + ::compress2((Bytef *)CompressedBuffer.data(), &CompressedSize, + (const Bytef *)InputBuffer.data(), InputBuffer.size(), Level); // Tell MemorySanitizer that zlib output buffer is fully initialized. // This avoids a false report when running LLVM with uninstrumented ZLib. __msan_unpoison(CompressedBuffer.data(), CompressedSize); @@ -118,4 +106,3 @@ uint32_t zlib::crc32(StringRef Buffer) { llvm_unreachable("zlib::crc32 is unavailable"); } #endif - diff --git a/unittests/Support/CompressionTest.cpp b/unittests/Support/CompressionTest.cpp index 505714bd2da..e9f36c5eebd 100644 --- a/unittests/Support/CompressionTest.cpp +++ b/unittests/Support/CompressionTest.cpp @@ -24,7 +24,7 @@ namespace { #if LLVM_ENABLE_ZLIB == 1 && HAVE_LIBZ -void TestZlibCompression(StringRef Input, zlib::CompressionLevel Level) { +void TestZlibCompression(StringRef Input, int Level) { SmallString<32> Compressed; SmallString<32> Uncompressed;