binaryen-sys 0.13.0

Bindings to the binaryen library
Documentation
;; =====================
;; Instrument the binary
;; =====================

;; RUN: wasm-split -all --instrument %s -o %t.instrumented.wasm

;; Create profiles

;; RUN: node %S/call_exports.mjs %t.instrumented.wasm %t.foo.prof foo
;; RUN: node %S/call_exports.mjs %t.instrumented.wasm %t.bar.prof bar
;; RUN: node %S/call_exports.mjs %t.instrumented.wasm %t.both.prof foo bar
;; RUN: node %S/call_exports.mjs %t.instrumented.wasm %t.none.prof

;; Create profile-guided splits

;; RUN: wasm-split -all %s --profile=%t.foo.prof -v -o1 %t.foo.1.wasm -o2 %t.foo.2.wasm \
;; RUN:   | filecheck %s --check-prefix FOO

;; RUN: wasm-split -all %s --profile=%t.bar.prof -v -o1 %t.bar.1.wasm -o2 %t.bar.2.wasm \
;; RUN:   | filecheck %s --check-prefix BAR

;; RUN: wasm-split -all %s --profile=%t.both.prof -v -o1 %t.both.1.wasm -o2 %t.both.2.wasm \
;; RUN:   | filecheck %s --check-prefix BOTH

;; RUN: wasm-split -all %s --profile=%t.none.prof -v -o1 %t.none.1.wasm -o2 %t.none.2.wasm \
;; RUN:   | filecheck %s --check-prefix NONE

;; =================================
;; Do it all again using --in-memory
;; =================================

;; RUN: wasm-split -all --instrument --in-memory %s -o %t.instrumented.wasm

;; Create profiles

;; RUN: node %S/call_exports.mjs %t.instrumented.wasm %t.foo.prof foo
;; RUN: node %S/call_exports.mjs %t.instrumented.wasm %t.bar.prof bar
;; RUN: node %S/call_exports.mjs %t.instrumented.wasm %t.both.prof foo bar
;; RUN: node %S/call_exports.mjs %t.instrumented.wasm %t.none.prof

;; Create profile-guided splits

;; RUN: wasm-split -all %s --profile=%t.foo.prof -v -o1 %t.foo.1.wasm -o2 %t.foo.2.wasm \
;; RUN:   | filecheck %s --check-prefix FOO

;; RUN: wasm-split -all %s --profile=%t.bar.prof -v -o1 %t.bar.1.wasm -o2 %t.bar.2.wasm \
;; RUN:   | filecheck %s --check-prefix BAR

;; RUN: wasm-split -all %s --profile=%t.both.prof -v -o1 %t.both.1.wasm -o2 %t.both.2.wasm \
;; RUN:   | filecheck %s --check-prefix BOTH

;; RUN: wasm-split -all %s --profile=%t.none.prof -v -o1 %t.none.1.wasm -o2 %t.none.2.wasm \
;; RUN:   | filecheck %s --check-prefix NONE

;; =======
;; Results
;; =======

;; FOO: Keeping functions: deep_foo_callee, foo, foo_callee, shared_callee
;; FOO: Splitting out functions: bar, bar_callee, uncalled

;; BAR: Keeping functions: bar, bar_callee, shared_callee
;; BAR: Splitting out functions: deep_foo_callee, foo, foo_callee, uncalled

;; BOTH: Keeping functions: bar, bar_callee, deep_foo_callee, foo, foo_callee, shared_callee
;; BOTH: Splitting out functions: uncalled

;; NONE: Keeping functions:
;; NONE: Splitting out functions: bar, bar_callee, deep_foo_callee, foo, foo_callee, shared_callee, uncalled

(module
  (memory $mem 1 1 shared)
  (export "memory" (memory $mem))
  (export "foo" (func $foo))
  (export "bar" (func $bar))
  (export "uncalled" (func $uncalled))

  (func $foo
    (call $foo_callee)
    (call $shared_callee)
  )

  (func $bar
    (call $shared_callee)
    (call $bar_callee)
  )

  (func $uncalled)

  (func $foo_callee
    (call $deep_foo_callee)
  )

  (func $bar_callee)

  (func $shared_callee)

  (func $deep_foo_callee)
)