File: lto-cache.ll

package info (click to toggle)
swiftlang 6.0.3-2
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 2,519,992 kB
  • sloc: cpp: 9,107,863; ansic: 2,040,022; asm: 1,135,751; python: 296,500; objc: 82,456; f90: 60,502; lisp: 34,951; pascal: 19,946; sh: 18,133; perl: 7,482; ml: 4,937; javascript: 4,117; makefile: 3,840; awk: 3,535; xml: 914; fortran: 619; cs: 573; ruby: 573
file content (139 lines) | stat: -rw-r--r-- 5,847 bytes parent folder | download | duplicates (14)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
; REQUIRES: x86
; NetBSD: noatime mounts currently inhibit 'touch' from updating atime
; UNSUPPORTED: system-netbsd

; RUN: rm -rf %t; split-file %s %t
; RUN: opt -module-hash -module-summary %t/foo.ll -o %t/foo.o
; RUN: opt -module-hash -module-summary %t/bar.ll -o %t/bar.o

; RUN: rm -Rf %t/cache && mkdir %t/cache
;; Create two files that would be removed by cache pruning due to age.
;; We should only remove files matching the pattern "llvmcache-*".
; RUN: touch -t 197001011200 %t/cache/llvmcache-baz %t/cache/baz
; RUN: %lld -cache_path_lto %t/cache \
; RUN:   --thinlto-cache-policy=prune_after=1h:prune_interval=0s \
; RUN:   -o %t/test %t/foo.o %t/bar.o

;; Two cached objects, plus a timestamp file and "baz", minus the file we removed.
; RUN: ls %t/cache | count 4

;; Same thing, but with `-prune_after_lto`
; RUN: touch -t 197001011200 %t/cache/llvmcache-baz
; RUN: %lld -cache_path_lto %t/cache -prune_after_lto 3600 -prune_interval_lto 0 \
; RUN:   -o %t/test %t/foo.o %t/bar.o
; RUN: ls %t/cache | count 4

;; Create a file of size 64KB.
; RUN: %python -c "print(' ' * 65536)" > %t/cache/llvmcache-baz

;; This should leave the file in place.
; RUN: %lld -cache_path_lto %t/cache \
; RUN:   --thinlto-cache-policy=cache_size_bytes=128k:prune_interval=0s \
; RUN:   -o %t/test %t/foo.o %t/bar.o
; RUN: ls %t/cache | count 5

;; Increase the age of llvmcache-baz, which will give it the oldest time stamp
;; so that it is processed and removed first.
; RUN: %python -c 'import os,sys,time; t=time.time()-120; os.utime(sys.argv[1],(t,t))' \
; RUN:    %t/cache/llvmcache-baz

;; This should remove it.
; RUN: %lld -cache_path_lto %t/cache \
; RUN:   --thinlto-cache-policy=cache_size_bytes=32k:prune_interval=0s \
; RUN:   -o %t/test %t/foo.o %t/bar.o
; RUN: ls %t/cache | count 4

;; Delete everything except for the timestamp, "baz" and one cache file.
; RUN: %lld -cache_path_lto %t/cache \
; RUN:   --thinlto-cache-policy=prune_after=0s:cache_size=0%:cache_size_files=1:prune_interval=0s \
; RUN:   -o %t/test %t/foo.o %t/bar.o
; RUN: ls %t/cache | count 3

;; Check that we remove the least recently used file first.
; RUN: rm -fr %t/cache
; RUN: mkdir %t/cache
; RUN: echo xyz > %t/cache/llvmcache-old
; RUN: touch -t 198002011200 %t/cache/llvmcache-old
; RUN: echo xyz > %t/cache/llvmcache-newer
; RUN: touch -t 198002021200 %t/cache/llvmcache-newer
; RUN: %lld -cache_path_lto %t/cache \
; RUN:   --thinlto-cache-policy=prune_after=0s:cache_size=0%:cache_size_files=3:prune_interval=0s \
; RUN:   -o %t/test %t/foo.o %t/bar.o
; RUN: ls %t/cache | FileCheck %s

;; Check that  `-max_relative_cache_size_lto` is a legal argument.
; RUN: %lld -cache_path_lto %t/cache -max_relative_cache_size_lto 10 \
; RUN:   -o %t/test %t/foo.o %t/bar.o

; CHECK-NOT: llvmcache-old
; CHECK: llvmcache-newer
; CHECK-NOT: llvmcache-old

;; Check that mllvm options participate in the cache key
; RUN: rm -rf %t/cache && mkdir %t/cache
; RUN: %lld -cache_path_lto %t/cache -o %t/test %t/foo.o %t/bar.o
; RUN: ls %t/cache | count 3
; RUN: %lld -cache_path_lto %t/cache -o %t/test %t/foo.o %t/bar.o -mllvm -enable-ml-inliner=default
; RUN: ls %t/cache | count 5

;; Adding another option resuls in 2 more cache entries
; RUN: rm -rf %t/cache && mkdir %t/cache
; RUN: %lld -cache_path_lto %t/cache -o %t/test %t/foo.o %t/bar.o
; RUN: ls %t/cache | count 3
; RUN: %lld -cache_path_lto %t/cache -o %t/test %t/foo.o %t/bar.o -mllvm -enable-ml-inliner=default
; RUN: ls %t/cache | count 5
; RUN: %lld -cache_path_lto %t/cache -o %t/test %t/foo.o %t/bar.o -mllvm -enable-ml-inliner=default -mllvm -max-devirt-iterations=1
; RUN: ls %t/cache | count 7

;; Changing order may matter - e.g. if overriding -mllvm options - so we get 2 more entries
; RUN: %lld -cache_path_lto %t/cache -o %t/test %t/foo.o %t/bar.o -mllvm -max-devirt-iterations=1 -mllvm -enable-ml-inliner=default
; RUN: ls %t/cache | count 9

;; Going back to a pre-cached order doesn't create more entries.
; RUN: %lld -cache_path_lto %t/cache -o %t/test %t/foo.o %t/bar.o -mllvm -enable-ml-inliner=default -mllvm -max-devirt-iterations=1
; RUN: ls %t/cache | count 9

;; Different flag values matter
; RUN: rm -rf %t/cache && mkdir %t/cache
; RUN: %lld -cache_path_lto %t/cache -o %t/test %t/foo.o %t/bar.o -mllvm -enable-ml-inliner=default -mllvm -max-devirt-iterations=2
; RUN: ls %t/cache | count 3
; RUN: %lld -cache_path_lto %t/cache -o %t/test %t/foo.o %t/bar.o -mllvm -enable-ml-inliner=default -mllvm -max-devirt-iterations=1
; RUN: ls %t/cache | count 5

;; Same flag value passed to different flags matters, and switching the order
;; of the two flags matters.
; RUN: rm -rf %t/cache && mkdir %t/cache
; RUN: %lld -cache_path_lto %t/cache -o %t/test %t/foo.o %t/bar.o -mllvm -enable-ml-inliner=default
; RUN: ls %t/cache | count 3
; RUN: %lld -cache_path_lto %t/cache -o %t/test %t/foo.o %t/bar.o -mllvm -emit-dwarf-unwind=default
; RUN: ls %t/cache | count 5
; RUN: %lld -cache_path_lto %t/cache -o %t/test %t/foo.o %t/bar.o -mllvm -enable-ml-inliner=default
; RUN: ls %t/cache | count 5
; RUN: %lld -cache_path_lto %t/cache -o %t/test %t/foo.o %t/bar.o -mllvm -enable-ml-inliner=default -mllvm -emit-dwarf-unwind=default
; RUN: ls %t/cache | count 7
; RUN: %lld -cache_path_lto %t/cache -o %t/test %t/foo.o %t/bar.o -mllvm -emit-dwarf-unwind=default -mllvm -enable-ml-inliner=default
; RUN: ls %t/cache | count 9

;--- foo.ll

target triple = "x86_64-apple-macosx10.15.0"
target datalayout = "e-m:o-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128"

define void @globalfunc() #0 {
entry:
  ret void
}


;--- bar.ll

target triple = "x86_64-apple-macosx10.15.0"
target datalayout = "e-m:o-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128"

define i32 @main() {
entry:
  call void (...) @globalfunc()
  ret i32 0
}

declare void @globalfunc(...)