
; function: figure-1a

; start LHS (in figure-1a)
%0:i64 = var
%1:i64 = var
%2 = eq %0, %1
infer %2


; start LHS (in figure-1a)
%0:i64 = var
%1:i64 = var
%2 = ne %0, %1
infer %2


; start LHS (in figure-1a)
%0:i64 = var
%1:i64 = var
%2 = eq %0, %1
%3:i32 = zext %2
%4:i64 = var
%5 = ne %0, %4
%6:i32 = zext %5
%7 = and %3, %6
infer %7


; function: figure-1b

; start LHS (in figure-1b)
%0:i64 = var
%1:i64 = var
%2 = slt %0, %1
infer %2


; start LHS (in figure-1b)
%0:i64 = var
%1:i64 = var
%2 = eq %0, %1
%3:i64 = var
%4 = slt %1, %3
pc %4 1:i1
infer %2


; start LHS (in figure-1b)
%0:i64 = var
%1:i64 = var
%2 = ne %0, %1
%3:i64 = var
%4 = slt %3, %1
pc %4 1:i1
infer %2


; start LHS (in figure-1b)
%0:i64 = var
%1:i64 = var
%2 = eq %0, %1
%3:i32 = zext %2
%4:i64 = var
%5 = ne %0, %4
%6:i32 = zext %5
%7 = and %3, %6
%8 = slt %1, %4
pc %8 1:i1
infer %7


; function: figure-3-if

; start LHS (in figure-3-if)
%0:i32 = var
%1 = and %0, 1:i32
infer %1


; start LHS (in figure-3-if)
%0:i32 = var
%1 = add %0, 1:i32
%2 = and %0, 1:i32
%3 = ne %2, 0:i32
pc %3 1:i1
infer %1


; start LHS (in figure-3-if)
%0:i32 = var
%1 = add %0, 2:i32
%2 = and %0, 1:i32
%3 = eq %2, 0:i32
pc %3 1:i1
infer %1


; start LHS (in figure-3-if)
%0 = block 2
%1:i32 = var
%2 = add %1, 1:i32
%3 = add %1, 2:i32
%4 = phi %0, %2, %3
%5 = and %4, 1:i32
%6 = and %1, 1:i32
%7 = ne %6, 0:i32
blockpc %0 0 %7 1:i1
%8 = eq %6, 0:i32
blockpc %0 1 %8 1:i1
infer %5


; function: flips

; start LHS (in flips)
%0 = sle 0:i32, 0:i32
infer %0


; start LHS (in flips)
%0 = sle 0:i32, 0:i32
%1:i32 = zext %0
%2 = ule 0:i32, %1
infer %2


; start LHS (in flips)
%0 = sle 0:i32, 0:i32
%1:i32 = zext %0
%2 = ule 0:i32, %1
%3:i32 = zext %2
%4 = slt 0:i32, %3
infer %4


; start LHS (in flips)
%0 = sle 0:i32, 0:i32
%1:i32 = zext %0
%2 = ule 0:i32, %1
%3:i32 = zext %2
%4 = slt 0:i32, %3
%5:i32 = zext %4
%6 = ult 0:i32, %5
infer %6


; function: various-conditions-1

; start LHS (in various-conditions-1)
%0:i32 = var
%1 = add %0, 1:i32
%2 = ne %0, 0:i32
pc %2 1:i1
infer %1


; function: various-conditions-2

; start LHS (in various-conditions-2)
%0:i32 = var
%1 = slt %0, 0:i32
infer %1


; start LHS (in various-conditions-2)
%0:i32 = var
%1 = sub %0, 2:i32
%2 = slt %0, 0:i32
pc %2 1:i1
infer %1


; function: various-conditions-3

; start LHS (in various-conditions-3)
%0:i32 = var
%1 = sub %0, 4:i32
%2:i32 = var
%3 = ne %2, 0:i32
pc %3 1:i1
infer %1


; function: various-conditions-4

; function: unaries

; start LHS (in unaries)
%0:i32 = var
%1 = eq %0, 0:i32
infer %1


; start LHS (in unaries)
%0:i32 = var
%1 = cttz %0
%2:i32 = var
%3 = eq %2, 0:i32
pc %3 1:i1
infer %1


; start LHS (in unaries)
%0:i32 = var
%1 = ctlz %0
%2 = eq %0, 0:i32
pc %2 1:i1
infer %1


; start LHS (in unaries)
%0:i32 = var
%1 = ctpop %0
%2:i32 = var
%3 = eq %2, 0:i32
pc %3 1:i1
infer %1


; start LHS (in unaries)
%0:i32 = var
%1 = ctlz %0
%2:i32 = var
%3 = ctpop %2
%4 = sub %1, %3
%5 = eq %0, 0:i32
pc %5 1:i1
infer %4


; start LHS (in unaries)
%0:i32 = var
%1 = cttz %0
%2:i32 = var
%3 = ctlz %2
%4 = ctpop %0
%5 = sub %3, %4
%6 = add %1, %5
%7 = eq %2, 0:i32
pc %7 1:i1
infer %6


; function: unary-condition

; start LHS (in unary-condition)
%0:i32 = var
%1 = ult 1:i32, %0
infer %1


; start LHS (in unary-condition)
%0:i32 = var
%1 = ult 1:i32, %0
%2:i32 = zext %1
%3 = cttz %2
infer %3


; start LHS (in unary-condition)
%0:i32 = var
%1 = add %0, 2:i32
%2 = ult 1:i32, %0
%3:i32 = zext %2
%4 = cttz %3
%5 = ne %4, 0:i32
pc %5 1:i1
infer %1


; function: unary-condition-2

; start LHS (in unary-condition-2)
%0:i32 = var
%1 = ult 1:i32, %0
infer %1


; start LHS (in unary-condition-2)
%0:i32 = var
%1 = ult 1:i32, %0
%2:i32 = zext %1
%3 = eq %2, 0:i32
infer %3


; start LHS (in unary-condition-2)
%0:i32 = var
%1 = add %0, 2:i32
%2 = ult 1:i32, %0
%3:i32 = zext %2
%4 = eq %3, 0:i32
pc %4 1:i1
infer %1


; function: if-else-cond

; start LHS (in if-else-cond)
%0:i32 = var
%1 = slt %0, 1:i32
infer %1


; start LHS (in if-else-cond)
%0:i32 = var
%1 = add %0, 1:i32
%2 = slt %0, 1:i32
pc %2 1:i1
infer %1


; start LHS (in if-else-cond)
%0:i32 = var
%1 = add %0, 2:i32
%2 = slt %0, 1:i32
%3:i32 = zext %2
%4 = eq %3, 0:i32
pc %4 1:i1
infer %1


; start LHS (in if-else-cond)
%0 = block 2
%1:i32 = var
%2 = add %1, 1:i32
%3 = add %1, 2:i32
%4 = phi %0, %2, %3
%5 = and %4, 1:i32
%6 = slt %1, 1:i32
blockpc %0 0 %6 1:i1
%7:i32 = zext %6
%8 = eq %7, 0:i32
blockpc %0 1 %8 1:i1
infer %5


; function: trivial-ret

; start LHS (in trivial-ret)
%0 = add 0:i32, 1:i32
infer %0


; function: trivial-const

; function: trivial-const-block

; function: bad-phi-value

; function: bad-phi-value-2

; function: select

; start LHS (in select)
%0 = ne 3:i32, 0:i32
infer %0


; start LHS (in select)
%0 = ne 3:i32, 0:i32
%1 = select %0, 1:i32, 2:i32
infer %1


; function: select-2

; start LHS (in select-2)
%0:i32 = var
%1:i32 = var
%2 = add %0, %1
infer %2


; start LHS (in select-2)
%0:i32 = var
%1 = add %0, 1:i32
infer %1


; start LHS (in select-2)
%0:i32 = var
%1 = add 2:i32, %0
infer %1


; start LHS (in select-2)
%0:i32 = var
%1 = add 2:i32, %0
%2 = ne %1, 0:i32
infer %2


; start LHS (in select-2)
%0:i32 = var
%1 = add 2:i32, %0
%2 = ne %1, 0:i32
%3:i32 = var
%4 = add %3, %0
%5 = add %3, 1:i32
%6 = select %2, %4, %5
infer %6


; function: block-phi-1

; start LHS (in block-phi-1)
%0:i32 = var
%1 = add %0, 1:i32
infer %1


; start LHS (in block-phi-1)
%0:i32 = var
%1 = add %0, 2:i32
infer %1


; start LHS (in block-phi-1)
%0 = block 2
%1:i32 = var
%2 = add %1, 2:i32
%3 = phi %0, %1, %2
%4 = add %3, 3:i32
infer %4


; function: block-phi-2

; start LHS (in block-phi-2)
%0 = block 2
%1 = phi %0, 1:i32, 2:i32
%2 = add %1, 3:i32
infer %2


; function: zero_init-phi-bad_type

; function: phi-bad-type

; function: phi-one-side-i1

; start LHS (in phi-one-side-i1)
%0:i32 = var
%1:i32 = var
%2 = sle %0, %1
infer %2


; start LHS (in phi-one-side-i1)
%0:i32 = var
%1:i32 = var
%2 = eq %0, %1
%3 = sle %0, %1
pc %3 1:i1
infer %2


; start LHS (in phi-one-side-i1)
%0:i32 = var
%1:i32 = var
%2 = add %0, %1
%3 = sle %0, %1
%4:i32 = zext %3
%5 = eq %4, 0:i32
pc %5 1:i1
infer %2


; function: call

; start LHS (in call)
%0:i32 = var
%1:i32 = var
%2 = add %0, %1
infer %2


; start LHS (in call)
%0:i32 = var
%1 = add 10:i32, %0
infer %1


; start LHS (in call)
%0:i32 = var
%1:i32 = var
%2 = add %0, %1
%3:i32 = var
%4 = add 10:i32, %3
%5 = mul %2, %4
infer %5


; function: in-unreachable-1

; function: in-unreachable-2

; function: in-unreachable-3

; function: in-unreachable-4

; function: in-unreachable-br_if

; function: in-unreachable-big

; function: in-unreachable-operations

; function: merge-with-one-less

; function: deep

; start LHS (in deep)
%0:i32 = var
%1 = xor %0, 1234:i32
infer %1


; start LHS (in deep)
%0:i32 = var
%1 = xor %0, 1234:i32
%2 = mul %1, 1234:i32
infer %2


; start LHS (in deep)
%0:i32 = var
%1 = xor %0, 1234:i32
%2 = mul %1, 1234:i32
%3 = xor %2, 1234:i32
infer %3


; start LHS (in deep)
%0:i32 = var
%1 = xor %0, 1234:i32
%2 = mul %1, 1234:i32
%3 = xor %2, 1234:i32
%4 = mul %3, 1234:i32
infer %4


; start LHS (in deep)
%0:i32 = var
%1 = xor %0, 1234:i32
%2 = mul %1, 1234:i32
%3 = xor %2, 1234:i32
%4 = mul %3, 1234:i32
%5 = xor %4, 1234:i32
infer %5


; start LHS (in deep)
%0:i32 = var
%1 = xor %0, 1234:i32
%2 = mul %1, 1234:i32
%3 = xor %2, 1234:i32
%4 = mul %3, 1234:i32
%5 = xor %4, 1234:i32
%6 = mul %5, 1234:i32
infer %6


; start LHS (in deep)
%0:i32 = var
%1 = xor %0, 1234:i32
%2 = mul %1, 1234:i32
%3 = xor %2, 1234:i32
%4 = mul %3, 1234:i32
%5 = xor %4, 1234:i32
%6 = mul %5, 1234:i32
%7 = xor %6, 1234:i32
infer %7


; start LHS (in deep)
%0:i32 = var
%1 = xor %0, 1234:i32
%2 = mul %1, 1234:i32
%3 = xor %2, 1234:i32
%4 = mul %3, 1234:i32
%5 = xor %4, 1234:i32
%6 = mul %5, 1234:i32
%7 = xor %6, 1234:i32
%8 = mul %7, 1234:i32
infer %8


; start LHS (in deep)
%0:i32 = var
%1 = xor %0, 1234:i32
%2 = mul %1, 1234:i32
%3 = xor %2, 1234:i32
%4 = mul %3, 1234:i32
%5 = xor %4, 1234:i32
%6 = mul %5, 1234:i32
%7 = xor %6, 1234:i32
%8 = mul %7, 1234:i32
%9 = xor %8, 1234:i32
infer %9


; start LHS (in deep)
%0:i32 = var
%1 = mul %0, 1234:i32
%2 = xor %1, 1234:i32
%3 = mul %2, 1234:i32
%4 = xor %3, 1234:i32
%5 = mul %4, 1234:i32
%6 = xor %5, 1234:i32
%7 = mul %6, 1234:i32
%8 = xor %7, 1234:i32
%9 = mul %8, 1234:i32
infer %9


; start LHS (in deep)
%0:i32 = var
%1 = xor %0, 1234:i32
%2 = mul %1, 1234:i32
%3 = xor %2, 1234:i32
%4 = mul %3, 1234:i32
%5 = xor %4, 1234:i32
%6 = mul %5, 1234:i32
%7 = xor %6, 1234:i32
%8 = mul %7, 1234:i32
%9 = xor %8, 1234:i32
infer %9


; start LHS (in deep)
%0:i32 = var
%1 = mul %0, 1234:i32
%2 = xor %1, 1234:i32
%3 = mul %2, 1234:i32
%4 = xor %3, 1234:i32
%5 = mul %4, 1234:i32
%6 = xor %5, 1234:i32
%7 = mul %6, 1234:i32
%8 = xor %7, 1234:i32
%9 = mul %8, 1234:i32
infer %9


; start LHS (in deep)
%0:i32 = var
%1 = xor %0, 1234:i32
%2 = mul %1, 1234:i32
%3 = xor %2, 1234:i32
%4 = mul %3, 1234:i32
%5 = xor %4, 1234:i32
%6 = mul %5, 1234:i32
%7 = xor %6, 1234:i32
%8 = mul %7, 1234:i32
%9 = xor %8, 1234:i32
infer %9


; start LHS (in deep)
%0:i32 = var
%1 = mul %0, 1234:i32
%2 = xor %1, 1234:i32
%3 = mul %2, 1234:i32
%4 = xor %3, 1234:i32
%5 = mul %4, 1234:i32
%6 = xor %5, 1234:i32
%7 = mul %6, 1234:i32
%8 = xor %7, 1234:i32
%9 = mul %8, 1234:i32
infer %9


; start LHS (in deep)
%0:i32 = var
%1 = xor %0, 1234:i32
%2 = mul %1, 1234:i32
%3 = xor %2, 1234:i32
%4 = mul %3, 1234:i32
%5 = xor %4, 1234:i32
%6 = mul %5, 1234:i32
%7 = xor %6, 1234:i32
%8 = mul %7, 1234:i32
%9 = xor %8, 1234:i32
infer %9


; start LHS (in deep)
%0:i32 = var
%1 = mul %0, 1234:i32
%2 = xor %1, 1234:i32
%3 = mul %2, 1234:i32
%4 = xor %3, 1234:i32
%5 = mul %4, 1234:i32
%6 = xor %5, 1234:i32
%7 = mul %6, 1234:i32
%8 = xor %7, 1234:i32
%9 = mul %8, 1234:i32
infer %9


; start LHS (in deep)
%0:i32 = var
%1 = xor %0, 1234:i32
%2 = mul %1, 1234:i32
%3 = xor %2, 1234:i32
%4 = mul %3, 1234:i32
%5 = xor %4, 1234:i32
%6 = mul %5, 1234:i32
%7 = xor %6, 1234:i32
%8 = mul %7, 1234:i32
%9 = xor %8, 1234:i32
infer %9


; start LHS (in deep)
%0:i32 = var
%1 = mul %0, 1234:i32
%2 = xor %1, 1234:i32
%3 = mul %2, 1234:i32
%4 = xor %3, 1234:i32
%5 = mul %4, 1234:i32
%6 = xor %5, 1234:i32
%7 = mul %6, 1234:i32
%8 = xor %7, 1234:i32
%9 = mul %8, 1234:i32
infer %9


; start LHS (in deep)
%0:i32 = var
%1 = xor %0, 1234:i32
%2 = mul %1, 1234:i32
%3 = xor %2, 1234:i32
%4 = mul %3, 1234:i32
%5 = xor %4, 1234:i32
%6 = mul %5, 1234:i32
%7 = xor %6, 1234:i32
%8 = mul %7, 1234:i32
%9 = xor %8, 1234:i32
infer %9


; start LHS (in deep)
%0:i32 = var
%1 = mul %0, 1234:i32
%2 = xor %1, 1234:i32
%3 = mul %2, 1234:i32
%4 = xor %3, 1234:i32
%5 = mul %4, 1234:i32
%6 = xor %5, 1234:i32
%7 = mul %6, 1234:i32
%8 = xor %7, 1234:i32
%9 = mul %8, 1234:i32
infer %9


; start LHS (in deep)
%0:i32 = var
%1 = xor %0, 1234:i32
%2 = mul %1, 1234:i32
%3 = xor %2, 1234:i32
%4 = mul %3, 1234:i32
%5 = xor %4, 1234:i32
%6 = mul %5, 1234:i32
%7 = xor %6, 1234:i32
%8 = mul %7, 1234:i32
%9 = xor %8, 1234:i32
infer %9


; start LHS (in deep)
%0:i32 = var
%1 = mul %0, 1234:i32
%2 = xor %1, 1234:i32
%3 = mul %2, 1234:i32
%4 = xor %3, 1234:i32
%5 = mul %4, 1234:i32
%6 = xor %5, 1234:i32
%7 = mul %6, 1234:i32
%8 = xor %7, 1234:i32
%9 = mul %8, 1234:i32
infer %9


; start LHS (in deep)
%0:i32 = var
%1 = xor %0, 1234:i32
%2 = mul %1, 1234:i32
%3 = xor %2, 1234:i32
%4 = mul %3, 1234:i32
%5 = xor %4, 1234:i32
%6 = mul %5, 1234:i32
%7 = xor %6, 1234:i32
%8 = mul %7, 1234:i32
%9 = xor %8, 1234:i32
infer %9


; start LHS (in deep)
%0:i32 = var
%1 = mul %0, 1234:i32
%2 = xor %1, 1234:i32
%3 = mul %2, 1234:i32
%4 = xor %3, 1234:i32
%5 = mul %4, 1234:i32
%6 = xor %5, 1234:i32
%7 = mul %6, 1234:i32
%8 = xor %7, 1234:i32
%9 = mul %8, 1234:i32
infer %9


; start LHS (in deep)
%0:i32 = var
%1 = xor %0, 1234:i32
%2 = mul %1, 1234:i32
%3 = xor %2, 1234:i32
%4 = mul %3, 1234:i32
%5 = xor %4, 1234:i32
%6 = mul %5, 1234:i32
%7 = xor %6, 1234:i32
%8 = mul %7, 1234:i32
%9 = xor %8, 1234:i32
infer %9


; start LHS (in deep)
%0:i32 = var
%1 = mul %0, 1234:i32
%2 = xor %1, 1234:i32
%3 = mul %2, 1234:i32
%4 = xor %3, 1234:i32
%5 = mul %4, 1234:i32
%6 = xor %5, 1234:i32
%7 = mul %6, 1234:i32
%8 = xor %7, 1234:i32
%9 = mul %8, 1234:i32
infer %9


; function: two-pcs

; start LHS (in two-pcs)
%0:i64 = var
%1:i64 = var
%2 = slt %0, %1
infer %2


; start LHS (in two-pcs)
%0:i64 = var
%1 = eq %0, 0:i64
%2:i64 = var
%3 = slt %0, %2
pc %3 1:i1
infer %1


; start LHS (in two-pcs)
%0:i64 = var
%1:i64 = var
%2 = add %0, %1
%3 = eq %0, 0:i64
%4 = slt %0, %1
pc %3 1:i1
pc %4 1:i1
infer %2


; start LHS (in two-pcs)
%0:i64 = var
%1:i64 = var
%2 = sub %0, %1
%3 = eq %0, 0:i64
%4:i32 = zext %3
%5 = eq %4, 0:i32
%6 = slt %0, %1
pc %5 1:i1
pc %6 1:i1
infer %2


; start LHS (in two-pcs)
%0:i64 = var
%1 = eq %0, 0:i64
%2:i64 = var
%3 = slt %2, %0
%4:i32 = zext %3
%5 = eq %4, 0:i32
pc %5 1:i1
infer %1


; start LHS (in two-pcs)
%0:i64 = var
%1:i64 = var
%2 = mul %0, %1
%3 = eq %1, 0:i64
%4 = slt %0, %1
%5:i32 = zext %4
%6 = eq %5, 0:i32
pc %3 1:i1
pc %6 1:i1
infer %2


; start LHS (in two-pcs)
%0:i64 = var
%1:i64 = var
%2 = sdiv %0, %1
%3 = eq %1, 0:i64
%4:i32 = zext %3
%5 = eq %4, 0:i32
%6 = slt %0, %1
%7:i32 = zext %6
%8 = eq %7, 0:i32
pc %5 1:i1
pc %8 1:i1
infer %2


; function: loop-1

; start LHS (in loop-1)
%0 = add 1:i32, 2:i32
infer %0


; function: loop-2

; start LHS (in loop-2)
%0 = add 1:i32, 3:i32
infer %0


; start LHS (in loop-2)
%0 = add 2:i32, 4:i32
infer %0


; start LHS (in loop-2)
%0 = add 1:i32, 3:i32
%1 = add 2:i32, 4:i32
%2 = add %0, %1
infer %2


; function: loop-3

; start LHS (in loop-3)
%0:i32 = var
%1 = add %0, 3:i32
infer %1


; start LHS (in loop-3)
%0:i32 = var
%1 = add %0, 4:i32
infer %1


; start LHS (in loop-3)
%0:i32 = var
%1:i32 = var
%2 = add %0, %1
infer %2


; function: loop-4

; start LHS (in loop-4)
%0:i32 = var
%1 = add %0, 3:i32
infer %1


; start LHS (in loop-4)
%0:i32 = var
%1 = add %0, 2:i32
infer %1


; function: loop-5

; start LHS (in loop-5)
%0:i32 = var
%1 = add %0, 3:i32
infer %1


; start LHS (in loop-5)
%0:i32 = var
%1 = add %0, 2:i32
infer %1


; function: loop-6

; start LHS (in loop-6)
%0:i32 = var
%1 = add %0, 3:i32
infer %1


; start LHS (in loop-6)
%0:i32 = var
%1 = add %0, 2:i32
infer %1


; function: loop-7

; start LHS (in loop-7)
%0:i32 = var
%1 = add %0, 3:i32
infer %1


; start LHS (in loop-7)
%0:i32 = var
%1 = add %0, 5:i32
infer %1


; function: loop-8

; start LHS (in loop-8)
%0 = add 1:i32, 4:i32
infer %0


; start LHS (in loop-8)
%0:i32 = var
%1 = sub 1:i32, %0
infer %1


; start LHS (in loop-8)
%0 = add 1:i32, 4:i32
%1:i32 = var
%2 = sub 1:i32, %1
%3 = mul %0, %2
infer %3


; function: loop-9

; start LHS (in loop-9)
%0:i32 = var
%1:i32 = var
%2 = add %0, %1
infer %2


; function: loop-10

; start LHS (in loop-10)
%0:i32 = var
%1:i32 = var
%2 = add %0, %1
infer %2


; function: loop-multicond-1

; start LHS (in loop-multicond-1)
%0 = ne 6:i32, 0:i32
infer %0


; start LHS (in loop-multicond-1)
%0 = ne 6:i32, 0:i32
%1 = select %0, 4:i32, 5:i32
infer %1


; function: loop-multicond-2

; start LHS (in loop-multicond-2)
%0:i32 = var
%1 = add %0, 4:i32
infer %1


; start LHS (in loop-multicond-2)
%0:i32 = var
%1 = add %0, 5:i32
infer %1


; start LHS (in loop-multicond-2)
%0 = add 3:i32, 6:i32
infer %0


; start LHS (in loop-multicond-2)
%0 = add 3:i32, 6:i32
%1 = ne %0, 0:i32
infer %1


; start LHS (in loop-multicond-2)
%0 = add 3:i32, 6:i32
%1 = ne %0, 0:i32
%2:i32 = var
%3:i32 = var
%4 = select %1, %2, %3
infer %4


; function: loop-block-1

; start LHS (in loop-block-1)
%0:i32 = var
%1 = add %0, 4:i32
infer %1


; start LHS (in loop-block-1)
%0:i32 = var
%1 = add %0, 5:i32
infer %1


; start LHS (in loop-block-1)
%0:i32 = var
%1 = add %0, 6:i32
infer %1


; start LHS (in loop-block-1)
%0:i32 = var
%1 = ne %0, 0:i32
infer %1


; start LHS (in loop-block-1)
%0:i32 = var
%1 = ne %0, 0:i32
%2:i32 = var
%3 = block 2
%4:i32 = var
%5:i32 = var
%6 = phi %3, %4, %5
%7 = select %1, %2, %6
infer %7


; function: loop-block-2

; start LHS (in loop-block-2)
%0:i32 = var
%1 = add %0, 4:i32
infer %1


; start LHS (in loop-block-2)
%0:i32 = var
%1 = add %0, 5:i32
infer %1


; start LHS (in loop-block-2)
%0:i32 = var
%1 = add %0, 6:i32
infer %1


; start LHS (in loop-block-2)
%0:i32 = var
%1 = ne %0, 0:i32
infer %1


; start LHS (in loop-block-2)
%0:i32 = var
%1 = ne %0, 0:i32
%2:i32 = var
%3 = block 2
%4:i32 = var
%5:i32 = var
%6 = phi %3, %4, %5
%7 = select %1, %2, %6
infer %7


; function: bad-phi-type

; function: loop-unreachable

; function: phi-value-turns-bad

; start LHS (in phi-value-turns-bad)
%0:i32 = var
%1 = ctlz %0
%2 = eq %0, 0:i32
pc %2 1:i1
infer %1


; function: multi-use

; start LHS (in multi-use)
%0:i32 = var
%1 = add %0, 1:i32
infer %1


; start LHS (in multi-use)
%0:i32 = var
%1 = add %0, %0
infer %1


; function: multi-use-2

; start LHS (in multi-use-2)
%0:i32 = var
%1 = add %0, 1:i32
infer %1


; start LHS (in multi-use-2)
%0:i32 = var
%1 = mul %0, 2:i32
infer %1


; start LHS (in multi-use-2)
%0:i32 = var
%1 = mul %0, 2:i32
%2 = sub %1, %0
infer %2


; function: many-single-uses-with-param

; start LHS (in many-single-uses-with-param)
%0:i32 = var
%1 = mul 10:i32, %0
infer %1


; start LHS (in many-single-uses-with-param)
%0:i32 = var
%1 = cttz %0
infer %1


; start LHS (in many-single-uses-with-param)
%0:i32 = var
%1 = cttz %0
%2 = sub %1, 20:i32
infer %2


; start LHS (in many-single-uses-with-param)
%0:i32 = var
%1 = mul 10:i32, %0
%2 = cttz %0
%3 = sub %2, 20:i32
%4 = add %1, %3
infer %4


; start LHS (in many-single-uses-with-param)
%0:i32 = var
%1 = mul 10:i32, %0
%2 = cttz %0
%3 = sub %2, 20:i32
%4 = add %1, %3
%5 = eq %4, 0:i32
infer %5


; function: 55

; start LHS (in 55)
%0:i32 = var
%1 = add %0, -7:i32
infer %1


; start LHS (in 55)
%0:i32 = var
%1 = eq %0, 0:i32
%2 = ne %0, 0:i32
pc %2 1:i1
infer %1


; start LHS (in 55)
%0:i32 = var
%1:i32 = var
%2 = ne %0, %1
%3 = ne %1, 0:i32
pc %3 1:i1
infer %2


; function: multiple-uses-to-non-expression

; start LHS (in multiple-uses-to-non-expression)
%0:i32 = var
%1 = add %0, 10:i32
infer %1


; start LHS (in multiple-uses-to-non-expression)
%0:i32 = var
%1 = add %0, 20:i32
infer %1


; function: nested-phi-forwarding

; start LHS (in nested-phi-forwarding)
%0 = block 2
%1:i32 = var
%2 = block 2
%3 = block 2
%4 = phi %3, %1, 1:i32
%5 = phi %2, %1, %4
%6 = phi %0, %1, %5
%7 = or 1:i32, %6
infer %7


; function: zext-numGets

; start LHS (in zext-numGets)
%0:i32 = var
%1 = eq %0, 0:i32
infer %1


; start LHS (in zext-numGets)
%0 = block 2
%1:i32 = var
%2 = eq %1, 0:i32
%3:i32 = zext %2
%4 = phi %0, 1:i32, %3
%5 = cttz %4
infer %5


; function: zext-numGets-hasAnotherUse

; start LHS (in zext-numGets-hasAnotherUse)
%0:i32 = var
%1 = eq %0, 0:i32
infer %1


; start LHS (in zext-numGets-hasAnotherUse)
%0 = block 2
%1:i32 = var
%2 = eq %1, 0:i32
%3:i32 = zext %2
%4 = phi %0, 1:i32, %3
%5 = cttz %4
infer %5


; function: flipped-needs-right-origin

; start LHS (in flipped-needs-right-origin)
%0 = block 2
%1 = phi %0, 0:i32, 2:i32
%2 = add %1, 4:i32
infer %2


; start LHS (in flipped-needs-right-origin)
%0 = block 2
%1 = phi %0, 0:i32, 2:i32
%2 = add %1, 4:i32
%3 = slt %2, 3:i32
infer %3


; function: non-expr-nodes-may-have-multiple-uses-too-its-the-ORIGIN

; start LHS (in non-expr-nodes-may-have-multiple-uses-too-its-the-ORIGIN)
%0:i32 = var
%1 = ult 1:i32, %0
infer %1


; start LHS (in non-expr-nodes-may-have-multiple-uses-too-its-the-ORIGIN)
%0:i32 = var
%1:i32 = zext %0
%2 = sub 4:i32, %1
infer %2


; function: loop-of-set-connections

; start LHS (in loop-of-set-connections)
%0 = add 0:i32, 1:i32
%1 = ne 0:i32, 0:i32
pc %1 1:i1
infer %0


; function: conditions-in-conditions

; start LHS (in conditions-in-conditions)
%0 = sub 0:i32, 1:i32
%1 = ne 0:i32, 0:i32
pc %1 1:i1
infer %0


; start LHS (in conditions-in-conditions)
%0 = block 2
%1 = block 2
%2 = phi %1, 0:i32, 1:i32
%3 = phi %0, %2, 1:i32
%4 = add %3, 16:i32
%5 = ne 0:i32, 0:i32
blockpc %1 0 %5 1:i1
%6 = eq 0:i32, 0:i32
blockpc %1 1 %6 1:i1
%7:i32 = var
%8 = phi %1, 1:i32, %7
%9 = ne %8, 0:i32
blockpc %0 0 %9 1:i1
%10 = eq %8, 0:i32
blockpc %0 1 %10 1:i1
infer %4

(module
 (type $i32_i32_=>_i32 (func (param i32 i32) (result i32)))
 (type $i32_=>_i32 (func (param i32) (result i32)))
 (type $i32_=>_none (func (param i32)))
 (type $i32_i32_i32_=>_i32 (func (param i32 i32 i32) (result i32)))
 (type $none_=>_i32 (func (result i32)))
 (type $i32_i32_=>_none (func (param i32 i32)))
 (type $none_=>_f64 (func (result f64)))
 (type $none_=>_none (func))
 (type $i64_i64_i64_=>_i32 (func (param i64 i64 i64) (result i32)))
 (type $i32_i32_i32_i32_=>_none (func (param i32 i32 i32 i32)))
 (type $i64_i64_i32_f32_=>_none (func (param i64 i64 i32 f32)))
 (type $i32_i32_i32_i32_i32_=>_i32 (func (param i32 i32 i32 i32 i32) (result i32)))
 (type $i64_i64_i64_=>_i64 (func (param i64 i64 i64) (result i64)))
 (memory $0 (shared 1 1))
 (export "replaced-print-internal" (func $55))
 (func $figure-1a (param $a i64) (param $x i64) (param $y i64) (result i32)
  (local $i i32)
  (local $j i32)
  (local $r i32)
  (local $6 i64)
  (local $7 i64)
  (local $8 i32)
  (local $9 i64)
  (local $10 i64)
  (local $11 i32)
  (local $12 i32)
  (local $13 i32)
  (local $14 i32)
  (local $15 i32)
  (local $16 i32)
  (local $17 i32)
  (block
   (nop)
   (nop)
   (nop)
   (nop)
   (nop)
   (nop)
   (nop)
   (nop)
   (local.set $12
    (i64.eq
     (local.get $a)
     (local.get $x)
    )
   )
   (local.set $13
    (i64.ne
     (local.get $a)
     (local.get $y)
    )
   )
   (nop)
   (nop)
   (local.set $15
    (i32.and
     (local.get $12)
     (local.get $13)
    )
   )
   (return
    (local.get $15)
   )
   (unreachable)
  )
  (nop)
  (return
   (local.get $16)
  )
 )
 (func $figure-1b (param $a i64) (param $x i64) (param $y i64) (result i32)
  (local $i i32)
  (local $j i32)
  (local $r i32)
  (local $6 i64)
  (local $7 i64)
  (local $8 i32)
  (local $9 i64)
  (local $10 i64)
  (local $11 i32)
  (local $12 i64)
  (local $13 i64)
  (local $14 i32)
  (local $15 i32)
  (local $16 i32)
  (local $17 i32)
  (local $18 i32)
  (block
   (nop)
   (nop)
   (local.set $8
    (i64.lt_s
     (local.get $x)
     (local.get $y)
    )
   )
   (if
    (local.get $8)
    (block
     (block $block
      (nop)
      (nop)
      (nop)
      (nop)
      (nop)
      (nop)
      (nop)
      (nop)
      (local.set $15
       (i64.eq
        (local.get $a)
        (local.get $x)
       )
      )
      (local.set $16
       (i64.ne
        (local.get $a)
        (local.get $y)
       )
      )
      (nop)
      (nop)
      (local.set $18
       (i32.and
        (local.get $15)
        (local.get $16)
       )
      )
      (return
       (local.get $18)
      )
      (unreachable)
     )
     (unreachable)
    )
    (block
     (unreachable)
     (unreachable)
    )
   )
  )
  (unreachable)
 )
 (func $figure-3-if (param $x i32) (result i32)
  (local $1 i32)
  (local $2 i32)
  (local $3 i32)
  (local $4 i32)
  (local $5 i32)
  (local $6 i32)
  (local $7 i32)
  (local $8 i32)
  (local $9 i32)
  (local $10 i32)
  (block
   (block
    (nop)
    (local.set $2
     (i32.and
      (local.get $x)
      (i32.const 1)
     )
    )
    (if
     (local.get $2)
     (block
      (nop)
      (nop)
      (local.set $x
       (i32.add
        (local.get $x)
        (i32.const 1)
       )
      )
     )
     (block
      (nop)
      (nop)
      (local.set $x
       (i32.add
        (local.get $x)
        (i32.const 2)
       )
      )
     )
    )
   )
   (nop)
   (local.set $8
    (i32.and
     (local.get $x)
     (i32.const 1)
    )
   )
   (return
    (local.get $8)
   )
   (unreachable)
  )
  (nop)
  (return
   (local.get $9)
  )
 )
 (func $flips
  (local $x i32)
  (local $y i32)
  (local $2 i32)
  (local $3 i32)
  (local $4 i32)
  (local $5 i32)
  (local $6 i32)
  (local $7 i32)
  (local $8 i32)
  (local $9 i32)
  (local $10 i32)
  (local $11 i32)
  (local $12 i32)
  (local $13 i32)
  (nop)
  (nop)
  (nop)
  (local.set $x
   (i32.ge_s
    (local.get $x)
    (local.get $y)
   )
  )
  (nop)
  (nop)
  (nop)
  (local.set $x
   (i32.ge_u
    (local.get $x)
    (local.get $y)
   )
  )
  (nop)
  (nop)
  (nop)
  (local.set $x
   (i32.gt_s
    (local.get $x)
    (local.get $y)
   )
  )
  (nop)
  (nop)
  (nop)
  (local.set $x
   (i32.gt_u
    (local.get $x)
    (local.get $y)
   )
  )
 )
 (func $various-conditions-1 (param $x i32)
  (local $1 i32)
  (local $2 i32)
  (local $3 i32)
  (nop)
  (if
   (local.get $x)
   (block
    (nop)
    (nop)
    (local.set $x
     (i32.add
      (local.get $x)
      (i32.const 1)
     )
    )
   )
  )
 )
 (func $various-conditions-2 (param $x i32)
  (local $1 i32)
  (local $2 i32)
  (local $3 i32)
  (local $4 i32)
  (nop)
  (local.set $2
   (i32.lt_s
    (local.get $x)
    (i32.const 0)
   )
  )
  (if
   (local.get $2)
   (block
    (nop)
    (nop)
    (local.set $x
     (i32.sub
      (local.get $x)
      (i32.const 2)
     )
    )
   )
  )
 )
 (func $various-conditions-3 (param $x i32)
  (local $1 i32)
  (local $2 i32)
  (local $3 i32)
  (local.set $1
   (i32.reinterpret_f32
    (f32.const 0)
   )
  )
  (if
   (local.get $1)
   (block
    (nop)
    (nop)
    (local.set $x
     (i32.sub
      (local.get $x)
      (i32.const 4)
     )
    )
   )
  )
 )
 (func $various-conditions-4 (param $x i32)
  (local $1 i32)
  (local $2 i32)
  (block
   (unreachable)
   (if
    (unreachable)
    (block
     (nop)
     (nop)
     (local.set $x
      (i32.add
       (local.get $x)
       (i32.const 3)
      )
     )
    )
   )
  )
  (unreachable)
 )
 (func $unaries (param $x i32) (param $y i32)
  (local $2 i32)
  (local $3 i32)
  (local $4 i32)
  (local $5 i32)
  (local $6 i32)
  (local $7 i32)
  (local $8 i32)
  (local $9 i32)
  (local $10 i32)
  (local $11 i32)
  (nop)
  (local.set $3
   (i32.eqz
    (local.get $x)
   )
  )
  (if
   (local.get $3)
   (block
    (nop)
    (local.set $5
     (i32.ctz
      (local.get $y)
     )
    )
    (nop)
    (local.set $7
     (i32.clz
      (local.get $x)
     )
    )
    (nop)
    (local.set $9
     (i32.popcnt
      (local.get $y)
     )
    )
    (local.set $10
     (i32.sub
      (local.get $7)
      (local.get $9)
     )
    )
    (nop)
    (local.set $x
     (i32.add
      (local.get $5)
      (local.get $10)
     )
    )
   )
  )
 )
 (func $unary-condition (param $x i32)
  (local $1 i32)
  (local $2 i32)
  (local $3 i32)
  (local $4 i32)
  (local $5 i32)
  (nop)
  (local.set $2
   (i32.gt_u
    (local.get $x)
    (i32.const 1)
   )
  )
  (local.set $3
   (i32.ctz
    (local.get $2)
   )
  )
  (if
   (local.get $3)
   (block
    (nop)
    (nop)
    (local.set $x
     (i32.add
      (local.get $x)
      (i32.const 2)
     )
    )
   )
  )
 )
 (func $unary-condition-2 (param $x i32)
  (local $1 i32)
  (local $2 i32)
  (local $3 i32)
  (local $4 i32)
  (local $5 i32)
  (nop)
  (local.set $2
   (i32.gt_u
    (local.get $x)
    (i32.const 1)
   )
  )
  (local.set $3
   (i32.eqz
    (local.get $2)
   )
  )
  (if
   (local.get $3)
   (block
    (nop)
    (nop)
    (local.set $x
     (i32.add
      (local.get $x)
      (i32.const 2)
     )
    )
   )
  )
 )
 (func $if-else-cond (param $x i32) (result i32)
  (local $1 i32)
  (local $2 i32)
  (local $3 i32)
  (local $4 i32)
  (local $5 i32)
  (local $6 i32)
  (local $7 i32)
  (local $8 i32)
  (local $9 i32)
  (local $10 i32)
  (block
   (block
    (nop)
    (local.set $2
     (i32.lt_s
      (local.get $x)
      (i32.const 1)
     )
    )
    (if
     (local.get $2)
     (block
      (nop)
      (nop)
      (local.set $x
       (i32.add
        (local.get $x)
        (i32.const 1)
       )
      )
     )
     (block
      (nop)
      (nop)
      (local.set $x
       (i32.add
        (local.get $x)
        (i32.const 2)
       )
      )
     )
    )
   )
   (nop)
   (local.set $8
    (i32.and
     (local.get $x)
     (i32.const 1)
    )
   )
   (return
    (local.get $8)
   )
   (unreachable)
  )
  (nop)
  (return
   (local.get $9)
  )
 )
 (func $trivial-ret (result i32)
  (local $0 i32)
  (local.set $0
   (i32.add
    (i32.const 0)
    (i32.const 1)
   )
  )
  (return
   (local.get $0)
  )
 )
 (func $trivial-const (result i32)
  (return
   (i32.const 0)
  )
 )
 (func $trivial-const-block (result i32)
  (local $0 i32)
  (local $1 i32)
  (block
   (nop)
   (nop)
  )
  (local.set $1
   (i32.const 0)
  )
  (return
   (local.get $1)
  )
 )
 (func $bad-phi-value (result i32)
  (local $0 i32)
  (local $1 i32)
  (local $2 i32)
  (local $3 i32)
  (local $4 i32)
  (block
   (if
    (i32.const 1)
    (block
     (nop)
     (local.set $1
      (i32.load
       (i32.const 0)
      )
     )
    )
    (local.set $1
     (i32.const 0)
    )
   )
   (nop)
   (if
    (local.get $1)
    (local.set $3
     (i32.const 0)
    )
    (local.set $3
     (i32.const 1)
    )
   )
  )
  (nop)
  (return
   (local.get $3)
  )
 )
 (func $bad-phi-value-2 (param $x i32) (result i32)
  (local $1 i32)
  (local $2 i32)
  (local $3 i32)
  (local $4 i32)
  (local $5 i32)
  (local $6 i32)
  (block
   (block
    (if
     (i32.const 1)
     (block
      (nop)
      (local.set $2
       (i32.load
        (i32.const 0)
       )
      )
     )
     (local.set $2
      (i32.const 0)
     )
    )
    (nop)
    (if
     (local.get $2)
     (local.set $x
      (i32.const 1)
     )
     (local.set $x
      (i32.const 2)
     )
    )
   )
   (nop)
   (nop)
  )
  (nop)
  (return
   (local.get $x)
  )
 )
 (func $select (param $x i32) (result i32)
  (local $1 i32)
  (local.set $1
   (select
    (i32.const 1)
    (i32.const 2)
    (i32.const 3)
   )
  )
  (return
   (local.get $1)
  )
  (unreachable)
 )
 (func $select-2 (param $x i32) (param $y i32) (result i32)
  (local $2 i32)
  (local $3 i32)
  (local $4 i32)
  (local $5 i32)
  (local $6 i32)
  (local $7 i32)
  (local $8 i32)
  (local $9 i32)
  (nop)
  (nop)
  (local.set $4
   (i32.add
    (local.get $x)
    (local.get $y)
   )
  )
  (nop)
  (local.set $6
   (i32.add
    (local.get $x)
    (i32.const 1)
   )
  )
  (nop)
  (local.set $8
   (i32.add
    (i32.const 2)
    (local.get $y)
   )
  )
  (local.set $9
   (select
    (local.get $4)
    (local.get $6)
    (local.get $8)
   )
  )
  (return
   (local.get $9)
  )
  (unreachable)
 )
 (func $block-phi-1 (param $x i32) (param $y i32) (result i32)
  (local $2 i32)
  (local $3 i32)
  (local $4 i32)
  (local $5 i32)
  (local $6 i32)
  (local $7 i32)
  (local $8 i32)
  (local $9 i32)
  (local $10 i32)
  (block
   (block $out
    (nop)
    (nop)
    (local.set $x
     (i32.add
      (local.get $x)
      (i32.const 1)
     )
    )
    (nop)
    (br_if $out
     (local.get $y)
    )
    (nop)
    (nop)
    (local.set $x
     (i32.add
      (local.get $x)
      (i32.const 2)
     )
    )
   )
   (nop)
   (nop)
   (nop)
  )
  (local.set $10
   (i32.add
    (local.get $x)
    (i32.const 3)
   )
  )
  (return
   (local.get $10)
  )
 )
 (func $block-phi-2 (param $x i32) (param $y i32) (result i32)
  (local $2 i32)
  (local $3 i32)
  (local $4 i32)
  (local $5 i32)
  (local $6 i32)
  (block
   (block $out
    (local.set $x
     (i32.const 1)
    )
    (nop)
    (br_if $out
     (local.get $y)
    )
    (local.set $x
     (i32.const 2)
    )
   )
   (nop)
   (nop)
   (nop)
  )
  (local.set $6
   (i32.add
    (local.get $x)
    (i32.const 3)
   )
  )
  (return
   (local.get $6)
  )
 )
 (func $zero_init-phi-bad_type (result f64)
  (local $x f64)
  (local $1 f64)
  (local $2 f64)
  (local $3 f64)
  (block
   (if
    (i32.const 0)
    (local.set $x
     (f64.const 1)
    )
   )
   (nop)
   (nop)
  )
  (nop)
  (return
   (local.get $x)
  )
 )
 (func $phi-bad-type (result f64)
  (local $0 f64)
  (local $1 f64)
  (local $2 f64)
  (local $3 f64)
  (block $label$1
   (if
    (i32.const 0)
    (local.set $0
     (f64.const 0)
    )
    (local.set $0
     (f64.const 1)
    )
   )
   (nop)
   (nop)
  )
  (nop)
  (return
   (local.get $0)
  )
 )
 (func $phi-one-side-i1 (param $x i32) (param $y i32) (result i32)
  (local $i i32)
  (local $3 i32)
  (local $4 i32)
  (local $5 i32)
  (local $6 i32)
  (local $7 i32)
  (local $8 i32)
  (local $9 i32)
  (local $10 i32)
  (local $11 i32)
  (local $12 i32)
  (local $13 i32)
  (local $14 i32)
  (block
   (block
    (nop)
    (nop)
    (local.set $5
     (i32.le_s
      (local.get $x)
      (local.get $y)
     )
    )
    (if
     (local.get $5)
     (block
      (nop)
      (nop)
      (nop)
      (local.set $i
       (i32.eq
        (local.get $x)
        (local.get $y)
       )
      )
     )
     (block
      (nop)
      (nop)
      (nop)
      (local.set $i
       (i32.add
        (local.get $x)
        (local.get $y)
       )
      )
     )
    )
   )
   (nop)
   (nop)
  )
  (nop)
  (return
   (local.get $i)
  )
 )
 (func $call (result i32)
  (local $0 i32)
  (local $1 i32)
  (local $2 i32)
  (local $3 i32)
  (local $4 i32)
  (local $5 i32)
  (local.set $0
   (call $call)
  )
  (local.set $1
   (call $call)
  )
  (local.set $2
   (i32.add
    (local.get $0)
    (local.get $1)
   )
  )
  (local.set $3
   (call $call)
  )
  (local.set $4
   (i32.add
    (i32.const 10)
    (local.get $3)
   )
  )
  (local.set $5
   (i32.mul
    (local.get $2)
    (local.get $4)
   )
  )
  (return
   (local.get $5)
  )
  (unreachable)
 )
 (func $in-unreachable-1 (param $x i32) (param $y i32) (result i32)
  (local $2 i32)
  (local $3 i32)
  (local $4 i32)
  (local $5 i32)
  (local $6 i32)
  (block
   (block
    (nop)
    (if
     (local.get $x)
     (block
      (block $block
       (local.set $x
        (i32.const 1)
       )
       (nop)
       (return
        (local.get $x)
       )
       (unreachable)
      )
      (unreachable)
     )
     (local.set $x
      (i32.const 2)
     )
    )
   )
   (nop)
   (return
    (local.get $x)
   )
   (unreachable)
  )
  (nop)
  (return
   (local.get $5)
  )
 )
 (func $in-unreachable-2 (param $x i32) (param $y i32) (result i32)
  (local $2 i32)
  (local $3 i32)
  (local $4 i32)
  (local $5 i32)
  (block
   (block
    (nop)
    (if
     (local.get $x)
     (block
      (block $block
       (local.set $x
        (i32.const 1)
       )
       (unreachable)
       (unreachable)
      )
      (unreachable)
     )
     (local.set $x
      (i32.const 2)
     )
    )
   )
   (nop)
   (return
    (local.get $x)
   )
   (unreachable)
  )
  (nop)
  (return
   (local.get $4)
  )
 )
 (func $in-unreachable-3 (param $x i32) (param $y i32) (result i32)
  (local $2 i32)
  (local $3 i32)
  (local $4 i32)
  (local $5 i32)
  (local $6 i32)
  (block
   (block $out
    (block
     (nop)
     (if
      (local.get $x)
      (block
       (block $block
        (local.set $x
         (i32.const 1)
        )
        (br $out)
        (unreachable)
       )
       (unreachable)
      )
      (local.set $x
       (i32.const 2)
      )
     )
    )
    (nop)
    (return
     (local.get $x)
    )
    (unreachable)
   )
   (nop)
   (return
    (local.get $x)
   )
   (unreachable)
  )
  (nop)
  (return
   (local.get $5)
  )
 )
 (func $in-unreachable-4 (param $x i32) (param $y i32) (result i32)
  (local $2 i32)
  (local $3 i32)
  (local $4 i32)
  (local $5 i32)
  (local $6 i32)
  (block
   (block $out
    (block
     (nop)
     (if
      (local.get $x)
      (block
       (block $block
        (local.set $x
         (i32.const 1)
        )
        (br_table $out $out $out
         (i32.const 1)
        )
        (unreachable)
       )
       (unreachable)
      )
      (local.set $x
       (i32.const 2)
      )
     )
    )
    (nop)
    (return
     (local.get $x)
    )
    (unreachable)
   )
   (nop)
   (return
    (local.get $x)
   )
   (unreachable)
  )
  (nop)
  (return
   (local.get $5)
  )
 )
 (func $in-unreachable-br_if (param $x i32) (param $y i32) (result i32)
  (local $2 i32)
  (local $3 i32)
  (local $4 i32)
  (local $5 i32)
  (local $6 i32)
  (local $7 i32)
  (block
   (block $out
    (block
     (nop)
     (if
      (local.get $x)
      (block $block
       (local.set $x
        (i32.const 1)
       )
       (nop)
       (br_if $out
        (local.get $x)
       )
      )
      (local.set $x
       (i32.const 2)
      )
     )
    )
    (nop)
    (return
     (local.get $x)
    )
    (unreachable)
   )
   (nop)
   (return
    (local.get $x)
   )
   (unreachable)
  )
  (nop)
  (return
   (local.get $6)
  )
 )
 (func $in-unreachable-big (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32)
  (local $4 i32)
  (local $5 i32)
  (local $6 i32)
  (local $7 i32)
  (block $label$1
   (block $label$2
    (block $label$3
     (block
      (nop)
      (if
       (local.get $2)
       (block
        (block
         (nop)
         (if
          (local.get $0)
          (block
           (block $block
            (local.set $1
             (i32.const -8531)
            )
            (br $label$3)
            (unreachable)
           )
           (unreachable)
          )
          (block
           (block $block3
            (local.set $1
             (i32.const -8531)
            )
            (br $label$1)
            (unreachable)
           )
           (unreachable)
          )
         )
        )
        (unreachable)
       )
      )
     )
     (br $label$2)
     (unreachable)
    )
    (local.set $6
     (i32.load
      (i32.const 0)
     )
    )
    (drop
     (local.get $6)
    )
    (br $label$1)
    (unreachable)
   )
   (nop)
   (i32.store16
    (i32.const 1)
    (local.get $1)
   )
   (unreachable)
   (unreachable)
  )
  (i32.store16
   (i32.const 0)
   (i32.const -8531)
  )
 )
 (func $in-unreachable-operations (param $x i32) (param $y i32) (result i32)
  (local $2 i32)
  (local $3 i32)
  (block $block
   (unreachable)
   (unreachable)
   (block
    (nop)
    (if
     (local.get $x)
     (local.set $x
      (i32.const 1)
     )
     (local.set $x
      (i32.const 2)
     )
    )
   )
   (nop)
   (return
    (local.get $x)
   )
   (unreachable)
  )
  (unreachable)
 )
 (func $merge-with-one-less (param $var$0 i32) (result i32)
  (local $1 i32)
  (local $2 i32)
  (local $3 i32)
  (local $4 i32)
  (local $5 i32)
  (local $6 i32)
  (block
   (block $label$1
    (block $label$2
     (block $label$3
      (block $label$4
       (block $label$5
        (local.set $1
         (i32.load
          (i32.const 1)
         )
        )
        (br_table $label$5 $label$4 $label$3 $label$2
         (local.get $1)
        )
        (unreachable)
       )
       (unreachable)
       (unreachable)
      )
      (br $label$1)
      (unreachable)
     )
     (local.set $var$0
      (i32.const 8)
     )
     (nop)
     (local.set $3
      (i32.load
       (local.get $var$0)
      )
     )
     (f64.store
      (local.get $3)
      (f64.const 0)
     )
     (br $label$1)
     (unreachable)
    )
    (unreachable)
    (unreachable)
   )
   (nop)
   (i32.store
    (local.get $var$0)
    (i32.const 16)
   )
   (nop)
  )
  (local.set $6
   (i32.const 1)
  )
  (return
   (local.get $6)
  )
 )
 (func $deep (param $x i32) (result i32)
  (local $1 i32)
  (local $2 i32)
  (local $3 i32)
  (local $4 i32)
  (local $5 i32)
  (local $6 i32)
  (local $7 i32)
  (local $8 i32)
  (local $9 i32)
  (local $10 i32)
  (local $11 i32)
  (local $12 i32)
  (local $13 i32)
  (local $14 i32)
  (local $15 i32)
  (local $16 i32)
  (local $17 i32)
  (local $18 i32)
  (local $19 i32)
  (local $20 i32)
  (local $21 i32)
  (local $22 i32)
  (local $23 i32)
  (local $24 i32)
  (local $25 i32)
  (local $26 i32)
  (local $27 i32)
  (local $28 i32)
  (local $29 i32)
  (local $30 i32)
  (local $31 i32)
  (local $32 i32)
  (local $33 i32)
  (local $34 i32)
  (local $35 i32)
  (local $36 i32)
  (local $37 i32)
  (local $38 i32)
  (local $39 i32)
  (local $40 i32)
  (local $41 i32)
  (local $42 i32)
  (local $43 i32)
  (local $44 i32)
  (local $45 i32)
  (local $46 i32)
  (local $47 i32)
  (local $48 i32)
  (local $49 i32)
  (local $50 i32)
  (local $51 i32)
  (local $52 i32)
  (local $53 i32)
  (local $54 i32)
  (local $55 i32)
  (block
   (nop)
   (nop)
   (local.set $x
    (i32.xor
     (local.get $x)
     (i32.const 1234)
    )
   )
   (nop)
   (nop)
   (local.set $x
    (i32.mul
     (local.get $x)
     (i32.const 1234)
    )
   )
   (nop)
   (nop)
   (local.set $x
    (i32.xor
     (local.get $x)
     (i32.const 1234)
    )
   )
   (nop)
   (nop)
   (local.set $x
    (i32.mul
     (local.get $x)
     (i32.const 1234)
    )
   )
   (nop)
   (nop)
   (local.set $x
    (i32.xor
     (local.get $x)
     (i32.const 1234)
    )
   )
   (nop)
   (nop)
   (local.set $x
    (i32.mul
     (local.get $x)
     (i32.const 1234)
    )
   )
   (nop)
   (nop)
   (local.set $x
    (i32.xor
     (local.get $x)
     (i32.const 1234)
    )
   )
   (nop)
   (nop)
   (local.set $x
    (i32.mul
     (local.get $x)
     (i32.const 1234)
    )
   )
   (nop)
   (nop)
   (local.set $x
    (i32.xor
     (local.get $x)
     (i32.const 1234)
    )
   )
   (nop)
   (nop)
   (local.set $x
    (i32.mul
     (local.get $x)
     (i32.const 1234)
    )
   )
   (nop)
   (nop)
   (local.set $x
    (i32.xor
     (local.get $x)
     (i32.const 1234)
    )
   )
   (nop)
   (nop)
   (local.set $x
    (i32.mul
     (local.get $x)
     (i32.const 1234)
    )
   )
   (nop)
   (nop)
   (local.set $x
    (i32.xor
     (local.get $x)
     (i32.const 1234)
    )
   )
   (nop)
   (nop)
   (local.set $x
    (i32.mul
     (local.get $x)
     (i32.const 1234)
    )
   )
   (nop)
   (nop)
   (local.set $x
    (i32.xor
     (local.get $x)
     (i32.const 1234)
    )
   )
   (nop)
   (nop)
   (local.set $x
    (i32.mul
     (local.get $x)
     (i32.const 1234)
    )
   )
   (nop)
   (nop)
   (local.set $x
    (i32.xor
     (local.get $x)
     (i32.const 1234)
    )
   )
   (nop)
   (nop)
   (local.set $x
    (i32.mul
     (local.get $x)
     (i32.const 1234)
    )
   )
   (nop)
   (nop)
   (local.set $x
    (i32.xor
     (local.get $x)
     (i32.const 1234)
    )
   )
   (nop)
   (nop)
   (local.set $x
    (i32.mul
     (local.get $x)
     (i32.const 1234)
    )
   )
   (nop)
   (nop)
   (local.set $x
    (i32.xor
     (local.get $x)
     (i32.const 1234)
    )
   )
   (nop)
   (nop)
   (local.set $x
    (i32.mul
     (local.get $x)
     (i32.const 1234)
    )
   )
   (nop)
   (nop)
   (local.set $x
    (i32.xor
     (local.get $x)
     (i32.const 1234)
    )
   )
   (nop)
   (nop)
   (local.set $x
    (i32.mul
     (local.get $x)
     (i32.const 1234)
    )
   )
   (nop)
   (nop)
   (local.set $x
    (i32.xor
     (local.get $x)
     (i32.const 1234)
    )
   )
   (nop)
   (nop)
   (local.set $x
    (i32.mul
     (local.get $x)
     (i32.const 1234)
    )
   )
   (nop)
   (nop)
  )
  (nop)
  (return
   (local.get $x)
  )
 )
 (func $two-pcs (param $x i64) (param $y i64) (param $t i64) (result i64)
  (local $3 i64)
  (local $4 i64)
  (local $5 i32)
  (local $6 i64)
  (local $7 i32)
  (local $8 i64)
  (local $9 i64)
  (local $10 i64)
  (local $11 i64)
  (local $12 i64)
  (local $13 i64)
  (local $14 i64)
  (local $15 i32)
  (local $16 i64)
  (local $17 i64)
  (local $18 i64)
  (local $19 i64)
  (local $20 i64)
  (local $21 i64)
  (local $22 i64)
  (local $23 i64)
  (local $24 i64)
  (block
   (block
    (nop)
    (nop)
    (local.set $5
     (i64.lt_s
      (local.get $x)
      (local.get $y)
     )
    )
    (if
     (local.get $5)
     (block
      (nop)
      (local.set $7
       (i64.eqz
        (local.get $x)
       )
      )
      (if
       (local.get $7)
       (block
        (nop)
        (nop)
        (nop)
        (local.set $t
         (i64.add
          (local.get $x)
          (local.get $y)
         )
        )
       )
       (block
        (nop)
        (nop)
        (nop)
        (local.set $t
         (i64.sub
          (local.get $x)
          (local.get $y)
         )
        )
       )
      )
     )
     (block
      (nop)
      (local.set $15
       (i64.eqz
        (local.get $y)
       )
      )
      (if
       (local.get $15)
       (block
        (nop)
        (nop)
        (nop)
        (local.set $t
         (i64.mul
          (local.get $x)
          (local.get $y)
         )
        )
       )
       (block
        (nop)
        (nop)
        (nop)
        (local.set $t
         (i64.div_s
          (local.get $x)
          (local.get $y)
         )
        )
       )
      )
     )
    )
   )
   (nop)
   (return
    (local.get $t)
   )
   (unreachable)
  )
  (nop)
  (return
   (local.get $23)
  )
 )
 (func $loop-1 (param $x i32) (param $y i32) (result i32)
  (local $2 i32)
  (local $3 i32)
  (local $4 i32)
  (local $5 i32)
  (local $6 i32)
  (block
   (local.set $x
    (i32.const 1)
   )
   (local.set $y
    (i32.const 2)
   )
   (loop $loopy
    (nop)
   )
   (nop)
   (nop)
   (local.set $4
    (i32.add
     (local.get $x)
     (local.get $y)
    )
   )
   (return
    (local.get $4)
   )
   (unreachable)
  )
  (nop)
  (return
   (local.get $5)
  )
 )
 (func $loop-2 (param $x i32) (param $y i32) (result i32)
  (local $2 i32)
  (local $3 i32)
  (local $4 i32)
  (local $5 i32)
  (local $6 i32)
  (local $7 i32)
  (local $8 i32)
  (local $9 i32)
  (local $10 i32)
  (block
   (local.set $x
    (i32.const 1)
   )
   (local.set $y
    (i32.const 2)
   )
   (loop $loopy
    (nop)
    (nop)
    (local.set $x
     (i32.add
      (local.get $x)
      (i32.const 3)
     )
    )
    (nop)
    (nop)
    (local.set $y
     (i32.add
      (local.get $y)
      (i32.const 4)
     )
    )
   )
   (nop)
   (nop)
   (local.set $8
    (i32.add
     (local.get $x)
     (local.get $y)
    )
   )
   (return
    (local.get $8)
   )
   (unreachable)
  )
  (nop)
  (return
   (local.get $9)
  )
 )
 (func $loop-3 (param $x i32) (param $y i32) (result i32)
  (local $2 i32)
  (local $3 i32)
  (local $4 i32)
  (local $5 i32)
  (local $6 i32)
  (local $7 i32)
  (local $8 i32)
  (local $9 i32)
  (local $10 i32)
  (local $11 i32)
  (block
   (local.set $x
    (i32.const 1)
   )
   (local.set $y
    (i32.const 2)
   )
   (loop $loopy
    (nop)
    (nop)
    (local.set $x
     (i32.add
      (local.get $x)
      (i32.const 3)
     )
    )
    (nop)
    (nop)
    (local.set $y
     (i32.add
      (local.get $y)
      (i32.const 4)
     )
    )
    (nop)
    (br_if $loopy
     (local.get $y)
    )
   )
   (nop)
   (nop)
   (local.set $9
    (i32.add
     (local.get $x)
     (local.get $y)
    )
   )
   (return
    (local.get $9)
   )
   (unreachable)
  )
  (nop)
  (return
   (local.get $10)
  )
 )
 (func $loop-4 (param $x i32) (param $y i32) (result i32)
  (local $2 i32)
  (local $3 i32)
  (local $4 i32)
  (local $5 i32)
  (local $6 i32)
  (local $7 i32)
  (local $8 i32)
  (local $9 i32)
  (block
   (local.set $x
    (i32.const 1)
   )
   (local.set $y
    (i32.const 2)
   )
   (loop $loopy
    (nop)
    (nop)
    (local.set $x
     (i32.add
      (local.get $x)
      (i32.const 3)
     )
    )
    (nop)
    (br_if $loopy
     (local.get $y)
    )
   )
   (nop)
   (nop)
   (local.set $7
    (i32.add
     (local.get $x)
     (local.get $y)
    )
   )
   (return
    (local.get $7)
   )
   (unreachable)
  )
  (nop)
  (return
   (local.get $8)
  )
 )
 (func $loop-5 (param $x i32) (param $y i32) (result i32)
  (local $2 i32)
  (local $3 i32)
  (local $4 i32)
  (local $5 i32)
  (local $6 i32)
  (local $7 i32)
  (local $8 i32)
  (local $9 i32)
  (block
   (local.set $x
    (i32.const 1)
   )
   (local.set $y
    (i32.const 2)
   )
   (loop $loopy
    (nop)
    (nop)
    (local.set $x
     (i32.add
      (local.get $x)
      (i32.const 3)
     )
    )
    (local.set $y
     (i32.const 2)
    )
    (nop)
    (br_if $loopy
     (local.get $y)
    )
   )
   (nop)
   (nop)
   (local.set $7
    (i32.add
     (local.get $x)
     (local.get $y)
    )
   )
   (return
    (local.get $7)
   )
   (unreachable)
  )
  (nop)
  (return
   (local.get $8)
  )
 )
 (func $loop-6 (param $x i32) (param $y i32) (result i32)
  (local $2 i32)
  (local $3 i32)
  (local $4 i32)
  (local $5 i32)
  (local $6 i32)
  (local $7 i32)
  (local $8 i32)
  (local $9 i32)
  (local $10 i32)
  (block
   (local.set $x
    (i32.const 1)
   )
   (local.set $y
    (i32.const 2)
   )
   (loop $loopy
    (nop)
    (nop)
    (local.set $x
     (i32.add
      (local.get $x)
      (i32.const 3)
     )
    )
    (nop)
    (nop)
    (nop)
    (br_if $loopy
     (local.get $y)
    )
   )
   (nop)
   (nop)
   (local.set $8
    (i32.add
     (local.get $x)
     (local.get $y)
    )
   )
   (return
    (local.get $8)
   )
   (unreachable)
  )
  (nop)
  (return
   (local.get $9)
  )
 )
 (func $loop-7 (param $x i32) (param $y i32) (result i32)
  (local $2 i32)
  (local $3 i32)
  (local $4 i32)
  (local $5 i32)
  (local $6 i32)
  (local $7 i32)
  (local $8 i32)
  (local $9 i32)
  (block
   (local.set $x
    (i32.const 1)
   )
   (local.set $y
    (i32.const 2)
   )
   (loop $loopy
    (nop)
    (nop)
    (local.set $x
     (i32.add
      (local.get $x)
      (i32.const 3)
     )
    )
    (local.set $y
     (i32.const 5)
    )
    (nop)
    (br_if $loopy
     (local.get $y)
    )
   )
   (nop)
   (nop)
   (local.set $7
    (i32.add
     (local.get $x)
     (local.get $y)
    )
   )
   (return
    (local.get $7)
   )
   (unreachable)
  )
  (nop)
  (return
   (local.get $8)
  )
 )
 (func $loop-8 (param $x i32) (param $y i32) (result i32)
  (local $z i32)
  (local $w i32)
  (local $4 i32)
  (local $5 i32)
  (local $6 i32)
  (local $7 i32)
  (local $8 i32)
  (local $9 i32)
  (local $10 i32)
  (local $11 i32)
  (local $12 i32)
  (local $13 i32)
  (local $14 i32)
  (local $15 i32)
  (block
   (local.set $x
    (i32.const 1)
   )
   (local.set $y
    (i32.const 2)
   )
   (loop $loopy
    (nop)
    (local.set $z
     (local.get $x)
    )
    (nop)
    (local.set $w
     (local.get $y)
    )
    (local.set $x
     (i32.const 1)
    )
    (local.set $y
     (i32.const 4)
    )
    (nop)
    (br_if $loopy
     (local.get $y)
    )
   )
   (nop)
   (nop)
   (local.set $9
    (i32.add
     (local.get $x)
     (local.get $y)
    )
   )
   (nop)
   (nop)
   (local.set $12
    (i32.sub
     (local.get $z)
     (local.get $w)
    )
   )
   (local.set $13
    (i32.mul
     (local.get $9)
     (local.get $12)
    )
   )
   (return
    (local.get $13)
   )
   (unreachable)
  )
  (nop)
  (return
   (local.get $14)
  )
 )
 (func $loop-9 (param $x i32) (param $y i32) (result i32)
  (local $t i32)
  (local $3 i32)
  (local $4 i32)
  (local $5 i32)
  (local $6 i32)
  (local $7 i32)
  (local $8 i32)
  (local $9 i32)
  (local $10 i32)
  (local $11 i32)
  (block
   (local.set $x
    (i32.const 1)
   )
   (local.set $y
    (i32.const 2)
   )
   (loop $loopy
    (nop)
    (local.set $t
     (local.get $x)
    )
    (nop)
    (local.set $x
     (local.get $y)
    )
    (nop)
    (local.set $y
     (local.get $t)
    )
    (nop)
    (br_if $loopy
     (local.get $y)
    )
   )
   (nop)
   (nop)
   (local.set $9
    (i32.add
     (local.get $x)
     (local.get $y)
    )
   )
   (return
    (local.get $9)
   )
   (unreachable)
  )
  (nop)
  (return
   (local.get $10)
  )
 )
 (func $loop-10 (param $x i32) (param $y i32) (result i32)
  (local $t i32)
  (local $3 i32)
  (local $4 i32)
  (local $5 i32)
  (local $6 i32)
  (local $7 i32)
  (local $8 i32)
  (local $9 i32)
  (local $10 i32)
  (local $11 i32)
  (block
   (local.set $x
    (i32.const 1)
   )
   (local.set $y
    (i32.const 1)
   )
   (loop $loopy
    (nop)
    (local.set $t
     (local.get $x)
    )
    (nop)
    (local.set $x
     (local.get $y)
    )
    (nop)
    (local.set $y
     (local.get $t)
    )
    (nop)
    (br_if $loopy
     (local.get $y)
    )
   )
   (nop)
   (nop)
   (local.set $9
    (i32.add
     (local.get $x)
     (local.get $y)
    )
   )
   (return
    (local.get $9)
   )
   (unreachable)
  )
  (nop)
  (return
   (local.get $10)
  )
 )
 (func $loop-multicond-1 (param $x i32) (param $y i32) (param $z i32) (result i32)
  (local $t i32)
  (local $4 i32)
  (local $5 i32)
  (local $6 i32)
  (local $7 i32)
  (local $8 i32)
  (local $9 i32)
  (local $10 i32)
  (local $11 i32)
  (block
   (local.set $x
    (i32.const 1)
   )
   (local.set $y
    (i32.const 2)
   )
   (local.set $z
    (i32.const 3)
   )
   (loop $loopy
    (local.set $x
     (i32.const 4)
    )
    (nop)
    (br_if $loopy
     (local.get $t)
    )
    (local.set $y
     (i32.const 5)
    )
    (nop)
    (br_if $loopy
     (local.get $t)
    )
    (local.set $z
     (i32.const 6)
    )
   )
   (nop)
   (nop)
   (nop)
   (local.set $9
    (select
     (local.get $x)
     (local.get $y)
     (local.get $z)
    )
   )
   (return
    (local.get $9)
   )
   (unreachable)
  )
  (nop)
  (return
   (local.get $10)
  )
 )
 (func $loop-multicond-2 (param $x i32) (param $y i32) (param $z i32) (result i32)
  (local $t i32)
  (local $4 i32)
  (local $5 i32)
  (local $6 i32)
  (local $7 i32)
  (local $8 i32)
  (local $9 i32)
  (local $10 i32)
  (local $11 i32)
  (local $12 i32)
  (local $13 i32)
  (local $14 i32)
  (local $15 i32)
  (local $16 i32)
  (local $17 i32)
  (block
   (local.set $x
    (i32.const 1)
   )
   (local.set $y
    (i32.const 2)
   )
   (local.set $z
    (i32.const 3)
   )
   (loop $loopy
    (nop)
    (nop)
    (local.set $x
     (i32.add
      (local.get $x)
      (i32.const 4)
     )
    )
    (nop)
    (br_if $loopy
     (local.get $t)
    )
    (nop)
    (nop)
    (local.set $y
     (i32.add
      (local.get $y)
      (i32.const 5)
     )
    )
    (nop)
    (br_if $loopy
     (local.get $t)
    )
    (nop)
    (nop)
    (local.set $z
     (i32.add
      (local.get $z)
      (i32.const 6)
     )
    )
   )
   (nop)
   (nop)
   (nop)
   (local.set $15
    (select
     (local.get $x)
     (local.get $y)
     (local.get $z)
    )
   )
   (return
    (local.get $15)
   )
   (unreachable)
  )
  (nop)
  (return
   (local.get $16)
  )
 )
 (func $loop-block-1 (param $x i32) (param $y i32) (param $z i32) (result i32)
  (local $t i32)
  (local $4 i32)
  (local $5 i32)
  (local $6 i32)
  (local $7 i32)
  (local $8 i32)
  (local $9 i32)
  (local $10 i32)
  (local $11 i32)
  (local $12 i32)
  (local $13 i32)
  (local $14 i32)
  (local $15 i32)
  (local $16 i32)
  (local $17 i32)
  (block
   (local.set $x
    (i32.const 1)
   )
   (local.set $y
    (i32.const 2)
   )
   (local.set $z
    (i32.const 3)
   )
   (loop $loopy
    (block $out
     (nop)
     (nop)
     (local.set $x
      (i32.add
       (local.get $x)
       (i32.const 4)
      )
     )
     (nop)
     (br_if $out
      (local.get $t)
     )
     (nop)
     (nop)
     (local.set $y
      (i32.add
       (local.get $y)
       (i32.const 5)
      )
     )
     (nop)
     (br_if $out
      (local.get $t)
     )
     (nop)
     (nop)
     (local.set $z
      (i32.add
       (local.get $z)
       (i32.const 6)
      )
     )
     (br $loopy)
     (unreachable)
    )
   )
   (nop)
   (nop)
   (nop)
   (local.set $15
    (select
     (local.get $x)
     (local.get $y)
     (local.get $z)
    )
   )
   (return
    (local.get $15)
   )
   (unreachable)
  )
  (nop)
  (return
   (local.get $16)
  )
 )
 (func $loop-block-2 (param $x i32) (param $y i32) (param $z i32) (result i32)
  (local $t i32)
  (local $4 i32)
  (local $5 i32)
  (local $6 i32)
  (local $7 i32)
  (local $8 i32)
  (local $9 i32)
  (local $10 i32)
  (local $11 i32)
  (local $12 i32)
  (local $13 i32)
  (local $14 i32)
  (local $15 i32)
  (local $16 i32)
  (local $17 i32)
  (block
   (local.set $x
    (i32.const 1)
   )
   (local.set $y
    (i32.const 2)
   )
   (local.set $z
    (i32.const 3)
   )
   (block $out
    (loop $loopy
     (block
      (nop)
      (nop)
      (local.set $x
       (i32.add
        (local.get $x)
        (i32.const 4)
       )
      )
      (nop)
      (br_if $out
       (local.get $t)
      )
      (nop)
      (nop)
      (local.set $y
       (i32.add
        (local.get $y)
        (i32.const 5)
       )
      )
      (nop)
      (br_if $out
       (local.get $t)
      )
      (nop)
      (nop)
      (local.set $z
       (i32.add
        (local.get $z)
        (i32.const 6)
       )
      )
      (br $loopy)
      (unreachable)
     )
     (unreachable)
    )
    (unreachable)
   )
   (nop)
   (nop)
   (nop)
   (local.set $15
    (select
     (local.get $x)
     (local.get $y)
     (local.get $z)
    )
   )
   (return
    (local.get $15)
   )
   (unreachable)
  )
  (nop)
  (return
   (local.get $16)
  )
 )
 (func $bad-phi-type (param $var$0 i64) (param $var$1 i64) (param $var$2 i32) (param $var$3 f32)
  (local $4 i32)
  (local $5 i32)
  (local $6 i32)
  (local $7 i32)
  (local $8 f64)
  (local $9 f64)
  (local $10 f64)
  (local $11 f64)
  (nop)
  (if
   (local.get $var$2)
   (block
    (loop $label$2
     (block
      (block
       (block $label$3
        (if
         (i32.const 0)
         (block
          (unreachable)
          (unreachable)
         )
        )
        (nop)
        (nop)
       )
       (local.set $6
        (i32.const 0)
       )
       (if
        (local.get $6)
        (block
         (unreachable)
         (unreachable)
        )
       )
      )
      (nop)
      (br_if $label$2
       (local.get $var$2)
      )
      (nop)
     )
     (nop)
     (local.set $10
      (f64.const 0)
     )
    )
    (nop)
    (drop
     (local.get $10)
    )
   )
  )
 )
 (func $loop-unreachable
  (local $var$0 i32)
  (local $var$1 f64)
  (local $2 i32)
  (local $3 i32)
  (local $4 i32)
  (local $5 i32)
  (local $6 i32)
  (local $7 i32)
  (local $8 i32)
  (local $9 i32)
  (local $10 i32)
  (local $11 f64)
  (local $12 f64)
  (local $13 f64)
  (loop $label$1
   (block
    (block $label$2
     (block $label$3
      (block $label$4
       (if
        (i32.const 1337)
        (block
         (unreachable)
         (unreachable)
        )
       )
       (nop)
       (nop)
      )
      (nop)
      (nop)
      (loop $label$6
       (block $label$7
        (nop)
        (local.set $6
         (local.get $var$0)
        )
        (br_if $label$7
         (i32.const 65535)
        )
        (nop)
        (drop
         (local.get $6)
        )
        (nop)
        (local.set $6
         (local.get $var$0)
        )
        (br_if $label$7
         (i32.const 0)
        )
        (nop)
        (drop
         (local.get $6)
        )
        (unreachable)
        (unreachable)
       )
       (nop)
       (br_if $label$6
        (local.get $6)
       )
      )
     )
     (nop)
     (nop)
    )
    (nop)
    (nop)
    (br $label$1)
    (unreachable)
   )
   (unreachable)
  )
  (unreachable)
 )
 (func $phi-value-turns-bad (result f64)
  (local $var$0 i32)
  (local $var$1 i32)
  (local $var$2 f32)
  (local $3 i32)
  (local $4 i32)
  (local $5 i32)
  (local $6 i32)
  (local $7 i32)
  (local $8 i32)
  (local $9 i32)
  (local $10 i32)
  (local $11 i32)
  (local $12 f32)
  (local $13 f32)
  (local $14 f32)
  (local $15 f32)
  (local $16 f64)
  (local $17 f64)
  (block
   (block
    (nop)
    (local.set $var$0
     (i32.atomic.rmw16.sub_u offset=22
      (i32.const 0)
      (i32.const 0)
     )
    )
    (nop)
    (if
     (local.get $var$0)
     (block
      (unreachable)
      (unreachable)
     )
     (block
      (block $block
       (block
        (loop $label$3
         (block $label$4
          (nop)
          (local.set $6
           (local.get $var$0)
          )
          (br_if $label$4
           (i32.const 1)
          )
          (nop)
          (nop)
          (local.set $6
           (i32.clz
            (local.get $6)
           )
          )
         )
         (nop)
         (nop)
        )
        (nop)
        (if
         (local.get $6)
         (nop)
        )
       )
       (nop)
      )
      (nop)
      (local.set $14
       (f32.const 1)
      )
     )
    )
   )
   (nop)
   (nop)
   (unreachable)
   (unreachable)
  )
  (nop)
  (return
   (local.get $16)
  )
 )
 (func $multi-use (param $x i32) (result i32)
  (local $temp i32)
  (local $2 i32)
  (local $3 i32)
  (local $4 i32)
  (local $5 i32)
  (local $6 i32)
  (local $7 i32)
  (local $8 i32)
  (block
   (nop)
   (nop)
   (local.set $temp
    (i32.add
     (local.get $x)
     (i32.const 1)
    )
   )
   (nop)
   (nop)
   (nop)
   (nop)
  )
  (local.set $8
   (i32.add
    (local.get $temp)
    (local.get $temp)
   )
  )
  (return
   (local.get $8)
  )
 )
 (func $multi-use-2 (param $x i32) (result i32)
  (local $temp i32)
  (local $2 i32)
  (local $3 i32)
  (local $4 i32)
  (local $5 i32)
  (local $6 i32)
  (local $7 i32)
  (local $8 i32)
  (local $9 i32)
  (local $10 i32)
  (block
   (nop)
   (nop)
   (local.set $temp
    (i32.add
     (local.get $x)
     (i32.const 1)
    )
   )
   (nop)
   (nop)
   (local.set $x
    (i32.mul
     (local.get $temp)
     (i32.const 2)
    )
   )
   (nop)
   (nop)
   (nop)
   (nop)
  )
  (local.set $10
   (i32.sub
    (local.get $x)
    (local.get $temp)
   )
  )
  (return
   (local.get $10)
  )
 )
 (func $many-single-uses-with-param (param $x i32) (result i32)
  (local $1 i32)
  (local $2 i32)
  (local $3 i32)
  (local $4 i32)
  (local $5 i32)
  (local $6 i32)
  (local $7 i32)
  (nop)
  (local.set $2
   (i32.mul
    (i32.const 10)
    (local.get $x)
   )
  )
  (nop)
  (local.set $4
   (i32.ctz
    (local.get $x)
   )
  )
  (local.set $5
   (i32.sub
    (local.get $4)
    (i32.const 20)
   )
  )
  (local.set $6
   (i32.add
    (local.get $2)
    (local.get $5)
   )
  )
  (local.set $7
   (i32.eqz
    (local.get $6)
   )
  )
  (return
   (local.get $7)
  )
  (unreachable)
 )
 (func $55 (param $var$0 i32)
  (local $var$1 i32)
  (local $var$2 i32)
  (local $var$3 i32)
  (local $4 i32)
  (local $5 i32)
  (local $6 i32)
  (local $7 i32)
  (local $8 i32)
  (local $9 i32)
  (local $10 i32)
  (local $11 i32)
  (local $12 i32)
  (local $13 i32)
  (nop)
  (nop)
  (local.set $var$0
   (i32.add
    (local.get $var$0)
    (i32.const -7)
   )
  )
  (nop)
  (if
   (local.get $var$0)
   (block $label$2
    (block $label$3
     (nop)
     (local.set $var$1
      (local.get $var$0)
     )
     (nop)
     (local.set $8
      (i32.const 12)
     )
     (br_if $label$3
      (local.get $8)
     )
     (unreachable)
     (unreachable)
    )
    (nop)
    (local.set $10
     (i32.eqz
      (local.get $var$1)
     )
    )
    (br_if $label$2
     (local.get $10)
    )
    (block
     (local.set $11
      (i32.load
       (i32.const 0)
      )
     )
     (nop)
     (local.set $13
      (i32.ne
       (local.get $11)
       (local.get $var$0)
      )
     )
     (if
      (local.get $13)
      (block
       (unreachable)
       (unreachable)
      )
     )
    )
    (unreachable)
    (unreachable)
   )
  )
 )
 (func $multiple-uses-to-non-expression (param $x i32)
  (local $temp i32)
  (local $2 i32)
  (local $3 i32)
  (local $4 i32)
  (local $5 i32)
  (local $6 i32)
  (nop)
  (nop)
  (local.set $x
   (i32.add
    (local.get $x)
    (i32.const 10)
   )
  )
  (nop)
  (i32.store
   (i32.const 1)
   (local.get $x)
  )
  (nop)
  (local.set $6
   (i32.add
    (local.get $x)
    (i32.const 20)
   )
  )
  (i32.store
   (i32.const 2)
   (local.get $6)
  )
 )
 (func $nested-phi-forwarding (param $var$0 i32) (result i32)
  (local $var$1 i32)
  (local $var$2 i32)
  (local $3 i32)
  (local $4 i32)
  (local $5 i32)
  (local $6 i32)
  (local $7 i32)
  (local $8 i32)
  (local $9 i32)
  (block
   (block $label$1
    (block $label$2
     (loop $label$3
      (block $label$4
       (block $label$5
        (block $label$6
         (block $label$7
          (block $label$8
           (nop)
           (br_table $label$2 $label$2 $label$2 $label$2 $label$2 $label$2 $label$2 $label$2 $label$2 $label$2 $label$2 $label$2 $label$2 $label$2 $label$2 $label$2 $label$2 $label$2 $label$2 $label$2 $label$2 $label$2 $label$2 $label$2 $label$2 $label$2 $label$2 $label$2 $label$2 $label$2 $label$2 $label$8 $label$2 $label$2 $label$2 $label$6 $label$2 $label$2 $label$7 $label$2 $label$2 $label$2 $label$2 $label$2 $label$2 $label$2 $label$2 $label$2 $label$5 $label$4
            (local.get $var$0)
           )
           (unreachable)
          )
          (local.set $var$1
           (i32.const 1)
          )
         )
         (br $label$4)
         (unreachable)
        )
        (unreachable)
        (unreachable)
       )
       (br $label$1)
       (unreachable)
      )
      (local.set $var$2
       (i32.const 1)
      )
      (nop)
      (br_if $label$3
       (local.get $var$2)
      )
     )
    )
    (block $label$9
     (nop)
     (local.set $6
      (i32.or
       (i32.const 1)
       (local.get $var$1)
      )
     )
     (br_if $label$9
      (local.get $6)
     )
    )
    (unreachable)
    (unreachable)
   )
   (nop)
   (i32.store offset=176
    (i32.const 0)
    (local.get $var$2)
   )
   (nop)
  )
  (local.set $9
   (i32.const 0)
  )
  (return
   (local.get $9)
  )
 )
 (func $zext-numGets (param $var$0 i32) (param $var$1 i32)
  (local $2 i32)
  (local $3 i32)
  (local $4 i32)
  (local $5 i32)
  (local $6 i32)
  (local $7 i32)
  (local $8 i32)
  (block $label$1
   (local.set $2
    (i32.load
     (i32.const -8)
    )
   )
   (local.set $3
    (i32.const 1)
   )
   (br_if $label$1
    (local.get $2)
   )
   (nop)
   (drop
    (local.get $3)
   )
   (local.set $5
    (i32.load
     (i32.const -16)
    )
   )
   (nop)
   (local.set $3
    (i32.eqz
     (local.get $5)
    )
   )
  )
  (nop)
  (local.set $8
   (i32.ctz
    (local.get $3)
   )
  )
  (if
   (local.get $8)
   (block
    (unreachable)
    (unreachable)
   )
  )
 )
 (func $zext-numGets-hasAnotherUse (param $var$0 i32) (param $var$1 i32)
  (local $temp i32)
  (local $3 i32)
  (local $4 i32)
  (local $5 i32)
  (local $6 i32)
  (local $7 i32)
  (local $8 i32)
  (local $9 i32)
  (local $10 i32)
  (local $11 i32)
  (block $label$1
   (local.set $3
    (i32.load
     (i32.const -8)
    )
   )
   (local.set $4
    (i32.const 1)
   )
   (br_if $label$1
    (local.get $3)
   )
   (nop)
   (drop
    (local.get $4)
   )
   (local.set $6
    (i32.load
     (i32.const -16)
    )
   )
   (nop)
   (local.set $temp
    (i32.eqz
     (local.get $6)
    )
   )
   (nop)
   (drop
    (local.get $temp)
   )
   (nop)
   (local.set $4
    (local.get $temp)
   )
  )
  (nop)
  (local.set $11
   (i32.ctz
    (local.get $4)
   )
  )
  (if
   (local.get $11)
   (block
    (unreachable)
    (unreachable)
   )
  )
 )
 (func $flipped-needs-right-origin (param $var$0 i32) (result i32)
  (local $var$1 i32)
  (local $2 i32)
  (local $3 i32)
  (local $4 i32)
  (local $5 i32)
  (local $6 i32)
  (local $7 i32)
  (block
   (block $label$1
    (local.set $2
     (i32.load
      (i32.const 1)
     )
    )
    (br_if $label$1
     (local.get $2)
    )
    (local.set $var$1
     (i32.const 2)
    )
   )
   (block
    (nop)
    (local.set $4
     (i32.add
      (local.get $var$1)
      (i32.const 4)
     )
    )
    (local.set $5
     (i32.gt_s
      (i32.const 3)
      (local.get $4)
     )
    )
    (if
     (local.get $5)
     (block
      (unreachable)
      (unreachable)
     )
    )
   )
   (nop)
  )
  (local.set $7
   (i32.const 5)
  )
  (return
   (local.get $7)
  )
 )
 (func $non-expr-nodes-may-have-multiple-uses-too-its-the-ORIGIN (param $var$0 i32) (param $var$1 i32) (param $var$2 i32) (result i32)
  (local $3 i32)
  (local $4 i32)
  (local $5 i32)
  (local $6 i32)
  (local $7 i32)
  (local $8 i32)
  (local $9 i32)
  (block
   (nop)
   (nop)
   (local.set $var$1
    (i32.gt_u
     (local.get $var$1)
     (i32.const 1)
    )
   )
   (nop)
   (i32.store
    (local.get $var$1)
    (i32.const 2)
   )
   (nop)
   (local.set $7
    (i32.sub
     (i32.const 4)
     (local.get $var$1)
    )
   )
   (i32.store offset=8
    (i32.const 3)
    (local.get $7)
   )
   (unreachable)
   (unreachable)
  )
  (nop)
  (return
   (local.get $8)
  )
 )
 (func $loop-of-set-connections (param $var$0 i32) (param $var$1 i32) (param $var$2 i32) (param $var$3 i32) (param $var$4 i32) (result i32)
  (local $5 i32)
  (local $6 i32)
  (local $7 i32)
  (loop $label$1
   (block
    (if
     (i32.const 0)
     (block
      (block $block
       (nop)
       (local.set $var$2
        (i32.add
         (i32.const 0)
         (i32.const 1)
        )
       )
       (br $label$1)
       (unreachable)
      )
      (unreachable)
     )
    )
    (nop)
    (nop)
    (nop)
    (nop)
    (br $label$1)
    (unreachable)
   )
   (unreachable)
  )
  (unreachable)
 )
 (func $conditions-in-conditions (param $var$0 i32) (param $var$1 i32) (param $var$2 i32) (result i32)
  (local $var$3 i32)
  (local $var$4 i32)
  (local $var$5 i32)
  (local $var$6 i32)
  (local $var$7 i32)
  (local $var$8 i32)
  (local $9 i32)
  (local $10 i32)
  (local $11 i32)
  (local $12 i32)
  (local $13 i32)
  (local $14 i32)
  (local $15 i32)
  (local $16 i32)
  (block
   (local.set $var$1
    (i32.const 1)
   )
   (if
    (i32.const 0)
    (loop $label$2
     (block
      (nop)
      (if
       (local.get $var$1)
       (nop)
      )
     )
     (local.set $var$3
      (i32.const 1)
     )
     (nop)
     (nop)
     (local.set $var$1
      (i32.sub
       (i32.const 0)
       (local.get $var$3)
      )
     )
     (br_if $label$2
      (i32.const 0)
     )
    )
   )
   (block
    (nop)
    (if
     (local.get $var$1)
     (local.set $var$3
      (i32.const 1)
     )
    )
   )
   (nop)
   (local.set $14
    (i32.add
     (local.get $var$3)
     (i32.const 16)
    )
   )
   (i32.store
    (i32.const 8)
    (local.get $14)
   )
   (i32.store
    (i32.const 8)
    (i32.const 64)
   )
   (unreachable)
   (unreachable)
  )
  (nop)
  (return
   (local.get $15)
  )
 )
)
