mirror of
https://github.com/RPCSX/llvm.git
synced 2025-02-27 00:15:58 +00:00
Support, LTO: When pruning a directory, ignore files matching a prefix.
This is a safeguard against data loss if the user specifies a directory that is not a cache directory. Teach the existing cache pruning clients to create files with appropriate names. Differential Revision: https://reviews.llvm.org/D31109 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@298271 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
c7322dafb1
commit
22910652da
@ -52,6 +52,10 @@ Expected<CachePruningPolicy> parseCachePruningPolicy(StringRef PolicyStr);
|
||||
|
||||
/// Peform pruning using the supplied policy, returns true if pruning
|
||||
/// occured, i.e. if Policy.Interval was expired.
|
||||
///
|
||||
/// As a safeguard against data loss if the user specifies the wrong directory
|
||||
/// as their cache directory, this function will ignore files not matching the
|
||||
/// pattern "llvmcache-*".
|
||||
bool pruneCache(StringRef Path, CachePruningPolicy Policy);
|
||||
|
||||
} // namespace llvm
|
||||
|
@ -27,9 +27,11 @@ Expected<NativeObjectCache> lto::localCache(StringRef CacheDirectoryPath,
|
||||
return errorCodeToError(EC);
|
||||
|
||||
return [=](unsigned Task, StringRef Key) -> AddStreamFn {
|
||||
// First, see if we have a cache hit.
|
||||
// This choice of file name allows the cache to be pruned (see pruneCache()
|
||||
// in include/llvm/Support/CachePruning.h).
|
||||
SmallString<64> EntryPath;
|
||||
sys::path::append(EntryPath, CacheDirectoryPath, Key);
|
||||
sys::path::append(EntryPath, CacheDirectoryPath, "llvmcache-" + Key);
|
||||
// First, see if we have a cache hit.
|
||||
ErrorOr<std::unique_ptr<MemoryBuffer>> MBOrErr =
|
||||
MemoryBuffer::getFile(EntryPath);
|
||||
if (MBOrErr) {
|
||||
|
@ -348,7 +348,10 @@ public:
|
||||
ArrayRef<uint8_t>((const uint8_t *)&Entry, sizeof(GlobalValue::GUID)));
|
||||
}
|
||||
|
||||
sys::path::append(EntryPath, CachePath, toHex(Hasher.result()));
|
||||
// This choice of file name allows the cache to be pruned (see pruneCache()
|
||||
// in include/llvm/Support/CachePruning.h).
|
||||
sys::path::append(EntryPath, CachePath,
|
||||
"llvmcache-" + toHex(Hasher.result()));
|
||||
}
|
||||
|
||||
// Access the path to this entry in the cache.
|
||||
|
@ -180,8 +180,11 @@ bool llvm::pruneCache(StringRef Path, CachePruningPolicy Policy) {
|
||||
// Walk all of the files within this directory.
|
||||
for (sys::fs::directory_iterator File(CachePathNative, EC), FileEnd;
|
||||
File != FileEnd && !EC; File.increment(EC)) {
|
||||
// Do not touch the timestamp.
|
||||
if (File->path() == TimestampFile)
|
||||
// Ignore any files not beginning with the string "llvmcache-". This
|
||||
// includes the timestamp file as well as any files created by the user.
|
||||
// This acts as a safeguard against data loss if the user specifies the
|
||||
// wrong directory as their cache directory.
|
||||
if (!sys::path::filename(File->path()).startswith("llvmcache-"))
|
||||
continue;
|
||||
|
||||
// Look at this file. If we can't stat it, there's nothing interesting
|
||||
|
@ -23,11 +23,16 @@
|
||||
; RUN: opt -module-hash -module-summary %s -o %t.bc
|
||||
; RUN: opt -module-hash -module-summary %p/Inputs/cache.ll -o %t2.bc
|
||||
|
||||
; Verify that enabling caching is working
|
||||
; Verify that enabling caching is working, and that the pruner only removes
|
||||
; files matching the pattern "llvmcache-*".
|
||||
; RUN: rm -Rf %t.cache && mkdir %t.cache
|
||||
; RUN: touch -t 197001011200 %t.cache/llvmcache-foo %t.cache/foo
|
||||
; RUN: llvm-lto -thinlto-action=run -exported-symbol=globalfunc %t2.bc %t.bc -thinlto-cache-dir %t.cache
|
||||
; RUN: ls %t.cache | count 4
|
||||
; RUN: ls %t.cache/llvmcache.timestamp
|
||||
; RUN: ls %t.cache | count 3
|
||||
; RUN: ls %t.cache/foo
|
||||
; RUN: not ls %t.cache/llvmcache-foo
|
||||
; RUN: ls %t.cache/llvmcache-* | count 2
|
||||
|
||||
; Verify that enabling caching is working with llvm-lto2
|
||||
; RUN: rm -Rf %t.cache
|
||||
@ -36,6 +41,7 @@
|
||||
; RUN: -r=%t2.bc,_globalfunc,lx \
|
||||
; RUN: -r=%t.bc,_globalfunc,plx
|
||||
; RUN: ls %t.cache | count 2
|
||||
; RUN: ls %t.cache/llvmcache-* | count 2
|
||||
|
||||
target datalayout = "e-m:o-i64:64-f80:128-n8:16:32:64-S128"
|
||||
target triple = "x86_64-apple-macosx10.11.0"
|
||||
|
Loading…
x
Reference in New Issue
Block a user