Allow 0 to be a valid value pruning interval in C LTO API. Value 0 will cause garbage...
authorEkaterina Romanova <katya_romanova@playstation.sony.com>
Thu, 15 Feb 2018 23:29:21 +0000 (23:29 +0000)
committerEkaterina Romanova <katya_romanova@playstation.sony.com>
Thu, 15 Feb 2018 23:29:21 +0000 (23:29 +0000)
llvm-svn: 325303

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

index 8ea24244034c4b7ad65b32c27f5d883c60715c37..4eee5f1f11328dc7e363293163365dfe73a7e7d1 100644 (file)
@@ -784,7 +784,7 @@ extern void thinlto_codegen_set_cache_dir(thinlto_code_gen_t cg,
 /**
  * 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.
+ * force prunning to occur.
  *
  * \since LTO_API_VERSION=18
  */
index 07e45d4c122bdc37dfebf187e217fce1cbdf877c..e47456445f05f0c868ac5594188acfdd0b778fe5 100644 (file)
@@ -131,7 +131,8 @@ public:
    * 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 will 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 @@ public:
   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 pruning to
+  /// occur.
   void setCachePruningInterval(int Interval) {
-    if (Interval == 0)
-      return;
     if(Interval < 0)
       CacheOptions.Policy.Interval.reset();
     else
index 75466442d786926f0e9e94fdc490901228070b3c..985e741099a2393bd8a16cd0e62564004fbf4256 100644 (file)
 ; 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 e7788f656cd8b8da09fde0c7250f91feb009def4..9e5458f4ad91869f58c55d228bdada9a0d44a8af 100644 (file)
@@ -157,7 +157,8 @@ static cl::opt<std::string>
     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",