summaryrefslogtreecommitdiff
path: root/test/lit/passes/extract-function.wast
diff options
context:
space:
mode:
authorThomas Lively <tlively@google.com>2021-06-17 07:28:44 -0700
committerThomas Lively <7121787+tlively@users.noreply.github.com>2021-06-17 14:35:56 -0400
commitea0b9ee1e1083962da9bfa52fa09870fcc4f72bb (patch)
tree57503487eaf47f18d93e5601f402084c94b7ad46 /test/lit/passes/extract-function.wast
parent8de4349ebdb6ce398ef4939f9f375a7413d99b09 (diff)
downloadbinaryen-ea0b9ee1e1083962da9bfa52fa09870fcc4f72bb.tar.gz
binaryen-ea0b9ee1e1083962da9bfa52fa09870fcc4f72bb.tar.bz2
binaryen-ea0b9ee1e1083962da9bfa52fa09870fcc4f72bb.zip
Add a extract-function-index pass
This is a useful alternative to extract-function when you don't know the function's name. Also moves the extract-function tests to be lit tests and re-uses them as extract-function-index tests.
Diffstat (limited to 'test/lit/passes/extract-function.wast')
-rw-r--r--test/lit/passes/extract-function.wast72
1 files changed, 72 insertions, 0 deletions
diff --git a/test/lit/passes/extract-function.wast b/test/lit/passes/extract-function.wast
new file mode 100644
index 000000000..1a8970598
--- /dev/null
+++ b/test/lit/passes/extract-function.wast
@@ -0,0 +1,72 @@
+;; RUN: foreach %s %t wasm-opt --extract-function=foo -S -o - | filecheck %s
+;; RUN: foreach %s %t wasm-opt --extract-function --pass-arg=extract-function@foo -S -o - | filecheck %s
+;; RUN: foreach %s %t wasm-opt --extract-function-index=0 -S -o - | filecheck %s
+;; RUN: foreach %s %t wasm-opt --extract-function-index --pass-arg=extract-function-index@0 -S -o - | filecheck %s
+
+;; CHECK: (module
+;; CHECK-NEXT: (type $none_=>_none (func))
+;; CHECK-NEXT: (import "env" "bar" (func $bar))
+;; CHECK-NEXT: (export "foo" (func $foo))
+;; CHECK-NEXT: (func $foo
+;; CHECK-NEXT: (call $bar)
+;; CHECK-NEXT: )
+;; CHECK-NEXT: )
+(module
+ (func $foo
+ (call $bar)
+ )
+ (func $bar
+ (call $foo)
+ )
+ (func $other
+ (drop (i32.const 1))
+ )
+)
+
+;; CHECK: (module
+;; CHECK-NEXT: (type $none_=>_none (func))
+;; CHECK-NEXT: (import "env" "other" (func $other))
+;; CHECK-NEXT: (export "foo" (func $foo))
+;; CHECK-NEXT: (func $foo
+;; CHECK-NEXT: (nop)
+;; CHECK-NEXT: )
+;; CHECK-NEXT: )
+(module
+ ;; Use another function in the table, but the table is not used in the
+ ;; extracted function
+ (table $t 10 funcref)
+ (elem $0 (table $t) (i32.const 0) func $other)
+ (func $foo
+ (nop)
+ )
+ (func $other
+ (drop (i32.const 1))
+ )
+)
+
+;; CHECK: (module
+;; CHECK-NEXT: (type $none (func))
+;; CHECK-NEXT: (import "env" "other" (func $other))
+;; CHECK-NEXT: (table $t 10 funcref)
+;; CHECK-NEXT: (elem $0 (i32.const 0) $other)
+;; CHECK-NEXT: (export "foo" (func $foo))
+;; CHECK-NEXT: (func $foo
+;; CHECK-NEXT: (call_indirect (type $none)
+;; CHECK-NEXT: (i32.const 10)
+;; CHECK-NEXT: )
+;; CHECK-NEXT: )
+;; CHECK-NEXT: )
+(module
+ ;; Use another function in the table, and the table *is* used. As a result,
+ ;; the table and its elements will remain. The called function, $other, will
+ ;; remain as an import that is placed in the table.
+ (type $none (func))
+ (table $t 10 funcref)
+ (elem $0 (table $t) (i32.const 0) func $other)
+ (func $foo
+ (call_indirect (type $none) (i32.const 10))
+ )
+ (func $other
+ (drop (i32.const 1))
+ )
+)