diff options
Diffstat (limited to 'lld/test/wasm')
-rw-r--r-- | lld/test/wasm/lto/Inputs/cache.ll | 10 | ||||
-rw-r--r-- | lld/test/wasm/lto/Inputs/save-temps.ll | 6 | ||||
-rw-r--r-- | lld/test/wasm/lto/Inputs/thinlto.ll | 7 | ||||
-rw-r--r-- | lld/test/wasm/lto/cache.ll | 38 | ||||
-rw-r--r-- | lld/test/wasm/lto/incompatible.ll | 8 | ||||
-rw-r--r-- | lld/test/wasm/lto/internalize-basic.ll | 20 | ||||
-rw-r--r-- | lld/test/wasm/lto/lto-start.ll | 18 | ||||
-rw-r--r-- | lld/test/wasm/lto/opt-level.ll | 30 | ||||
-rw-r--r-- | lld/test/wasm/lto/parallel.ll | 24 | ||||
-rw-r--r-- | lld/test/wasm/lto/save-temps.ll | 19 | ||||
-rw-r--r-- | lld/test/wasm/lto/thinlto.ll | 34 | ||||
-rw-r--r-- | lld/test/wasm/lto/verify-invalid.ll | 16 | ||||
-rw-r--r-- | lld/test/wasm/lto/weak.ll | 16 |
13 files changed, 246 insertions, 0 deletions
diff --git a/lld/test/wasm/lto/Inputs/cache.ll b/lld/test/wasm/lto/Inputs/cache.ll new file mode 100644 index 00000000000..a66f36aef9c --- /dev/null +++ b/lld/test/wasm/lto/Inputs/cache.ll @@ -0,0 +1,10 @@ +target datalayout = "e-m:e-p:32:32-i64:64-n32:64-S128" +target triple = "wasm32-unknown-unknown" + +define i32 @_start() { +entry: + call void (...) @globalfunc() + ret i32 0 +} + +declare void @globalfunc(...) diff --git a/lld/test/wasm/lto/Inputs/save-temps.ll b/lld/test/wasm/lto/Inputs/save-temps.ll new file mode 100644 index 00000000000..6f4de417c38 --- /dev/null +++ b/lld/test/wasm/lto/Inputs/save-temps.ll @@ -0,0 +1,6 @@ +target datalayout = "e-m:e-p:32:32-i64:64-n32:64-S128" +target triple = "wasm32-unknown-unknown" + +define void @bar() { + ret void +} diff --git a/lld/test/wasm/lto/Inputs/thinlto.ll b/lld/test/wasm/lto/Inputs/thinlto.ll new file mode 100644 index 00000000000..39e573b1c21 --- /dev/null +++ b/lld/test/wasm/lto/Inputs/thinlto.ll @@ -0,0 +1,7 @@ +target datalayout = "e-m:e-p:32:32-i64:64-n32:64-S128" +target triple = "wasm32-unknown-unknown" + +define void @g() { +entry: + ret void +} diff --git a/lld/test/wasm/lto/cache.ll b/lld/test/wasm/lto/cache.ll new file mode 100644 index 00000000000..b0a7820c1e1 --- /dev/null +++ b/lld/test/wasm/lto/cache.ll @@ -0,0 +1,38 @@ +; RUN: opt -module-hash -module-summary %s -o %t.o +; RUN: opt -module-hash -module-summary %p/Inputs/cache.ll -o %t2.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-foo %t.cache/foo +; RUN: wasm-ld --thinlto-cache-dir=%t.cache --thinlto-cache-policy prune_after=1h:prune_interval=0s -o %t.wasm %t2.o %t.o + +; Two cached objects, plus a timestamp file and "foo", minus the file we removed. +; RUN: ls %t.cache | count 4 + +; Create a file of size 64KB. +; RUN: "%python" -c "print(' ' * 65536)" > %t.cache/llvmcache-foo + +; This should leave the file in place. +; RUN: wasm-ld --thinlto-cache-dir=%t.cache --thinlto-cache-policy cache_size_bytes=128k:prune_interval=0s -o %t.wasm %t2.o %t.o +; RUN: ls %t.cache | count 5 + +; This should remove it. +; RUN: wasm-ld --thinlto-cache-dir=%t.cache --thinlto-cache-policy cache_size_bytes=32k:prune_interval=0s -o %t.wasm %t2.o %t.o +; RUN: ls %t.cache | count 4 + +; Setting max number of files to 0 should disable the limit, not delete everything. +; RUN: wasm-ld --thinlto-cache-dir=%t.cache --thinlto-cache-policy prune_after=0s:cache_size=0%:cache_size_files=0:prune_interval=0s -o %t.wasm %t2.o %t.o +; RUN: ls %t.cache | count 4 + +; Delete everything except for the timestamp, "foo" and one cache file. +; RUN: wasm-ld --thinlto-cache-dir=%t.cache --thinlto-cache-policy prune_after=0s:cache_size=0%:cache_size_files=1:prune_interval=0s -o %t.wasm %t2.o %t.o +; RUN: ls %t.cache | count 3 + +target datalayout = "e-m:e-p:32:32-i64:64-n32:64-S128" +target triple = "wasm32-unknown-unknown-wasm" + +define void @globalfunc() #0 { +entry: + ret void +} diff --git a/lld/test/wasm/lto/incompatible.ll b/lld/test/wasm/lto/incompatible.ll new file mode 100644 index 00000000000..ee98cb4b4e6 --- /dev/null +++ b/lld/test/wasm/lto/incompatible.ll @@ -0,0 +1,8 @@ +; REQUIRES: x86 +; RUN: llvm-as %s -o %t.bc +; RUN: not wasm-ld %t.bc -o out.wasm 2>&1 | FileCheck %s + +target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128" +target triple = "x86_64-unknown-linux-gnu" + +; CHECK: {{.*}}incompatible.ll.tmp.bc: machine type must be wasm32 diff --git a/lld/test/wasm/lto/internalize-basic.ll b/lld/test/wasm/lto/internalize-basic.ll new file mode 100644 index 00000000000..313a05ecbae --- /dev/null +++ b/lld/test/wasm/lto/internalize-basic.ll @@ -0,0 +1,20 @@ +; RUN: llvm-as %s -o %t.o +; RUN: wasm-ld %t.o -o %t2 -save-temps +; RUN: llvm-dis < %t2.0.2.internalize.bc | FileCheck %s + +target datalayout = "e-m:e-p:32:32-i64:64-n32:64-S128" +target triple = "wasm32-unknown-unknown-wasm" + +define void @_start() { + ret void +} + +define hidden void @foo() { + ret void +} + +; Check that _start is not internalized. +; CHECK: define void @_start() + +; Check that foo function is correctly internalized. +; CHECK: define internal void @foo() diff --git a/lld/test/wasm/lto/lto-start.ll b/lld/test/wasm/lto/lto-start.ll new file mode 100644 index 00000000000..6e8f99c9530 --- /dev/null +++ b/lld/test/wasm/lto/lto-start.ll @@ -0,0 +1,18 @@ +; RUN: llvm-as %s -o %t.o +; RUN: wasm-ld %t.o -o %t.wasm +; RUN: obj2yaml %t.wasm | FileCheck %s + +; CHECK: - Type: CUSTOM +; CHECK-NEXT: Name: name +; CHECK-NEXT: FunctionNames: +; CHECK-NEXT: - Index: 0 +; CHECK-NEXT: Name: __wasm_call_ctors +; CHECK-NEXT: - Index: 1 +; CHECK-NEXT: Name: _start + +target datalayout = "e-m:e-p:32:32-i64:64-n32:64-S128" +target triple = "wasm32-unknown-unknown-wasm" + +define void @_start() { + ret void +} diff --git a/lld/test/wasm/lto/opt-level.ll b/lld/test/wasm/lto/opt-level.ll new file mode 100644 index 00000000000..b7e6a4cdc70 --- /dev/null +++ b/lld/test/wasm/lto/opt-level.ll @@ -0,0 +1,30 @@ +; RUN: llvm-as -o %t.o %s +; RUN: wasm-ld -o %t0 -e main --lto-O0 %t.o +; RUN: obj2yaml %t0 | FileCheck --check-prefix=CHECK-O0 %s +; RUN: wasm-ld -o %t2 -e main --lto-O2 %t.o +; RUN: obj2yaml %t2 | FileCheck --check-prefix=CHECK-O2 %s +; RUN: wasm-ld -o %t2a -e main %t.o +; RUN: obj2yaml %t2a | FileCheck --check-prefix=CHECK-O2 %s + +; Reject invalid optimization levels. +; RUN: not ld.lld -o %t3 -e main --lto-O6 %t.o 2>&1 | \ +; RUN: FileCheck --check-prefix=INVALID %s +; INVALID: invalid optimization level for LTO: 6 + +; RUN: not ld.lld -o %t3 -m elf_x86_64 -e main --lto-O-1 %t.o 2>&1 | \ +; RUN: FileCheck --check-prefix=INVALIDNEGATIVE %s +; INVALIDNEGATIVE: invalid optimization level for LTO: 4294967295 + +target datalayout = "e-m:e-p:32:32-i64:64-n32:64-S128" +target triple = "wasm32-unknown-unknown-wasm" + +; CHECK-O0: Name: foo +; CHECK-O2-NOT: Name: foo +define internal void @foo() { + ret void +} + +define void @main() { + call void @foo() + ret void +} diff --git a/lld/test/wasm/lto/parallel.ll b/lld/test/wasm/lto/parallel.ll new file mode 100644 index 00000000000..a93c3558d96 --- /dev/null +++ b/lld/test/wasm/lto/parallel.ll @@ -0,0 +1,24 @@ +; RUN: llvm-as -o %t.bc %s +; RUN: rm -f %t.lto.o %t1.lto.o +; RUN: wasm-ld --lto-partitions=2 -save-temps -o %t %t.bc -r +; RUN: llvm-nm %t.lto.o | FileCheck --check-prefix=CHECK0 %s +; RUN: llvm-nm %t1.lto.o | FileCheck --check-prefix=CHECK1 %s + +target datalayout = "e-m:e-p:32:32-i64:64-n32:64-S128" +target triple = "wasm32-unknown-unknown-wasm" + +; CHECK0-NOT: bar +; CHECK0: T foo +; CHECK0-NOT: bar +define void @foo() { + call void @bar() + ret void +} + +; CHECK1-NOT: foo +; CHECK1: T bar +; CHECK1-NOT: foo +define void @bar() { + call void @foo() + ret void +} diff --git a/lld/test/wasm/lto/save-temps.ll b/lld/test/wasm/lto/save-temps.ll new file mode 100644 index 00000000000..2734d86815c --- /dev/null +++ b/lld/test/wasm/lto/save-temps.ll @@ -0,0 +1,19 @@ +; RUN: cd %T +; RUN: rm -f a.out a.out.lto.bc a.out.lto.o +; RUN: llvm-as %s -o %t.o +; RUN: llvm-as %p/Inputs/save-temps.ll -o %t2.o +; RUN: wasm-ld -r -o a.out %t.o %t2.o -save-temps +; RUN: llvm-nm a.out | FileCheck %s +; RUN: llvm-nm a.out.0.0.preopt.bc | FileCheck %s +; RUN: llvm-nm a.out.lto.o | FileCheck %s +; RUN: llvm-dis a.out.0.0.preopt.bc + +target datalayout = "e-m:e-p:32:32-i64:64-n32:64-S128" +target triple = "wasm32-unknown-unknown" + +define void @foo() { + ret void +} + +; CHECK: T bar +; CHECK: T foo diff --git a/lld/test/wasm/lto/thinlto.ll b/lld/test/wasm/lto/thinlto.ll new file mode 100644 index 00000000000..062da1a33b8 --- /dev/null +++ b/lld/test/wasm/lto/thinlto.ll @@ -0,0 +1,34 @@ +; Basic ThinLTO tests. +; RUN: opt -module-summary %s -o %t1.o +; RUN: opt -module-summary %p/Inputs/thinlto.ll -o %t2.o + +; First force single-threaded mode +; RUN: rm -f %t31.lto.o %t32.lto.o +; RUN: wasm-ld -r -save-temps --thinlto-jobs=1 %t1.o %t2.o -o %t3 +; RUN: llvm-nm %t31.lto.o | FileCheck %s --check-prefix=NM1 +; RUN: llvm-nm %t32.lto.o | FileCheck %s --check-prefix=NM2 + +; Next force multi-threaded mode +; RUN: rm -f %t31.lto.o %t32.lto.o +; RUN: wasm-ld -r -save-temps --thinlto-jobs=2 %t1.o %t2.o -o %t3 +; RUN: llvm-nm %t31.lto.o | FileCheck %s --check-prefix=NM1 +; RUN: llvm-nm %t32.lto.o | FileCheck %s --check-prefix=NM2 + +; Check without --thinlto-jobs (which currently default to hardware_concurrency) +; RUN: wasm-ld -r %t1.o %t2.o -o %t3 +; RUN: llvm-nm %t31.lto.o | FileCheck %s --check-prefix=NM1 +; RUN: llvm-nm %t32.lto.o | FileCheck %s --check-prefix=NM2 + +; NM1: T f +; NM2: T g + +target datalayout = "e-m:e-p:32:32-i64:64-n32:64-S128" +target triple = "wasm32-unknown-unknown" + +declare void @g(...) + +define void @f() { +entry: + call void (...) @g() + ret void +} diff --git a/lld/test/wasm/lto/verify-invalid.ll b/lld/test/wasm/lto/verify-invalid.ll new file mode 100644 index 00000000000..c4a5bcdc67d --- /dev/null +++ b/lld/test/wasm/lto/verify-invalid.ll @@ -0,0 +1,16 @@ +; RUN: llvm-as %s -o %t.o +; RUN: wasm-ld %t.o -o %t2 -mllvm -debug-pass=Arguments \ +; RUN: 2>&1 | FileCheck -check-prefix=DEFAULT %s +; RUN: wasm-ld %t.o -o %t2 -mllvm -debug-pass=Arguments \ +; RUN: -disable-verify 2>&1 | FileCheck -check-prefix=DISABLE %s + +target datalayout = "e-m:e-p:32:32-i64:64-n32:64-S128" +target triple = "wasm32-unknown-unknown" + +define void @_start() { + ret void +} + +; -disable-verify should disable the verification of bitcode. +; DEFAULT: Pass Arguments: {{.*}} -verify {{.*}} -verify +; DISABLE-NOT: Pass Arguments: {{.*}} -verify {{.*}} -verify diff --git a/lld/test/wasm/lto/weak.ll b/lld/test/wasm/lto/weak.ll new file mode 100644 index 00000000000..03a017c1a18 --- /dev/null +++ b/lld/test/wasm/lto/weak.ll @@ -0,0 +1,16 @@ +; RUN: llvm-as %s -o %t.o +; RUN: wasm-ld %t.o %t.o -o %t.wasm -r +; RUN: llvm-readobj -t %t.wasm | FileCheck %s + +target datalayout = "e-m:e-p:32:32-i64:64-n32:64-S128" +target triple = "wasm32-unknown-unknown-wasm" + +define weak void @f() { + ret void +} + +; CHECK: Symbol { +; CHECK-NEXT: Name: f +; CHECK-NEXT: Type: FUNCTION (0x0) +; CHECK-NEXT: Flags: 0x1 +; CHECK-NEXT: } |