Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
39 changes: 20 additions & 19 deletions test/lit/wasm-split/passive-deps.wast
Original file line number Diff line number Diff line change
@@ -1,38 +1,39 @@
;; NOTE: Assertions have been generated by update_lit_checks.py --all-items and should not be edited.
;; RUN: wasm-split %s -all -g -o1 %t.1.wasm -o2 %t.2.wasm --split-funcs=split
;; RUN: wasm-dis -all %t.1.wasm | filecheck %s --check-prefix PRIMARY
;; RUN: wasm-dis -all %t.2.wasm | filecheck %s --check-prefix SECONDARY

(module
;; PRIMARY: (type $0 (func))

;; PRIMARY: (global $g funcref (ref.null nofunc))
(global $g funcref (ref.null nofunc))

;; We should scan this passive element segment's data and correctly mark $g as
;; used in the primary module.
;; PRIMARY: (elem $passive-elem funcref (item (global.get $g)))
(elem $passive-elem funcref (item (global.get $g)))

;; PRIMARY: (export "global" (global $g))

;; PRIMARY: (func $keep (type $0)
;; PRIMARY-NEXT: (elem.drop $passive-elem)
;; PRIMARY-NEXT: )
(func $keep
(elem.drop $passive-elem)
)

;; SECONDARY: (type $0 (func))

;; SECONDARY: (import "primary" "global" (global $g funcref))

;; SECONDARY: (func $split (type $0)
;; SECONDARY-NEXT: (drop
;; SECONDARY-NEXT: (global.get $g)
;; SECONDARY-NEXT: )
;; SECONDARY-NEXT: )
(func $split
(drop (global.get $g))
)
)

;; PRIMARY: (module
;; PRIMARY-NEXT: (type $0 (func))
;; PRIMARY-NEXT: (global $g funcref (ref.null nofunc))
;; PRIMARY-NEXT: (elem $passive-elem funcref (item (global.get $g)))
;; PRIMARY-NEXT: (export "global" (global $g))
;; PRIMARY-NEXT: (func $keep (type $0)
;; PRIMARY-NEXT: (elem.drop $passive-elem)
;; PRIMARY-NEXT: )
;; PRIMARY-NEXT: )

;; SECONDARY: (module
;; SECONDARY-NEXT: (type $0 (func))
;; SECONDARY-NEXT: (import "primary" "global" (global $g funcref))
;; SECONDARY-NEXT: (func $split (type $0)
;; SECONDARY-NEXT: (drop
;; SECONDARY-NEXT: (global.get $g)
;; SECONDARY-NEXT: )
;; SECONDARY-NEXT: )
;; SECONDARY-NEXT: )
64 changes: 33 additions & 31 deletions test/lit/wasm-split/transitive-globals-multi.wast
Original file line number Diff line number Diff line change
@@ -1,52 +1,54 @@
;; NOTE: Assertions have been generated by update_lit_checks.py --all-items and should not be edited.
;; RUN: wasm-split -all -g --multi-split %s --manifest %s.manifest --out-prefix=%t -o %t.wasm
;; RUN: wasm-dis %t.wasm | filecheck %s --check-prefix PRIMARY
;; RUN: wasm-dis %t1.wasm | filecheck %s --check-prefix SECONDARY1
;; RUN: wasm-dis %t2.wasm | filecheck %s --check-prefix SECONDARY2
;; RUN: wasm-dis -all %t.wasm | filecheck %s --check-prefix PRIMARY
;; RUN: wasm-dis -all %t1.wasm | filecheck %s --check-prefix SECONDARY1
;; RUN: wasm-dis -all %t2.wasm | filecheck %s --check-prefix SECONDARY2

;; Because global $e is used in both module1 ($split1) and module2 ($split2), $e
;; will be exported / imported, but we don't need to export $f.

(module
;; PRIMARY: (type $0 (func))

;; PRIMARY: (global $f i32 (i32.const 42))
(global $f i32 (i32.const 42))
;; PRIMARY: (global $e i32 (global.get $f))
(global $e i32 (global.get $f))

;; PRIMARY: (export "global" (global $e))

;; PRIMARY: (func $keep
;; PRIMARY-NEXT: (nop)
;; PRIMARY-NEXT: )
(func $keep
(nop)
)

;; SECONDARY1: (type $0 (func))

;; SECONDARY1: (import "primary" "global" (global $e i32))

;; SECONDARY1: (func $split1
;; SECONDARY1-NEXT: (drop
;; SECONDARY1-NEXT: (global.get $e)
;; SECONDARY1-NEXT: )
;; SECONDARY1-NEXT: )
(func $split1
(drop (global.get $e))
)

;; SECONDARY2: (type $0 (func))

;; SECONDARY2: (import "primary" "global" (global $e i32))

;; SECONDARY2: (func $split2
;; SECONDARY2-NEXT: (drop
;; SECONDARY2-NEXT: (global.get $e)
;; SECONDARY2-NEXT: )
;; SECONDARY2-NEXT: )
(func $split2
(drop (global.get $e))
)
)

;; PRIMARY: (module
;; PRIMARY-NEXT: (type $0 (func))
;; PRIMARY-NEXT: (global $f i32 (i32.const 42))
;; PRIMARY-NEXT: (global $e i32 (global.get $f))
;; PRIMARY-NEXT: (export "global" (global $e))
;; PRIMARY-NEXT: (func $keep (type $0)
;; PRIMARY-NEXT: (nop)
;; PRIMARY-NEXT: )
;; PRIMARY-NEXT: )

;; SECONDARY1: (module
;; SECONDARY1-NEXT: (type $0 (func))
;; SECONDARY1-NEXT: (import "primary" "global" (global $e i32))
;; SECONDARY1-NEXT: (func $split1 (type $0)
;; SECONDARY1-NEXT: (drop
;; SECONDARY1-NEXT: (global.get $e)
;; SECONDARY1-NEXT: )
;; SECONDARY1-NEXT: )
;; SECONDARY1-NEXT: )

;; SECONDARY2: (module
;; SECONDARY2-NEXT: (type $0 (func))
;; SECONDARY2-NEXT: (import "primary" "global" (global $e i32))
;; SECONDARY2-NEXT: (func $split2 (type $0)
;; SECONDARY2-NEXT: (drop
;; SECONDARY2-NEXT: (global.get $e)
;; SECONDARY2-NEXT: )
;; SECONDARY2-NEXT: )
;; SECONDARY2-NEXT: )
56 changes: 29 additions & 27 deletions test/lit/wasm-split/transitive-globals.wast
Original file line number Diff line number Diff line change
Expand Up @@ -19,44 +19,17 @@
(global $e i32 (global.get $f))
(global $d i32 (global.get $e))

;; PRIMARY: (global $f i32 (i32.const 42))
;; PRIMARY: (global $e i32 (global.get $f))

;; PRIMARY: (export "global" (global $e))

;; SECONDARY: (import "primary" "global" (global $e i32))

;; SECONDARY: (global $c i32 (i32.const 42))
;; SECONDARY: (global $b i32 (global.get $c))
;; SECONDARY: (global $a i32 (global.get $b))

;; SECONDARY: (global $d i32 (global.get $e))

;; This dead global is referring to a global ($a) that's moved to the
;; secondary module. This should be deleted.
;; PRIMARY-NOT: (global (global $dead i32 (global.get $a))
(global $dead i32 (global.get $a))

;; PRIMARY: (func $keep
;; PRIMARY-NEXT: (drop
;; PRIMARY-NEXT: (global.get $e)
;; PRIMARY-NEXT: )
;; PRIMARY-NEXT: )
(func $keep
(drop
(global.get $e)
)
)

;; Exclusively uses $a and $d, causing them to move to the secondary module
;; SECONDARY: (func $split
;; SECONDARY-NEXT: (drop
;; SECONDARY-NEXT: (global.get $a)
;; SECONDARY-NEXT: )
;; SECONDARY-NEXT: (drop
;; SECONDARY-NEXT: (global.get $d)
;; SECONDARY-NEXT: )
;; SECONDARY-NEXT: )
(func $split
(drop
(global.get $a)
Expand All @@ -66,3 +39,32 @@
)
)
)

;; PRIMARY: (module
;; PRIMARY-NEXT: (type $0 (func))
;; PRIMARY-NEXT: (global $f i32 (i32.const 42))
;; PRIMARY-NEXT: (global $e i32 (global.get $f))
;; PRIMARY-NEXT: (export "global" (global $e))
;; PRIMARY-NEXT: (func $keep
;; PRIMARY-NEXT: (drop
;; PRIMARY-NEXT: (global.get $e)
;; PRIMARY-NEXT: )
;; PRIMARY-NEXT: )
;; PRIMARY-NEXT: )

;; SECONDARY: (module
;; SECONDARY-NEXT: (type $0 (func))
;; SECONDARY-NEXT: (import "primary" "global" (global $e i32))
;; SECONDARY-NEXT: (global $c i32 (i32.const 42))
;; SECONDARY-NEXT: (global $b i32 (global.get $c))
;; SECONDARY-NEXT: (global $a i32 (global.get $b))
;; SECONDARY-NEXT: (global $d i32 (global.get $e))
;; SECONDARY-NEXT: (func $split
;; SECONDARY-NEXT: (drop
;; SECONDARY-NEXT: (global.get $a)
;; SECONDARY-NEXT: )
;; SECONDARY-NEXT: (drop
;; SECONDARY-NEXT: (global.get $d)
;; SECONDARY-NEXT: )
;; SECONDARY-NEXT: )
;; SECONDARY-NEXT: )
Loading