forked from OSchip/llvm-project
[ThinLTO/gold] Implement ThinLTO cache pruning support
Differential Revision: https://reviews.llvm.org/D37993 llvm-svn: 313592
This commit is contained in:
parent
a026eb5f50
commit
bb4b4eef61
|
@ -24,6 +24,42 @@
|
|||
|
||||
; RUN: ls %t.cache | count 2
|
||||
|
||||
|
||||
; Create two files that would be removed by cache pruning due to age.
|
||||
; We should only remove files matching the pattern "llvmcache-*".
|
||||
|
||||
; RUN: touch -t 197001011200 %t.cache/llvmcache-foo %t.cache/foo
|
||||
; RUN: %gold -m elf_x86_64 -plugin %llvmshlibdir/LLVMgold.so \
|
||||
; RUN: --plugin-opt=thinlto \
|
||||
; RUN: --plugin-opt=cache-dir=%t.cache \
|
||||
; RUN: --plugin-opt=cache-policy=prune_after=1h \
|
||||
; RUN: -o %t3.o %t2.o %t.o
|
||||
|
||||
; Two cached objects, plus a timestamp file and "foo", minus the file we removed.
|
||||
; RUN: ls %t.cache | count 4
|
||||
|
||||
|
||||
; Create a file of size 64KB.
|
||||
; RUN: %python -c "print(' ' * 65536)" > %t.cache/llvmcache-foo
|
||||
|
||||
; This should leave the file in place.
|
||||
; RUN: %gold -m elf_x86_64 -plugin %llvmshlibdir/LLVMgold.so \
|
||||
; RUN: --plugin-opt=thinlto \
|
||||
; RUN: --plugin-opt=cache-dir=%t.cache \
|
||||
; RUN: --plugin-opt=cache-policy=cache_size_bytes=128k \
|
||||
; RUN: -o %t3.o %t2.o %t.o
|
||||
; RUN: ls %t.cache | count 5
|
||||
|
||||
|
||||
; This should remove it.
|
||||
; RUN: %gold -m elf_x86_64 -plugin %llvmshlibdir/LLVMgold.so \
|
||||
; RUN: --plugin-opt=thinlto \
|
||||
; RUN: --plugin-opt=cache-dir=%t.cache \
|
||||
; RUN: --plugin-opt=cache-policy=cache_size_bytes=32k \
|
||||
; RUN: -o %t3.o %t2.o %t.o
|
||||
; RUN: ls %t.cache | count 4
|
||||
|
||||
|
||||
target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"
|
||||
target triple = "x86_64-unknown-linux-gnu"
|
||||
|
||||
|
|
|
@ -22,6 +22,7 @@
|
|||
#include "llvm/LTO/Caching.h"
|
||||
#include "llvm/LTO/LTO.h"
|
||||
#include "llvm/Object/Error.h"
|
||||
#include "llvm/Support/CachePruning.h"
|
||||
#include "llvm/Support/CommandLine.h"
|
||||
#include "llvm/Support/FileSystem.h"
|
||||
#include "llvm/Support/ManagedStatic.h"
|
||||
|
@ -174,6 +175,8 @@ namespace options {
|
|||
static std::string thinlto_object_suffix_replace;
|
||||
// Optional path to a directory for caching ThinLTO objects.
|
||||
static std::string cache_dir;
|
||||
// Optional pruning policy for ThinLTO caches.
|
||||
static std::string cache_policy;
|
||||
// Additional options to pass into the code generator.
|
||||
// Note: This array will contain all plugin options which are not claimed
|
||||
// as plugin exclusive to pass to the code generator.
|
||||
|
@ -222,6 +225,8 @@ namespace options {
|
|||
"thinlto-object-suffix-replace expects 'old;new' format");
|
||||
} else if (opt.startswith("cache-dir=")) {
|
||||
cache_dir = opt.substr(strlen("cache-dir="));
|
||||
} else if (opt.startswith("cache-policy=")) {
|
||||
cache_policy = opt.substr(strlen("cache-policy="));
|
||||
} else if (opt.size() == 2 && opt[0] == 'O') {
|
||||
if (opt[1] < '0' || opt[1] > '3')
|
||||
message(LDPL_FATAL, "Optimization level must be between 0 and 3");
|
||||
|
@ -971,5 +976,11 @@ static ld_plugin_status cleanup_hook(void) {
|
|||
EC.message().c_str());
|
||||
}
|
||||
|
||||
// Prune cache
|
||||
if (!options::cache_policy.empty()) {
|
||||
CachePruningPolicy policy = check(parseCachePruningPolicy(options::cache_policy));
|
||||
pruneCache(options::cache_dir, policy);
|
||||
}
|
||||
|
||||
return LDPS_OK;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue