[PATCH] D42267: [ThinLTO] Allow 0 to be a valid value for pruning interval for C LTO API.

Katya Romanova via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Thu Jan 18 15:40:52 PST 2018


kromanova created this revision.
kromanova added reviewers: tejohnson, mehdi_amini, bd1976llvm.
Herald added a reviewer: deadalnix.
Herald added subscribers: eraman, inglorion.

- Allow 0 to be a valid value pruning interval in C LTO API. Value 0 will cause garbage collector to run. This matches the behavior in C++ LTO API.
- Updated comments accordingly.
- Updated the default value of pruning interval to be 1200 second in llvm-lto; that corresponds to the default values for all other users of C/C++ LTO API. This change is optional and could be reverted if there are some objections.

If someone knows (Mehdi?) the name of the person who works on ThinLTO in Apple, it will be nice to add him as a reviewer, since this is a change in C LTO API.


Repository:
  rL LLVM

https://reviews.llvm.org/D42267

Files:
  include/llvm-c/lto.h
  include/llvm/LTO/legacy/ThinLTOCodeGenerator.h
  test/ThinLTO/X86/cache.ll
  tools/llvm-lto/llvm-lto.cpp


Index: tools/llvm-lto/llvm-lto.cpp
===================================================================
--- tools/llvm-lto/llvm-lto.cpp
+++ tools/llvm-lto/llvm-lto.cpp
@@ -157,7 +157,8 @@
     ThinLTOCacheDir("thinlto-cache-dir", cl::desc("Enable ThinLTO caching."));
 
 static cl::opt<int>
-    ThinLTOCachePruningInterval("thinlto-cache-pruning-interval", cl::desc("Set ThinLTO cache pruning interval."));
+    ThinLTOCachePruningInterval("thinlto-cache-pruning-interval", 
+    cl::init(1200), cl::desc("Set ThinLTO cache pruning interval."));
 
 static cl::opt<std::string> ThinLTOSaveTempsPrefix(
     "thinlto-save-temps",
Index: test/ThinLTO/X86/cache.ll
===================================================================
--- test/ThinLTO/X86/cache.ll
+++ test/ThinLTO/X86/cache.ll
@@ -59,6 +59,27 @@
 ; RUN: llvm-lto -thinlto-action=run -exported-symbol=globalfunc %t2.bc %t.bc -thinlto-cache-dir %t.cache --thinlto-cache-pruning-interval -1
 ; RUN: ls %t.cache/llvmcache-foo
 
+; Verify that the pruner doesn't run and a cache file is not deleted when: 
+; default values for pruning interval and cache expiration are used, 
+; llvmcache.timestamp is current, 
+; cache file is older than default cache expiration value.
+; RUN: rm -Rf %t.cache && mkdir %t.cache
+; RUN: touch -t 197001011200 %t.cache/llvmcache-foo
+; RUN: touch %t.cache/llvmcache.timestamp
+; RUN: llvm-lto -thinlto-action=run -exported-symbol=globalfunc %t2.bc %t.bc -thinlto-cache-dir %t.cache
+; RUN: ls %t.cache/llvmcache-foo
+
+; Verify that the pruner runs and a cache file is deleted when:
+; pruning interval has value 0 (i.e. run garbage collector now)
+; default value for cache expiration is used,
+; llvmcache.timestamp is current,
+; cache file is older than default cache expiration value.
+; RUN: rm -Rf %t.cache && mkdir %t.cache
+; RUN: touch -t 197001011200 %t.cache/llvmcache-foo
+; RUN: touch %t.cache/llvmcache.timestamp
+; RUN: llvm-lto -thinlto-action=run -exported-symbol=globalfunc %t2.bc %t.bc -thinlto-cache-dir %t.cache --thinlto-cache-pruning-interval 0
+; RUN: not ls %t.cache/llvmcache-foo
+
 target datalayout = "e-m:o-i64:64-f80:128-n8:16:32:64-S128"
 target triple = "x86_64-apple-macosx10.11.0"
 
Index: include/llvm-c/lto.h
===================================================================
--- include/llvm-c/lto.h
+++ include/llvm-c/lto.h
@@ -784,7 +784,7 @@
 /**
  * Sets the cache pruning interval (in seconds). A negative value disables the
  * pruning. An unspecified default value will be applied, and a value of 0 will
- * be ignored.
+ * be force prunning to occur.
  *
  * \since LTO_API_VERSION=18
  */
Index: include/llvm/LTO/legacy/ThinLTOCodeGenerator.h
===================================================================
--- include/llvm/LTO/legacy/ThinLTOCodeGenerator.h
+++ include/llvm/LTO/legacy/ThinLTOCodeGenerator.h
@@ -131,7 +131,8 @@
    * To avoid filling the disk space, a few knobs are provided:
    *  - The pruning interval limit the frequency at which the garbage collector
    *    will try to scan the cache directory to prune it from expired entries.
-   *    Setting to -1 disable the pruning (default).
+   *    Setting to -1 disable the pruning (default). Setting to 0 force pruning
+   *    to occur.
    *  - The pruning expiration time indicates to the garbage collector how old
    *    an entry needs to be to be removed.
    *  - Finally, the garbage collector can be instructed to prune the cache till
@@ -149,10 +150,9 @@
   void setCacheDir(std::string Path) { CacheOptions.Path = std::move(Path); }
 
   /// Cache policy: interval (seconds) between two prunes of the cache. Set to a
-  /// negative value to disable pruning. A value of 0 will be ignored.
+  /// negative value to disable pruning. A value of 0 will force prunning to
+  /// occur.
   void setCachePruningInterval(int Interval) {
-    if (Interval == 0)
-      return;
     if(Interval < 0)
       CacheOptions.Policy.Interval.reset();
     else


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D42267.130502.patch
Type: text/x-patch
Size: 3972 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20180118/16b4b096/attachment.bin>


More information about the llvm-commits mailing list