1;;! target = "x86_64"
2;;! flags = "-W function-references,gc -C collector=null"
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)) (result f32)
11    (struct.get $ty 0 (local.get 0))
12  )
13
14  (func (param (ref null $ty)) (result i32)
15    (struct.get_s $ty 1 (local.get 0))
16  )
17
18  (func (param (ref null $ty)) (result i32)
19    (struct.get_u $ty 1 (local.get 0))
20  )
21
22  (func (param (ref null $ty)) (result anyref)
23    (struct.get $ty 2 (local.get 0))
24  )
25)
26;; function u0:0(i64 vmctx, i64, i32) -> f32 tail {
27;;     gv0 = vmctx
28;;     gv1 = load.i64 notrap aligned readonly gv0+8
29;;     gv2 = load.i64 notrap aligned gv1+24
30;;     gv3 = vmctx
31;;     gv4 = load.i64 notrap aligned readonly can_move gv3+8
32;;     gv5 = load.i64 notrap aligned readonly can_move gv4+32
33;;     gv6 = load.i64 notrap aligned gv4+40
34;;     stack_limit = gv2
35;;
36;;                                 block0(v0: i64, v1: i64, v2: i32):
37;; @0033                               trapz v2, user15
38;; @0033                               v10 = load.i64 notrap aligned readonly can_move v0+8
39;; @0033                               v5 = load.i64 notrap aligned readonly can_move v10+32
40;; @0033                               v4 = uextend.i64 v2
41;; @0033                               v6 = iadd v5, v4
42;; @0033                               v7 = iconst.i64 8
43;; @0033                               v8 = iadd v6, v7  ; v7 = 8
44;; @0033                               v9 = load.f32 notrap aligned little v8
45;; @0037                               jump block1
46;;
47;;                                 block1:
48;; @0037                               return v9
49;; }
50;;
51;; function u0:1(i64 vmctx, i64, i32) -> i32 tail {
52;;     gv0 = vmctx
53;;     gv1 = load.i64 notrap aligned readonly gv0+8
54;;     gv2 = load.i64 notrap aligned gv1+24
55;;     gv3 = vmctx
56;;     gv4 = load.i64 notrap aligned readonly can_move gv3+8
57;;     gv5 = load.i64 notrap aligned readonly can_move gv4+32
58;;     gv6 = load.i64 notrap aligned gv4+40
59;;     stack_limit = gv2
60;;
61;;                                 block0(v0: i64, v1: i64, v2: i32):
62;; @003c                               trapz v2, user15
63;; @003c                               v11 = load.i64 notrap aligned readonly can_move v0+8
64;; @003c                               v5 = load.i64 notrap aligned readonly can_move v11+32
65;; @003c                               v4 = uextend.i64 v2
66;; @003c                               v6 = iadd v5, v4
67;; @003c                               v7 = iconst.i64 12
68;; @003c                               v8 = iadd v6, v7  ; v7 = 12
69;; @003c                               v9 = load.i8 notrap aligned little v8
70;; @0040                               jump block1
71;;
72;;                                 block1:
73;; @003c                               v10 = sextend.i32 v9
74;; @0040                               return v10
75;; }
76;;
77;; function u0:2(i64 vmctx, i64, i32) -> i32 tail {
78;;     gv0 = vmctx
79;;     gv1 = load.i64 notrap aligned readonly gv0+8
80;;     gv2 = load.i64 notrap aligned gv1+24
81;;     gv3 = vmctx
82;;     gv4 = load.i64 notrap aligned readonly can_move gv3+8
83;;     gv5 = load.i64 notrap aligned readonly can_move gv4+32
84;;     gv6 = load.i64 notrap aligned gv4+40
85;;     stack_limit = gv2
86;;
87;;                                 block0(v0: i64, v1: i64, v2: i32):
88;; @0045                               trapz v2, user15
89;; @0045                               v11 = load.i64 notrap aligned readonly can_move v0+8
90;; @0045                               v5 = load.i64 notrap aligned readonly can_move v11+32
91;; @0045                               v4 = uextend.i64 v2
92;; @0045                               v6 = iadd v5, v4
93;; @0045                               v7 = iconst.i64 12
94;; @0045                               v8 = iadd v6, v7  ; v7 = 12
95;; @0045                               v9 = load.i8 notrap aligned little v8
96;; @0049                               jump block1
97;;
98;;                                 block1:
99;; @0045                               v10 = uextend.i32 v9
100;; @0049                               return v10
101;; }
102;;
103;; function u0:3(i64 vmctx, i64, i32) -> i32 tail {
104;;     gv0 = vmctx
105;;     gv1 = load.i64 notrap aligned readonly gv0+8
106;;     gv2 = load.i64 notrap aligned gv1+24
107;;     gv3 = vmctx
108;;     gv4 = load.i64 notrap aligned readonly can_move gv3+8
109;;     gv5 = load.i64 notrap aligned readonly can_move gv4+32
110;;     gv6 = load.i64 notrap aligned gv4+40
111;;     stack_limit = gv2
112;;
113;;                                 block0(v0: i64, v1: i64, v2: i32):
114;; @004e                               trapz v2, user15
115;; @004e                               v10 = load.i64 notrap aligned readonly can_move v0+8
116;; @004e                               v5 = load.i64 notrap aligned readonly can_move v10+32
117;; @004e                               v4 = uextend.i64 v2
118;; @004e                               v6 = iadd v5, v4
119;; @004e                               v7 = iconst.i64 16
120;; @004e                               v8 = iadd v6, v7  ; v7 = 16
121;; @004e                               v9 = load.i32 notrap aligned little v8
122;; @0052                               jump block1
123;;
124;;                                 block1:
125;; @0052                               return v9
126;; }
127