[ThinLTO]Expose cache entry expiration time option in llvm-lto and fix a test
authorJames Henderson <jh7370@my.bristol.ac.uk>
Wed, 3 Oct 2018 13:00:20 +0000 (13:00 +0000)
committerJames Henderson <jh7370@my.bristol.ac.uk>
Wed, 3 Oct 2018 13:00:20 +0000 (13:00 +0000)
Two cases in a ThinLTO test were passing for the wrong reasons, since
rL340374. The tests were supposed to be testing that files were being
pruned due to the cache size, but they were in fact being pruned because
they were older than the default expiration period of 1 week.

This change fixes the tests by explicitly setting the expiration time to
the maximum value. This required the option to be exposed in llvm-lto.

By assigning all files in the cache a similar time, it is possible to see
that the newest files are still being kept, and that we aren't passing
for the wrong reason again. In the event that the entry expiration were
to expire for them, then the test would start failing, because these
files would be removed too.

Reviewed by: rnk, inglorion

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

llvm-svn: 343687

llvm/test/ThinLTO/X86/cache.ll
llvm/tools/llvm-lto/llvm-lto.cpp

index 08eb573..c7eebf6 100644 (file)
 ; RUN: %python -c "with open(r'%t.cache/llvmcache-foo-77k', 'w') as file: file.truncate(78848)"
 ; RUN: touch -t 198002031200 %t.cache/llvmcache-foo-77k
 ; RUN: %python -c "with open(r'%t.cache/llvmcache-foo-8', 'w') as file: file.truncate(8)"
+; RUN: touch -t 198002041200 %t.cache/llvmcache-foo-8
 ; RUN: %python -c "with open(r'%t.cache/llvmcache-foo-76', 'w') as file: file.truncate(76)"
-; RUN: llvm-lto -thinlto-action=run -exported-symbol=globalfunc %t2.bc %t.bc -thinlto-cache-dir %t.cache --thinlto-cache-max-size-bytes 78847
+; RUN: touch -t 198002051200 %t.cache/llvmcache-foo-76
+; RUN: llvm-lto -thinlto-action=run -exported-symbol=globalfunc %t2.bc %t.bc -thinlto-cache-dir %t.cache --thinlto-cache-max-size-bytes 78847 --thinlto-cache-entry-expiration 4294967295
 ; RUN: ls %t.cache/llvmcache-foo-8
 ; RUN: ls %t.cache/llvmcache-foo-76
 ; RUN: not ls %t.cache/llvmcache-foo-16
 ; RUN: %python -c "print(' ' * 7)" > %t.cache/llvmcache-foo-7
 ; RUN: touch -t 198002031200 %t.cache/llvmcache-foo-7
 ; RUN: %python -c "print(' ' * 75)" > %t.cache/llvmcache-foo-75
+; RUN: touch -t 198002041200 %t.cache/llvmcache-foo-75
 ; RUN: %python -c "print(' ' * 76)" > %t.cache/llvmcache-foo-76
-; RUN: llvm-lto -thinlto-action=run -exported-symbol=globalfunc %t2.bc %t.bc -thinlto-cache-dir %t.cache --thinlto-cache-max-size-files 4
+; RUN: touch -t 198002051200 %t.cache/llvmcache-foo-76
+; RUN: llvm-lto -thinlto-action=run -exported-symbol=globalfunc %t2.bc %t.bc -thinlto-cache-dir %t.cache --thinlto-cache-max-size-files 4 --thinlto-cache-entry-expiration 4294967295
 ; RUN: ls %t.cache/llvmcache-foo-75
 ; RUN: ls %t.cache/llvmcache-foo-76
 ; RUN: not ls %t.cache/llvmcache-foo-15
index 25f086f..dd19424 100644 (file)
@@ -166,6 +166,10 @@ static cl::opt<int>
     ThinLTOCacheMaxSizeFiles("thinlto-cache-max-size-files", cl::init(1000000),
     cl::desc("Set ThinLTO cache pruning directory maximum number of files."));
 
+static cl::opt<unsigned>
+    ThinLTOCacheEntryExpiration("thinlto-cache-entry-expiration", cl::init(604800) /* 1w */,
+    cl::desc("Set ThinLTO cache entry expiration time."));
+
 static cl::opt<std::string> ThinLTOSaveTempsPrefix(
     "thinlto-save-temps",
     cl::desc("Save ThinLTO temp files using filenames created by adding "
@@ -481,6 +485,7 @@ public:
     ThinGenerator.setTargetOptions(Options);
     ThinGenerator.setCacheDir(ThinLTOCacheDir);
     ThinGenerator.setCachePruningInterval(ThinLTOCachePruningInterval);
+    ThinGenerator.setCacheEntryExpiration(ThinLTOCacheEntryExpiration);
     ThinGenerator.setCacheMaxSizeFiles(ThinLTOCacheMaxSizeFiles);
     ThinGenerator.setCacheMaxSizeBytes(ThinLTOCacheMaxSizeBytes);
     ThinGenerator.setFreestanding(EnableFreestanding);