blob: f8a52502d99b3d675c086aaa9213e97b5f29d227 [file] [log] [blame]
;; NOTE: Assertions have been generated by update_lit_checks.py --all-items and should not be edited.
;; RUN: foreach %s %t wasm-opt --inlining -S -o - | filecheck %s
;; RUN: foreach %s %t wasm-opt --inlining -tnh -S -o - | filecheck %s
;; Check that with or without TrapsNeverHappen, we inline calls to trapping
;; functions. That propagates the unreachability for other passes.
(module
;; CHECK: (type $0 (func))
;; CHECK: (func $call-trap
;; CHECK-NEXT: (if
;; CHECK-NEXT: (i32.const 42)
;; CHECK-NEXT: (then
;; CHECK-NEXT: (block $__inlined_func$trap
;; CHECK-NEXT: (unreachable)
;; CHECK-NEXT: )
;; CHECK-NEXT: )
;; CHECK-NEXT: (else
;; CHECK-NEXT: (block $__inlined_func$trap$1
;; CHECK-NEXT: (unreachable)
;; CHECK-NEXT: )
;; CHECK-NEXT: )
;; CHECK-NEXT: )
;; CHECK-NEXT: )
(func $call-trap
;; Call twice to avoid the single-caller rules, which always inline.
(if
(i32.const 42)
(then
(call $trap)
)
(else
(call $trap)
)
)
)
(func $trap
(unreachable)
)
;; CHECK: (func $call-trap-value
;; CHECK-NEXT: (drop
;; CHECK-NEXT: (if
;; CHECK-NEXT: (i32.const 42)
;; CHECK-NEXT: (then
;; CHECK-NEXT: (block $__inlined_func$trap-value$2
;; CHECK-NEXT: (unreachable)
;; CHECK-NEXT: )
;; CHECK-NEXT: )
;; CHECK-NEXT: (else
;; CHECK-NEXT: (block $__inlined_func$trap-value$3
;; CHECK-NEXT: (unreachable)
;; CHECK-NEXT: )
;; CHECK-NEXT: )
;; CHECK-NEXT: )
;; CHECK-NEXT: )
;; CHECK-NEXT: )
(func $call-trap-value
(drop
(if (result i32)
(i32.const 42)
(then
(call $trap-value)
)
(else
(call $trap-value)
)
)
)
)
(func $trap-value (result i32)
(unreachable)
)
)