blob: b658a0ffedace764946c150ee45f9e094394289e [file] [log] [blame] [edit]
;; NOTE: Assertions have been generated by update_lit_checks.py --all-items and should not be edited.
;; Enable StackIR opts with --shrink-level=1, and verify we can roundtrip an
;; annotation on stacky code.
;; RUN: wasm-opt -all --shrink-level=1 --roundtrip %s -S -o - | filecheck %s
(module
;; CHECK: (type $0 (func))
;; CHECK: (func $empty-if (type $0)
;; CHECK-NEXT: (local $1 i32)
;; CHECK-NEXT: (local $scratch i32)
;; CHECK-NEXT: (@metadata.code.branch_hint "\00")
;; CHECK-NEXT: (if
;; CHECK-NEXT: (block (result i32)
;; CHECK-NEXT: (local.set $scratch
;; CHECK-NEXT: (i32.const 0)
;; CHECK-NEXT: )
;; CHECK-NEXT: (drop
;; CHECK-NEXT: (i32.const 1)
;; CHECK-NEXT: )
;; CHECK-NEXT: (local.get $scratch)
;; CHECK-NEXT: )
;; CHECK-NEXT: (then
;; CHECK-NEXT: )
;; CHECK-NEXT: (else
;; CHECK-NEXT: )
;; CHECK-NEXT: )
;; CHECK-NEXT: )
(func $empty-if
(local $1 i32)
;; Several stack IR opts work here, leading to the if arms being empty (nops
;; removed) and the local.set/get vanishing, leaving stacky code like this:
;;
;; i32.const 0 ;; read by the if, past the other const and drop
;; i32.const 1
;; drop
;; if
;; else
;; end
;;
;; As a result we have a segment before us that was heavily modified (with the
;; local.set), and the if body is empty. This should not cause an error when
;; computing the if's binary location for the hint, and the hint should
;; remain.
(local.set $1
(i32.const 0)
)
(drop
(i32.const 1)
)
(@metadata.code.branch_hint "\00")
(if
(local.get $1)
(then
(nop)
)
(else
(nop)
)
)
)
)