xref: /wasmtime-44.0.1/tests/disas/table-set.wat (revision 7e0331c2)
1;;! target = "x86_64"
2;;! test = "optimize"
3;;! flags = "-O opt-level=0"
4
5;; Test basic code generation for table WebAssembly instructions.
6;; Use optimization but with `opt-level=0` to legalize away table_addr instructions.
7
8(module
9  (table (export "table") 1 externref)
10  (func (export "table.set.const") (param externref)
11    i32.const 0
12    local.get 0
13    table.set 0)
14  (func (export "table.set.var") (param i32 externref)
15    local.get 0
16    local.get 1
17    table.set 0))
18
19;; function u0:0(i64 vmctx, i64, i32) tail {
20;;     gv0 = vmctx
21;;     gv1 = load.i64 notrap aligned readonly gv0+8
22;;     gv2 = load.i64 notrap aligned gv1+24
23;;     gv3 = vmctx
24;;     gv4 = load.i64 notrap aligned gv3+48
25;;     gv5 = load.i64 notrap aligned gv3+56
26;;     gv6 = load.i64 notrap aligned readonly can_move gv3+8
27;;     gv7 = load.i64 notrap aligned readonly can_move gv6+32
28;;     gv8 = load.i64 notrap aligned gv6+40
29;;     sig0 = (i64 vmctx, i32) tail
30;;     fn0 = colocated u805306368:25 sig0
31;;     stack_limit = gv2
32;;
33;;                                 block0(v0: i64, v1: i64, v2: i32):
34;; @0051                               v3 = iconst.i32 0
35;; @0055                               v4 = load.i64 notrap aligned v0+56
36;; @0055                               v5 = ireduce.i32 v4
37;; @0055                               v6 = icmp uge v3, v5  ; v3 = 0
38;; @0055                               v7 = uextend.i64 v3  ; v3 = 0
39;; @0055                               v8 = load.i64 notrap aligned v0+48
40;;                                     v63 = iconst.i64 2
41;; @0055                               v9 = ishl v7, v63  ; v63 = 2
42;; @0055                               v10 = iadd v8, v9
43;; @0055                               v11 = iconst.i64 0
44;; @0055                               v12 = select_spectre_guard v6, v11, v10  ; v11 = 0
45;; @0055                               v13 = load.i32 user5 aligned table v12
46;;                                     v62 = iconst.i32 1
47;; @0055                               v14 = band v2, v62  ; v62 = 1
48;;                                     v61 = iconst.i32 0
49;; @0055                               v15 = icmp eq v2, v61  ; v61 = 0
50;; @0055                               v16 = uextend.i32 v15
51;; @0055                               v17 = bor v14, v16
52;; @0055                               brif v17, block3, block2
53;;
54;;                                 block2:
55;; @0055                               v18 = uextend.i64 v2
56;; @0055                               v59 = load.i64 notrap aligned readonly can_move v0+8
57;; @0055                               v19 = load.i64 notrap aligned readonly can_move v59+32
58;; @0055                               v20 = iadd v19, v18
59;; @0055                               v21 = iconst.i64 8
60;; @0055                               v22 = iadd v20, v21  ; v21 = 8
61;; @0055                               v23 = load.i64 notrap aligned v22
62;;                                     v58 = iconst.i64 1
63;; @0055                               v24 = iadd v23, v58  ; v58 = 1
64;; @0055                               v25 = uextend.i64 v2
65;; @0055                               v56 = load.i64 notrap aligned readonly can_move v0+8
66;; @0055                               v26 = load.i64 notrap aligned readonly can_move v56+32
67;; @0055                               v27 = iadd v26, v25
68;; @0055                               v28 = iconst.i64 8
69;; @0055                               v29 = iadd v27, v28  ; v28 = 8
70;; @0055                               store notrap aligned v24, v29
71;; @0055                               jump block3
72;;
73;;                                 block3:
74;; @0055                               store.i32 user5 aligned table v2, v12
75;;                                     v55 = iconst.i32 1
76;; @0055                               v30 = band.i32 v13, v55  ; v55 = 1
77;;                                     v54 = iconst.i32 0
78;; @0055                               v31 = icmp.i32 eq v13, v54  ; v54 = 0
79;; @0055                               v32 = uextend.i32 v31
80;; @0055                               v33 = bor v30, v32
81;; @0055                               brif v33, block7, block4
82;;
83;;                                 block4:
84;; @0055                               v34 = uextend.i64 v13
85;; @0055                               v52 = load.i64 notrap aligned readonly can_move v0+8
86;; @0055                               v35 = load.i64 notrap aligned readonly can_move v52+32
87;; @0055                               v36 = iadd v35, v34
88;; @0055                               v37 = iconst.i64 8
89;; @0055                               v38 = iadd v36, v37  ; v37 = 8
90;; @0055                               v39 = load.i64 notrap aligned v38
91;;                                     v51 = iconst.i64 -1
92;; @0055                               v40 = iadd v39, v51  ; v51 = -1
93;;                                     v50 = iconst.i64 0
94;; @0055                               v41 = icmp eq v40, v50  ; v50 = 0
95;; @0055                               brif v41, block5, block6
96;;
97;;                                 block5 cold:
98;; @0055                               call fn0(v0, v13)
99;; @0055                               jump block7
100;;
101;;                                 block6:
102;; @0055                               v43 = uextend.i64 v13
103;; @0055                               v48 = load.i64 notrap aligned readonly can_move v0+8
104;; @0055                               v44 = load.i64 notrap aligned readonly can_move v48+32
105;; @0055                               v45 = iadd v44, v43
106;; @0055                               v46 = iconst.i64 8
107;; @0055                               v47 = iadd v45, v46  ; v46 = 8
108;; @0055                               store.i64 notrap aligned v40, v47
109;; @0055                               jump block7
110;;
111;;                                 block7:
112;; @0057                               jump block1
113;;
114;;                                 block1:
115;; @0057                               return
116;; }
117;;
118;; function u0:1(i64 vmctx, i64, i32, i32) tail {
119;;     gv0 = vmctx
120;;     gv1 = load.i64 notrap aligned readonly gv0+8
121;;     gv2 = load.i64 notrap aligned gv1+24
122;;     gv3 = vmctx
123;;     gv4 = load.i64 notrap aligned gv3+48
124;;     gv5 = load.i64 notrap aligned gv3+56
125;;     gv6 = load.i64 notrap aligned readonly can_move gv3+8
126;;     gv7 = load.i64 notrap aligned readonly can_move gv6+32
127;;     gv8 = load.i64 notrap aligned gv6+40
128;;     sig0 = (i64 vmctx, i32) tail
129;;     fn0 = colocated u805306368:25 sig0
130;;     stack_limit = gv2
131;;
132;;                                 block0(v0: i64, v1: i64, v2: i32, v3: i32):
133;; @005e                               v4 = load.i64 notrap aligned v0+56
134;; @005e                               v5 = ireduce.i32 v4
135;; @005e                               v6 = icmp uge v2, v5
136;; @005e                               v7 = uextend.i64 v2
137;; @005e                               v8 = load.i64 notrap aligned v0+48
138;;                                     v63 = iconst.i64 2
139;; @005e                               v9 = ishl v7, v63  ; v63 = 2
140;; @005e                               v10 = iadd v8, v9
141;; @005e                               v11 = iconst.i64 0
142;; @005e                               v12 = select_spectre_guard v6, v11, v10  ; v11 = 0
143;; @005e                               v13 = load.i32 user5 aligned table v12
144;;                                     v62 = iconst.i32 1
145;; @005e                               v14 = band v3, v62  ; v62 = 1
146;;                                     v61 = iconst.i32 0
147;; @005e                               v15 = icmp eq v3, v61  ; v61 = 0
148;; @005e                               v16 = uextend.i32 v15
149;; @005e                               v17 = bor v14, v16
150;; @005e                               brif v17, block3, block2
151;;
152;;                                 block2:
153;; @005e                               v18 = uextend.i64 v3
154;; @005e                               v59 = load.i64 notrap aligned readonly can_move v0+8
155;; @005e                               v19 = load.i64 notrap aligned readonly can_move v59+32
156;; @005e                               v20 = iadd v19, v18
157;; @005e                               v21 = iconst.i64 8
158;; @005e                               v22 = iadd v20, v21  ; v21 = 8
159;; @005e                               v23 = load.i64 notrap aligned v22
160;;                                     v58 = iconst.i64 1
161;; @005e                               v24 = iadd v23, v58  ; v58 = 1
162;; @005e                               v25 = uextend.i64 v3
163;; @005e                               v56 = load.i64 notrap aligned readonly can_move v0+8
164;; @005e                               v26 = load.i64 notrap aligned readonly can_move v56+32
165;; @005e                               v27 = iadd v26, v25
166;; @005e                               v28 = iconst.i64 8
167;; @005e                               v29 = iadd v27, v28  ; v28 = 8
168;; @005e                               store notrap aligned v24, v29
169;; @005e                               jump block3
170;;
171;;                                 block3:
172;; @005e                               store.i32 user5 aligned table v3, v12
173;;                                     v55 = iconst.i32 1
174;; @005e                               v30 = band.i32 v13, v55  ; v55 = 1
175;;                                     v54 = iconst.i32 0
176;; @005e                               v31 = icmp.i32 eq v13, v54  ; v54 = 0
177;; @005e                               v32 = uextend.i32 v31
178;; @005e                               v33 = bor v30, v32
179;; @005e                               brif v33, block7, block4
180;;
181;;                                 block4:
182;; @005e                               v34 = uextend.i64 v13
183;; @005e                               v52 = load.i64 notrap aligned readonly can_move v0+8
184;; @005e                               v35 = load.i64 notrap aligned readonly can_move v52+32
185;; @005e                               v36 = iadd v35, v34
186;; @005e                               v37 = iconst.i64 8
187;; @005e                               v38 = iadd v36, v37  ; v37 = 8
188;; @005e                               v39 = load.i64 notrap aligned v38
189;;                                     v51 = iconst.i64 -1
190;; @005e                               v40 = iadd v39, v51  ; v51 = -1
191;;                                     v50 = iconst.i64 0
192;; @005e                               v41 = icmp eq v40, v50  ; v50 = 0
193;; @005e                               brif v41, block5, block6
194;;
195;;                                 block5 cold:
196;; @005e                               call fn0(v0, v13)
197;; @005e                               jump block7
198;;
199;;                                 block6:
200;; @005e                               v43 = uextend.i64 v13
201;; @005e                               v48 = load.i64 notrap aligned readonly can_move v0+8
202;; @005e                               v44 = load.i64 notrap aligned readonly can_move v48+32
203;; @005e                               v45 = iadd v44, v43
204;; @005e                               v46 = iconst.i64 8
205;; @005e                               v47 = iadd v45, v46  ; v46 = 8
206;; @005e                               store.i64 notrap aligned v40, v47
207;; @005e                               jump block7
208;;
209;;                                 block7:
210;; @0060                               jump block1
211;;
212;;                                 block1:
213;; @0060                               return
214;; }
215