diff options
| author | Georgii Rymar <grimar@accesssoftek.com> | 2019-11-25 12:39:03 +0300 |
|---|---|---|
| committer | Georgii Rymar <grimar@accesssoftek.com> | 2019-11-26 11:50:22 +0300 |
| commit | 19edd675c6321bc0447f459f427fa67ad46f5e2e (patch) | |
| tree | b1bb90640dda1285f33a90d5f14bae96b39a5bb6 /lld/ELF/OutputSections.cpp | |
| parent | 78a750276f442726193b007a0010432765abe9d4 (diff) | |
| download | bcm5719-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.cpp | 7 |
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. |

