	.text
	.section	.text.incr,"ax",@progbits
	.hidden	incr
	.globl	incr
	.type	incr,@function
incr:                                   # @incr
	.result 	i32
	.local  	i32
# BB#0:                                 # %entry
	i32.const	$push0=, 0
	i32.const	$push5=, 0
	i32.load	$push1=, count($pop5)
	i32.const	$push2=, 1
	i32.add 	$push4=, $pop1, $pop2
	tee_local	$push3=, $0=, $pop4
	i32.store	count($pop0), $pop3
	copy_local	$push6=, $0
                                        # fallthrough-return: $pop6
	.endfunc
.Lfunc_end0:
	.size	incr, .Lfunc_end0-incr

	.section	.text.main,"ax",@progbits
	.hidden	main
	.globl	main
	.type	main,@function
main:                                   # @main
	.result 	i32
	.local  	i32, i32
# BB#0:                                 # %entry
	i32.call	$0=, incr@FUNCTION
	i32.const	$push16=, 0
	i32.load	$push15=, count($pop16)
	tee_local	$push14=, $1=, $pop15
	i32.const	$push1=, 2
	i32.shl 	$push2=, $pop14, $pop1
	i32.const	$push3=, arr
	i32.add 	$push4=, $pop2, $pop3
	i32.store	0($pop4), $0
	i32.const	$push13=, 0
	i32.const	$push5=, 1
	i32.add 	$push12=, $1, $pop5
	tee_local	$push11=, $0=, $pop12
	i32.store	count($pop13), $pop11
	block   	
	i32.const	$push10=, 2
	i32.ne  	$push6=, $0, $pop10
	br_if   	0, $pop6        # 0: down to label0
# BB#1:                                 # %entry
	i32.const	$push17=, 0
	i32.load	$push0=, arr+8($pop17)
	i32.const	$push7=, 3
	i32.ne  	$push8=, $pop0, $pop7
	br_if   	0, $pop8        # 0: down to label0
# BB#2:                                 # %if.end
	i32.const	$push9=, 0
	return  	$pop9
.LBB1_3:                                # %if.then
	end_block                       # label0:
	call    	abort@FUNCTION
	unreachable
	.endfunc
.Lfunc_end1:
	.size	main, .Lfunc_end1-main

	.hidden	arr                     # @arr
	.type	arr,@object
	.section	.data.arr,"aw",@progbits
	.globl	arr
	.p2align	4
arr:
	.int32	1                       # 0x1
	.int32	2                       # 0x2
	.int32	3                       # 0x3
	.int32	4                       # 0x4
	.size	arr, 16

	.hidden	count                   # @count
	.type	count,@object
	.section	.bss.count,"aw",@nobits
	.globl	count
	.p2align	2
count:
	.int32	0                       # 0x0
	.size	count, 4


	.functype	abort, void
