blob: 3d0f147ad6923e468c4ac522e851360c5e077ec6 [file] [edit]
;; NOTE: Assertions have been generated by update_lit_checks.py and should not be edited.
;; RUN: wasm-opt %s --vacuum -all -S -o - | filecheck %s
(module
;; CHECK: (func $calls-dropped (type $0) (param $x i32) (result i32)
;; CHECK-NEXT: (local.set $x
;; CHECK-NEXT: (i32.const 1)
;; CHECK-NEXT: )
;; CHECK-NEXT: (drop
;; CHECK-NEXT: (call $calls-dropped
;; CHECK-NEXT: (i32.const 2)
;; CHECK-NEXT: )
;; CHECK-NEXT: )
;; CHECK-NEXT: (i32.const 3)
;; CHECK-NEXT: )
(func $calls-dropped (param $x i32) (result i32)
;; This call is dropped, and marked with the hint, so we can remove it.
(drop
(@binaryen.removable.if.unused)
(call $calls-dropped
(i32.const 0)
)
)
;; As above, but a parameter has effects. We must keep that around, without
;; the call.
(drop
(@binaryen.removable.if.unused)
(call $calls-dropped
(local.tee $x
(i32.const 1)
)
)
)
;; Now we lack the hint, so we keep the call.
(drop
(call $calls-dropped
(i32.const 2)
)
)
(i32.const 3)
)
;; CHECK: (func $calls-used (type $0) (param $x i32) (result i32)
;; CHECK-NEXT: (local.set $x
;; CHECK-NEXT: (@binaryen.removable.if.unused)
;; CHECK-NEXT: (call $calls-used
;; CHECK-NEXT: (i32.const 0)
;; CHECK-NEXT: )
;; CHECK-NEXT: )
;; CHECK-NEXT: (local.set $x
;; CHECK-NEXT: (@binaryen.removable.if.unused)
;; CHECK-NEXT: (call $calls-used
;; CHECK-NEXT: (local.tee $x
;; CHECK-NEXT: (i32.const 1)
;; CHECK-NEXT: )
;; CHECK-NEXT: )
;; CHECK-NEXT: )
;; CHECK-NEXT: (local.set $x
;; CHECK-NEXT: (call $calls-used
;; CHECK-NEXT: (i32.const 2)
;; CHECK-NEXT: )
;; CHECK-NEXT: )
;; CHECK-NEXT: (i32.const 3)
;; CHECK-NEXT: )
(func $calls-used (param $x i32) (result i32)
;; As above, but the calls are not dropped, so we keep them.
(local.set $x
(@binaryen.removable.if.unused)
(call $calls-used
(i32.const 0)
)
)
(local.set $x
(@binaryen.removable.if.unused)
(call $calls-used
(local.tee $x
(i32.const 1)
)
)
)
(local.set $x
(call $calls-used
(i32.const 2)
)
)
(i32.const 3)
)
)