1
0
mirror of https://github.com/RPCS3/llvm-mirror.git synced 2024-11-22 18:54:02 +01:00

LTO: When creating a local cache, create the cache directory if it does not already exist.

Differential Revision: https://reviews.llvm.org/D30519

llvm-svn: 296726
This commit is contained in:
Peter Collingbourne 2017-03-02 02:02:38 +00:00
parent ea58cf0e44
commit dfbe8f3dfb
8 changed files with 18 additions and 13 deletions

View File

@ -28,8 +28,10 @@ namespace lto {
typedef std::function<void(unsigned Task, StringRef Path)> AddFileFn; typedef std::function<void(unsigned Task, StringRef Path)> AddFileFn;
/// Create a local file system cache which uses the given cache directory and /// Create a local file system cache which uses the given cache directory and
/// file callback. /// file callback. This function also creates the cache directory if it does not
NativeObjectCache localCache(StringRef CacheDirectoryPath, AddFileFn AddFile); /// already exist.
Expected<NativeObjectCache> localCache(StringRef CacheDirectoryPath,
AddFileFn AddFile);
} // namespace lto } // namespace lto
} // namespace llvm } // namespace llvm

View File

@ -46,8 +46,11 @@ static void commitEntry(StringRef TempFilename, StringRef EntryPath) {
} }
} }
NativeObjectCache lto::localCache(StringRef CacheDirectoryPath, Expected<NativeObjectCache> lto::localCache(StringRef CacheDirectoryPath,
AddFileFn AddFile) { AddFileFn AddFile) {
if (std::error_code EC = sys::fs::create_directories(CacheDirectoryPath))
return errorCodeToError(EC);
return [=](unsigned Task, StringRef Key) -> AddStreamFn { return [=](unsigned Task, StringRef Key) -> AddStreamFn {
// First, see if we have a cache hit. // First, see if we have a cache hit.
SmallString<64> EntryPath; SmallString<64> EntryPath;

View File

@ -1,4 +1,4 @@
; RUN: rm -rf %t.cache && mkdir %t.cache ; RUN: rm -rf %t.cache
; RUN: opt -module-hash -module-summary %s -o %t.bc ; RUN: opt -module-hash -module-summary %s -o %t.bc
; RUN: llvm-lto2 -o %t.o %t.bc -cache-dir %t.cache -r=%t.bc,globalfunc,plx ; RUN: llvm-lto2 -o %t.o %t.bc -cache-dir %t.cache -r=%t.bc,globalfunc,plx

View File

@ -10,7 +10,7 @@
; RUN: ls %t.cache | count 1 ; RUN: ls %t.cache | count 1
; Verify that enabling caching is ignoring module without hash with llvm-lto2 ; Verify that enabling caching is ignoring module without hash with llvm-lto2
; RUN: rm -Rf %t.cache && mkdir %t.cache ; RUN: rm -Rf %t.cache
; RUN: llvm-lto2 -o %t.o %t2.bc %t.bc -cache-dir %t.cache \ ; RUN: llvm-lto2 -o %t.o %t2.bc %t.bc -cache-dir %t.cache \
; RUN: -r=%t2.bc,_main,plx \ ; RUN: -r=%t2.bc,_main,plx \
; RUN: -r=%t2.bc,_globalfunc,lx \ ; RUN: -r=%t2.bc,_globalfunc,lx \
@ -30,7 +30,7 @@
; RUN: ls %t.cache | count 3 ; RUN: ls %t.cache | count 3
; Verify that enabling caching is working with llvm-lto2 ; Verify that enabling caching is working with llvm-lto2
; RUN: rm -Rf %t.cache && mkdir %t.cache ; RUN: rm -Rf %t.cache
; RUN: llvm-lto2 -o %t.o %t2.bc %t.bc -cache-dir %t.cache \ ; RUN: llvm-lto2 -o %t.o %t2.bc %t.bc -cache-dir %t.cache \
; RUN: -r=%t2.bc,_main,plx \ ; RUN: -r=%t2.bc,_main,plx \
; RUN: -r=%t2.bc,_globalfunc,lx \ ; RUN: -r=%t2.bc,_globalfunc,lx \

View File

@ -8,7 +8,7 @@
; RUN: ls %t.cache | count 3 ; RUN: ls %t.cache | count 3
; Verify that enabling caching is working with llvm-lto2 ; Verify that enabling caching is working with llvm-lto2
; RUN: rm -Rf %t.cache && mkdir %t.cache ; RUN: rm -Rf %t.cache
; RUN: llvm-lto2 -o %t.o %t2.bc %t.bc -cache-dir %t.cache \ ; RUN: llvm-lto2 -o %t.o %t2.bc %t.bc -cache-dir %t.cache \
; RUN: -r=%t2.bc,_main,plx ; RUN: -r=%t2.bc,_main,plx
; RUN: ls %t.cache | count 2 ; RUN: ls %t.cache | count 2
@ -25,7 +25,7 @@
; RUN: ls %t.cache | count 1 ; RUN: ls %t.cache | count 1
; Verify that caching is disabled for module without hash, with llvm-lto2 ; Verify that caching is disabled for module without hash, with llvm-lto2
; RUN: rm -Rf %t.cache && mkdir %t.cache ; RUN: rm -Rf %t.cache
; RUN: llvm-lto2 -o %t.o %t2.bc %t.bc -cache-dir %t.cache \ ; RUN: llvm-lto2 -o %t.o %t2.bc %t.bc -cache-dir %t.cache \
; RUN: -r=%t2.bc,_main,plx ; RUN: -r=%t2.bc,_main,plx
; RUN: ls %t.cache | count 0 ; RUN: ls %t.cache | count 0

View File

@ -2,7 +2,7 @@
; RUN: opt -module-summary %s -o %t.o ; RUN: opt -module-summary %s -o %t.o
; RUN: opt -module-summary %p/Inputs/cache.ll -o %t2.o ; RUN: opt -module-summary %p/Inputs/cache.ll -o %t2.o
; RUN: rm -Rf %t.cache && mkdir %t.cache ; RUN: rm -Rf %t.cache
; RUN: %gold -m elf_x86_64 -plugin %llvmshlibdir/LLVMgold.so \ ; RUN: %gold -m elf_x86_64 -plugin %llvmshlibdir/LLVMgold.so \
; RUN: --plugin-opt=thinlto \ ; RUN: --plugin-opt=thinlto \
; RUN: --plugin-opt=cache-dir=%t.cache \ ; RUN: --plugin-opt=cache-dir=%t.cache \
@ -16,7 +16,7 @@
; RUN: opt -module-hash -module-summary %s -o %t.o ; RUN: opt -module-hash -module-summary %s -o %t.o
; RUN: opt -module-hash -module-summary %p/Inputs/cache.ll -o %t2.o ; RUN: opt -module-hash -module-summary %p/Inputs/cache.ll -o %t2.o
; RUN: rm -Rf %t.cache && mkdir %t.cache ; RUN: rm -Rf %t.cache
; RUN: %gold -m elf_x86_64 -plugin %llvmshlibdir/LLVMgold.so \ ; RUN: %gold -m elf_x86_64 -plugin %llvmshlibdir/LLVMgold.so \
; RUN: --plugin-opt=thinlto \ ; RUN: --plugin-opt=thinlto \
; RUN: --plugin-opt=cache-dir=%t.cache \ ; RUN: --plugin-opt=cache-dir=%t.cache \

View File

@ -835,7 +835,7 @@ static ld_plugin_status allSymbolsReadHook() {
NativeObjectCache Cache; NativeObjectCache Cache;
if (!options::cache_dir.empty()) if (!options::cache_dir.empty())
Cache = localCache(options::cache_dir, AddFile); Cache = check(localCache(options::cache_dir, AddFile));
check(Lto->run(AddStream, Cache)); check(Lto->run(AddStream, Cache));

View File

@ -284,7 +284,7 @@ int main(int argc, char **argv) {
NativeObjectCache Cache; NativeObjectCache Cache;
if (!CacheDir.empty()) if (!CacheDir.empty())
Cache = localCache(CacheDir, AddFile); Cache = check(localCache(CacheDir, AddFile), "failed to create cache");
check(Lto.run(AddStream, Cache), "LTO::run failed"); check(Lto.run(AddStream, Cache), "LTO::run failed");
} }