;; NOTE: Assertions have been generated by update_lit_checks.py and should not be edited.

;; RUN: wasm-opt %s -all --remove-relaxed-simd -S -o - | filecheck %s

(module
  ;; CHECK:      (import "" "" (func $effect (type $1) (result v128)))
  (import "" "" (func $effect (result v128)))
  ;; CHECK:      (func $unary (type $0) (param $0 v128)
  ;; CHECK-NEXT:  (drop
  ;; CHECK-NEXT:   (block
  ;; CHECK-NEXT:    (unreachable)
  ;; CHECK-NEXT:   )
  ;; CHECK-NEXT:  )
  ;; CHECK-NEXT:  (drop
  ;; CHECK-NEXT:   (block
  ;; CHECK-NEXT:    (unreachable)
  ;; CHECK-NEXT:   )
  ;; CHECK-NEXT:  )
  ;; CHECK-NEXT:  (drop
  ;; CHECK-NEXT:   (block
  ;; CHECK-NEXT:    (unreachable)
  ;; CHECK-NEXT:   )
  ;; CHECK-NEXT:  )
  ;; CHECK-NEXT:  (drop
  ;; CHECK-NEXT:   (block
  ;; CHECK-NEXT:    (unreachable)
  ;; CHECK-NEXT:   )
  ;; CHECK-NEXT:  )
  ;; CHECK-NEXT:  (drop
  ;; CHECK-NEXT:   (v128.not
  ;; CHECK-NEXT:    (local.get $0)
  ;; CHECK-NEXT:   )
  ;; CHECK-NEXT:  )
  ;; CHECK-NEXT: )
  (func $unary (param v128)
    (drop (i32x4.relaxed_trunc_f32x4_s (local.get 0)))
    (drop (i32x4.relaxed_trunc_f32x4_u (local.get 0)))
    (drop (i32x4.relaxed_trunc_f64x2_s_zero (local.get 0)))
    (drop (i32x4.relaxed_trunc_f64x2_u_zero (local.get 0)))
    ;; Normal SIMD instruction
    (drop (v128.not (local.get 0)))
  )

  ;; CHECK:      (func $binary (type $2) (param $0 v128) (param $1 v128)
  ;; CHECK-NEXT:  (drop
  ;; CHECK-NEXT:   (block
  ;; CHECK-NEXT:    (unreachable)
  ;; CHECK-NEXT:   )
  ;; CHECK-NEXT:  )
  ;; CHECK-NEXT:  (drop
  ;; CHECK-NEXT:   (block
  ;; CHECK-NEXT:    (unreachable)
  ;; CHECK-NEXT:   )
  ;; CHECK-NEXT:  )
  ;; CHECK-NEXT:  (drop
  ;; CHECK-NEXT:   (block
  ;; CHECK-NEXT:    (unreachable)
  ;; CHECK-NEXT:   )
  ;; CHECK-NEXT:  )
  ;; CHECK-NEXT:  (drop
  ;; CHECK-NEXT:   (block
  ;; CHECK-NEXT:    (unreachable)
  ;; CHECK-NEXT:   )
  ;; CHECK-NEXT:  )
  ;; CHECK-NEXT:  (drop
  ;; CHECK-NEXT:   (block
  ;; CHECK-NEXT:    (unreachable)
  ;; CHECK-NEXT:   )
  ;; CHECK-NEXT:  )
  ;; CHECK-NEXT:  (drop
  ;; CHECK-NEXT:   (block
  ;; CHECK-NEXT:    (unreachable)
  ;; CHECK-NEXT:   )
  ;; CHECK-NEXT:  )
  ;; CHECK-NEXT:  (drop
  ;; CHECK-NEXT:   (block
  ;; CHECK-NEXT:    (unreachable)
  ;; CHECK-NEXT:   )
  ;; CHECK-NEXT:  )
  ;; CHECK-NEXT:  (drop
  ;; CHECK-NEXT:   (v128.xor
  ;; CHECK-NEXT:    (local.get $0)
  ;; CHECK-NEXT:    (local.get $1)
  ;; CHECK-NEXT:   )
  ;; CHECK-NEXT:  )
  ;; CHECK-NEXT: )
  (func $binary (param v128 v128)
    (drop (i8x16.relaxed_swizzle (local.get 0) (local.get 1)))
    (drop (f32x4.relaxed_min (local.get 0) (local.get 1)))
    (drop (f32x4.relaxed_max (local.get 0) (local.get 1)))
    (drop (f64x2.relaxed_min (local.get 0) (local.get 1)))
    (drop (f64x2.relaxed_max (local.get 0) (local.get 1)))
    (drop (i16x8.relaxed_q15mulr_s (local.get 0) (local.get 1)))
    (drop (i16x8.dot_i8x16_i7x16_s (local.get 0) (local.get 1)))
    ;; Normal SIMD instruction
    (drop (v128.xor (local.get 0) (local.get 1)))
  )

  ;; CHECK:      (func $ternary (type $3) (param $0 v128) (param $1 v128) (param $2 v128)
  ;; CHECK-NEXT:  (drop
  ;; CHECK-NEXT:   (block
  ;; CHECK-NEXT:    (unreachable)
  ;; CHECK-NEXT:   )
  ;; CHECK-NEXT:  )
  ;; CHECK-NEXT:  (drop
  ;; CHECK-NEXT:   (block
  ;; CHECK-NEXT:    (unreachable)
  ;; CHECK-NEXT:   )
  ;; CHECK-NEXT:  )
  ;; CHECK-NEXT:  (drop
  ;; CHECK-NEXT:   (block
  ;; CHECK-NEXT:    (unreachable)
  ;; CHECK-NEXT:   )
  ;; CHECK-NEXT:  )
  ;; CHECK-NEXT:  (drop
  ;; CHECK-NEXT:   (block
  ;; CHECK-NEXT:    (unreachable)
  ;; CHECK-NEXT:   )
  ;; CHECK-NEXT:  )
  ;; CHECK-NEXT:  (drop
  ;; CHECK-NEXT:   (block
  ;; CHECK-NEXT:    (unreachable)
  ;; CHECK-NEXT:   )
  ;; CHECK-NEXT:  )
  ;; CHECK-NEXT:  (drop
  ;; CHECK-NEXT:   (block
  ;; CHECK-NEXT:    (unreachable)
  ;; CHECK-NEXT:   )
  ;; CHECK-NEXT:  )
  ;; CHECK-NEXT:  (drop
  ;; CHECK-NEXT:   (block
  ;; CHECK-NEXT:    (unreachable)
  ;; CHECK-NEXT:   )
  ;; CHECK-NEXT:  )
  ;; CHECK-NEXT:  (drop
  ;; CHECK-NEXT:   (v128.bitselect
  ;; CHECK-NEXT:    (local.get $0)
  ;; CHECK-NEXT:    (local.get $1)
  ;; CHECK-NEXT:    (local.get $2)
  ;; CHECK-NEXT:   )
  ;; CHECK-NEXT:  )
  ;; CHECK-NEXT: )
  (func $ternary (param v128 v128 v128)
    (drop (i32x4.dot_i8x16_i7x16_add_s (local.get 0) (local.get 1) (local.get 2)))
    (drop (f16x8.relaxed_madd (local.get 0) (local.get 1) (local.get 2)))
    (drop (f16x8.relaxed_nmadd (local.get 0) (local.get 1) (local.get 2)))
    (drop (f32x4.relaxed_madd (local.get 0) (local.get 1) (local.get 2)))
    (drop (f32x4.relaxed_nmadd (local.get 0) (local.get 1) (local.get 2)))
    (drop (f64x2.relaxed_madd (local.get 0) (local.get 1) (local.get 2)))
    (drop (f64x2.relaxed_nmadd (local.get 0) (local.get 1) (local.get 2)))
    ;; Normal SIMD instruction
    (drop (v128.bitselect (local.get 0) (local.get 1) (local.get 2)))
  )

  ;; CHECK:      (func $refinalize (type $0) (param $0 v128)
  ;; CHECK-NEXT:  (drop
  ;; CHECK-NEXT:   (block $l
  ;; CHECK-NEXT:    (block
  ;; CHECK-NEXT:     (unreachable)
  ;; CHECK-NEXT:    )
  ;; CHECK-NEXT:   )
  ;; CHECK-NEXT:  )
  ;; CHECK-NEXT: )
  (func $refinalize (param v128)
    (drop
      ;; This block should become unreachable.
      (block $l (result v128)
        (i32x4.relaxed_trunc_f32x4_s (local.get 0))
      )
    )
  )

  ;; CHECK:      (func $effects (type $0) (param $0 v128)
  ;; CHECK-NEXT:  (local $1 v128)
  ;; CHECK-NEXT:  (local $2 v128)
  ;; CHECK-NEXT:  (drop
  ;; CHECK-NEXT:   (block
  ;; CHECK-NEXT:    (local.set $1
  ;; CHECK-NEXT:     (call $effect)
  ;; CHECK-NEXT:    )
  ;; CHECK-NEXT:    (local.set $2
  ;; CHECK-NEXT:     (block (result v128)
  ;; CHECK-NEXT:      (drop
  ;; CHECK-NEXT:       (call $effect)
  ;; CHECK-NEXT:      )
  ;; CHECK-NEXT:      (local.get $0)
  ;; CHECK-NEXT:     )
  ;; CHECK-NEXT:    )
  ;; CHECK-NEXT:    (unreachable)
  ;; CHECK-NEXT:   )
  ;; CHECK-NEXT:  )
  ;; CHECK-NEXT: )
  (func $effects (param v128)
    (drop
      (f16x8.relaxed_madd
        (call $effect)
        (local.get 0)
        (block (result v128)
          (drop
            (call $effect)
          )
          (local.get 0)
        )
      )
    )
  )
)
