1;;! target = "x86_64"
2;;! flags = "-W function-references,gc -C collector=drc"
3;;! test = "optimize"
4
5(module
6  (type $ty (struct (field (mut f32))
7                    (field (mut i8))
8                    (field (mut anyref))))
9
10  (func (param (ref null $ty) f32)
11    (struct.set $ty 0 (local.get 0) (local.get 1))
12  )
13
14  (func (param (ref null $ty) i32)
15    (struct.set $ty 1 (local.get 0) (local.get 1))
16  )
17
18  (func (param (ref null $ty) anyref)
19    (struct.set $ty 2 (local.get 0) (local.get 1))
20  )
21)
22;; function u0:0(i64 vmctx, i64, i32, f32) tail {
23;;     gv0 = vmctx
24;;     gv1 = load.i64 notrap aligned readonly gv0+8
25;;     gv2 = load.i64 notrap aligned gv1+24
26;;     gv3 = vmctx
27;;     gv4 = load.i64 notrap aligned readonly can_move gv3+8
28;;     gv5 = load.i64 notrap aligned readonly can_move gv4+32
29;;     gv6 = load.i64 notrap aligned gv4+40
30;;     stack_limit = gv2
31;;
32;;                                 block0(v0: i64, v1: i64, v2: i32, v3: f32):
33;; @0034                               trapz v2, user15
34;; @0034                               v9 = load.i64 notrap aligned readonly can_move v0+8
35;; @0034                               v5 = load.i64 notrap aligned readonly can_move v9+32
36;; @0034                               v4 = uextend.i64 v2
37;; @0034                               v6 = iadd v5, v4
38;; @0034                               v7 = iconst.i64 24
39;; @0034                               v8 = iadd v6, v7  ; v7 = 24
40;; @0034                               store notrap aligned little v3, v8
41;; @0038                               jump block1
42;;
43;;                                 block1:
44;; @0038                               return
45;; }
46;;
47;; function u0:1(i64 vmctx, i64, i32, i32) tail {
48;;     gv0 = vmctx
49;;     gv1 = load.i64 notrap aligned readonly gv0+8
50;;     gv2 = load.i64 notrap aligned gv1+24
51;;     gv3 = vmctx
52;;     gv4 = load.i64 notrap aligned readonly can_move gv3+8
53;;     gv5 = load.i64 notrap aligned readonly can_move gv4+32
54;;     gv6 = load.i64 notrap aligned gv4+40
55;;     stack_limit = gv2
56;;
57;;                                 block0(v0: i64, v1: i64, v2: i32, v3: i32):
58;; @003f                               trapz v2, user15
59;; @003f                               v9 = load.i64 notrap aligned readonly can_move v0+8
60;; @003f                               v5 = load.i64 notrap aligned readonly can_move v9+32
61;; @003f                               v4 = uextend.i64 v2
62;; @003f                               v6 = iadd v5, v4
63;; @003f                               v7 = iconst.i64 28
64;; @003f                               v8 = iadd v6, v7  ; v7 = 28
65;; @003f                               istore8 notrap aligned little v3, v8
66;; @0043                               jump block1
67;;
68;;                                 block1:
69;; @0043                               return
70;; }
71;;
72;; function u0:2(i64 vmctx, i64, i32, i32) tail {
73;;     gv0 = vmctx
74;;     gv1 = load.i64 notrap aligned readonly gv0+8
75;;     gv2 = load.i64 notrap aligned gv1+24
76;;     gv3 = vmctx
77;;     gv4 = load.i64 notrap aligned readonly can_move gv3+8
78;;     gv5 = load.i64 notrap aligned readonly can_move gv4+32
79;;     gv6 = load.i64 notrap aligned gv4+40
80;;     sig0 = (i64 vmctx, i32) tail
81;;     fn0 = colocated u805306368:25 sig0
82;;     stack_limit = gv2
83;;
84;;                                 block0(v0: i64, v1: i64, v2: i32, v3: i32):
85;; @004a                               trapz v2, user15
86;; @004a                               v59 = load.i64 notrap aligned readonly can_move v0+8
87;; @004a                               v5 = load.i64 notrap aligned readonly can_move v59+32
88;; @004a                               v4 = uextend.i64 v2
89;; @004a                               v6 = iadd v5, v4
90;; @004a                               v7 = iconst.i64 32
91;; @004a                               v8 = iadd v6, v7  ; v7 = 32
92;; @004a                               v9 = load.i32 notrap aligned little v8
93;;                                     v58 = iconst.i32 1
94;; @004a                               v10 = band v3, v58  ; v58 = 1
95;;                                     v57 = iconst.i32 0
96;; @004a                               v11 = icmp eq v3, v57  ; v57 = 0
97;; @004a                               v12 = uextend.i32 v11
98;; @004a                               v13 = bor v10, v12
99;; @004a                               brif v13, block3, block2
100;;
101;;                                 block2:
102;; @004a                               v14 = uextend.i64 v3
103;; @004a                               v16 = iadd.i64 v5, v14
104;; @004a                               v33 = iconst.i64 8
105;; @004a                               v18 = iadd v16, v33  ; v33 = 8
106;; @004a                               v19 = load.i64 notrap aligned v18
107;;                                     v69 = iconst.i64 1
108;; @004a                               v20 = iadd v19, v69  ; v69 = 1
109;; @004a                               store notrap aligned v20, v18
110;; @004a                               jump block3
111;;
112;;                                 block3:
113;;                                     v74 = iadd.i64 v6, v7  ; v7 = 32
114;; @004a                               store.i32 notrap aligned little v3, v74
115;;                                     v75 = iconst.i32 1
116;;                                     v76 = band.i32 v9, v75  ; v75 = 1
117;;                                     v77 = iconst.i32 0
118;;                                     v78 = icmp.i32 eq v9, v77  ; v77 = 0
119;; @004a                               v28 = uextend.i32 v78
120;; @004a                               v29 = bor v76, v28
121;; @004a                               brif v29, block7, block4
122;;
123;;                                 block4:
124;; @004a                               v30 = uextend.i64 v9
125;; @004a                               v32 = iadd.i64 v5, v30
126;;                                     v79 = iconst.i64 8
127;; @004a                               v34 = iadd v32, v79  ; v79 = 8
128;; @004a                               v35 = load.i64 notrap aligned v34
129;;                                     v80 = iconst.i64 1
130;;                                     v72 = icmp eq v35, v80  ; v80 = 1
131;; @004a                               brif v72, block5, block6
132;;
133;;                                 block5 cold:
134;; @004a                               call fn0(v0, v9)
135;; @004a                               jump block7
136;;
137;;                                 block6:
138;;                                     v47 = iconst.i64 -1
139;; @004a                               v36 = iadd.i64 v35, v47  ; v47 = -1
140;;                                     v81 = iadd.i64 v32, v79  ; v79 = 8
141;; @004a                               store notrap aligned v36, v81
142;; @004a                               jump block7
143;;
144;;                                 block7:
145;; @004e                               jump block1
146;;
147;;                                 block1:
148;; @004e                               return
149;; }
150