summaryrefslogtreecommitdiffstats
path: root/lld/ELF/OutputSections.cpp
diff options
context:
space:
mode:
authorGeorgii Rymar <grimar@accesssoftek.com>2019-11-25 12:39:03 +0300
committerGeorgii Rymar <grimar@accesssoftek.com>2019-11-26 11:50:22 +0300
commit19edd675c6321bc0447f459f427fa67ad46f5e2e (patch)
treeb1bb90640dda1285f33a90d5f14bae96b39a5bb6 /lld/ELF/OutputSections.cpp
parent78a750276f442726193b007a0010432765abe9d4 (diff)
downloadbcm5719-llvm-19edd675c6321bc0447f459f427fa67ad46f5e2e.tar.gz
bcm5719-llvm-19edd675c6321bc0447f459f427fa67ad46f5e2e.zip
[LLD][ELF] - Make compression level be dependent on -On.
Currently LLD always use zlib compression level 6. This patch changes it to use 1 for -O0, -O1 and 6 for -O2. It fixes https://bugs.llvm.org/show_bug.cgi?id=44089. There was also a thread in llvm-dev on this topic: https://lists.llvm.org/pipermail/llvm-dev/2018-August/125020.html Here is a table with results of building clang mentioned there: ``` Level Time Size 0 0m17.128s 2045081496 Z_NO_COMPRESSION 1 0m31.471s 922618584 Z_BEST_SPEED 2 0m32.659s 903642376 3 0m36.749s 890805856 4 0m41.532s 876697184 5 0m48.383s 862778576 6 1m3.176s 855251640 Z_DEFAULT_COMPRESSION 7 1m15.335s 853755920 8 2m0.561s 852497560 9 2m33.972s 852397408 Z_BEST_COMPRESSION ``` It shows that it is probably not reasonable to use values greater than 6. Differential revision: https://reviews.llvm.org/D70658
Diffstat (limited to 'lld/ELF/OutputSections.cpp')
-rw-r--r--lld/ELF/OutputSections.cpp7
1 files changed, 6 insertions, 1 deletions
diff --git a/lld/ELF/OutputSections.cpp b/lld/ELF/OutputSections.cpp
index cc051dba0e0..8d328626b85 100644
--- a/lld/ELF/OutputSections.cpp
+++ b/lld/ELF/OutputSections.cpp
@@ -272,7 +272,12 @@ template <class ELFT> void OutputSection::maybeCompress() {
// Write section contents to a temporary buffer and compress it.
std::vector<uint8_t> buf(size);
writeTo<ELFT>(buf.data());
- if (Error e = zlib::compress(toStringRef(buf), compressedData))
+ // We chose 1 as the default compression level because it is the fastest. If
+ // -O2 is given, we use level 6 to compress debug info more by ~15%. We found
+ // that level 7 to 9 doesn't make much difference (~1% more compression) while
+ // they take significant amount of time (~2x), so level 6 seems enough.
+ if (Error e = zlib::compress(toStringRef(buf), compressedData,
+ config->optimize >= 2 ? 6 : 1))
fatal("compress failed: " + llvm::toString(std::move(e)));
// Update section headers.
OpenPOWER on IntegriCloud