1;; From https://bugzilla.mozilla.org/show_bug.cgi?id=1657062.
2;;
3;; This just tests that Cranelift can compile this function; it previously
4;; triggered a validator error on the CLIF that is generated by the wasm crate.
5
6(module
7  (type (;0;) (func (param i32 i32 i32) (result i32)))
8  (func $main (type 0) (param i32 i32 i32) (result i32)
9    local.get 1
10    i32.const 6150
11    local.get 2
12    i32.const -63
13    br_if 0 (;@0;)
14    loop (param i32 i32 i32) (result i32)  ;; label = @1
15      i32.const -59
16      local.get 1
17      i32.const -49
18      br_if 0 (;@1;)
19      i32.const 0
20      i32.ge_u
21      br_if 0 (;@1;)
22      i32.const 2
23      i32.const 0
24      i32.const 2
25      br_if 0 (;@1;)
26      i32.const 0
27      i32.ge_u
28      i32.const 0
29      i32.const 0
30      br_if 0 (;@1;)
31      i32.const 0
32      i32.const 27
33      select
34      i32.const 24
35      select
36      local.get 0
37      i32.const 27
38      i32.const 32
39      br_if 0 (;@1;)
40      i32.const 32
41      br_if 0 (;@1;)
42      i32.const 452672
43      i32.const 32
44      br_if 1 (;@0;)
45      i32.const -23
46      i32.div_s
47      local.get 1
48      if  ;; label = @2
49        nop
50        i32.const -52
51        if  ;; label = @3
52          nop
53          i32.const -52
54          local.tee 1
55          br_table 1 (;@2;) 0 (;@3;)
56        end
57        local.get 2
58        br_table 0 (;@2;) 0 (;@2;)
59      end
60      local.get 1
61      nop
62      i32.const -23
63      i32.div_s
64      nop
65      i32.const -25
66      i32.popcnt
67      select
68      select
69      i32.const 139
70      select
71      drop
72      i32.const -8051
73      nop
74      drop
75      i32.const 27
76      i32.const -63
77      local.get 1
78      i32.const 1
79      i32.const -63
80      i32.const 2
81      i32.const -6145
82      br_if 0 (;@1;)
83      i32.const 0
84      i32.ge_u
85      br_if 0 (;@1;)
86      select
87      local.get 1
88      i32.const -7937
89      i32.const 2
90      i32.const 0
91      i32.ge_u
92      i32.eqz
93      i32.const -49
94      br_if 0 (;@1;)
95      i32.const 0
96      i32.ge_u
97      br_if 0 (;@1;)
98      i32.const 2
99      i32.const 0
100      i32.const 2
101      i32.const 32
102      call $main
103      i32.const -1
104      i32.rem_s
105      i32.const 2
106      i32.const 0
107      i32.const 2
108      i32.const 0
109      i32.ge_u
110      i32.ge_u
111      br_if 0 (;@1;)
112      i32.const 0
113      i32.ge_u
114      br_if 0 (;@1;)
115      i32.const 2
116      i32.const 0
117      i32.const -49
118      i32.const 0
119      i32.const 0
120      br_if 0 (;@1;)
121      i32.const 0
122      local.get 1
123      select
124      i32.const 32
125      call $main
126      i32.const -1
127      i32.rem_s
128      i32.const 2
129      i32.const 0
130      i32.const 2
131      i32.const 0
132      i32.ge_u
133      i32.ge_u
134      br_if 0 (;@1;)
135      i32.const 3
136      i32.ge_u
137      br_if 0 (;@1;)
138      i32.const 2
139      i32.const 0
140      i32.const 2
141      i32.const 0
142      i32.ge_u
143      br_if 0 (;@1;)
144      i32.const -64
145      i32.ge_u
146      br_if 0 (;@1;)
147      select
148      br_if 0 (;@1;)
149      i32.const 0
150      local.get 1
151      select
152      i32.const 2
153      i32.const 0
154      i32.ge_u
155      br_if 0 (;@1;)
156      i32.const -64
157      i32.ge_u
158      i32.const 2
159      i32.const 0
160      i32.const 2
161      i32.const 0
162      i32.ge_u
163      i32.ge_u
164      br_if 0 (;@1;)
165      i32.const 0
166      i32.ge_u
167      nop
168      i32.const -59
169      i32.eqz
170      i32.eqz
171      i32.eqz
172      i32.eqz
173      i32.eqz
174      i32.eqz
175      i32.eqz
176      i32.const 32
177      select
178      br_if 0 (;@1;)
179      i32.const 0
180      local.get 1
181      select
182      i32.const 32
183      br_if 0 (;@1;)
184      i32.const 4
185      i32.rem_s
186      i32.const 2
187      i32.const 0
188      i32.ge_u
189      br_if 0 (;@1;)
190      i32.const 0
191      i32.const -19
192      nop
193      nop
194      i32.const -23
195      i32.div_s
196      i32.const 2
197      i32.const 0
198      i32.ge_u
199      br_if 0 (;@1;)
200      i32.const -63
201      i32.const 2
202      i32.const 0
203      i32.ge_u
204      br_if 0 (;@1;)
205      i32.const 0
206      i32.div_s
207      local.get 1
208      i32.const 1
209      i32.const -63
210      i32.const 2
211      i32.const 1
212      drop
213      i32.const -63
214      i32.const 27
215      select
216      i32.const 27
217      select
218      local.tee 0
219      i32.const 27
220      i32.const 32
221      br_if 0 (;@1;)
222      i32.const 32
223      br_if 0 (;@1;)
224      i32.const 452672
225      i32.const 32
226      br_if 1 (;@0;)
227      i32.const -23
228      i32.div_s
229      local.get 1
230      if  ;; label = @2
231        nop
232        i32.const -52
233        if  ;; label = @3
234          nop
235          i32.const -52
236          local.tee 1
237          br_table 1 (;@2;) 0 (;@3;)
238        end
239        local.get 2
240        br_table 0 (;@2;) 0 (;@2;)
241      end
242      local.get 1
243      nop
244      i32.const -23
245      i32.div_s
246      nop
247      i32.const -25
248      i32.popcnt
249      select
250      select
251      i32.const 139
252      select
253      drop
254      i32.const -64
255      i32.ge_u
256      br_if 0 (;@1;)
257      select
258      br_if 0 (;@1;)
259      i32.const 0
260      local.get 1
261      select
262      i32.const 2
263      i32.const 0
264      i32.ge_u
265      br_if 0 (;@1;)
266      i32.const -64
267      i32.ge_u
268      i32.const 2
269      i32.const 0
270      i32.const 2
271      i32.const 0
272      i32.ge_u
273      i32.ge_u
274      br_if 0 (;@1;)
275      i32.const 0
276      i32.ge_u
277      nop
278      i32.const -59
279      i32.eqz
280      i32.eqz
281      i32.eqz
282      i32.eqz
283      i32.eqz
284      i32.eqz
285      i32.eqz
286      i32.const 32
287      select
288      br_if 0 (;@1;)
289      i32.const 0
290      local.get 1
291      select
292      i32.const 32
293      br_if 0 (;@1;)
294      i32.const 4
295      i32.rem_s
296      i32.const 2
297      i32.const 0
298      i32.ge_u
299      br_if 0 (;@1;)
300      i32.const 0
301      i32.const -19
302      nop
303      nop
304      i32.const -23
305      i32.div_s
306      i32.const 2
307      i32.const 0
308      i32.ge_u
309      br_if 0 (;@1;)
310      i32.const -63
311      i32.const 2
312      i32.const 0
313      i32.ge_u
314      br_if 0 (;@1;)
315      i32.const 0
316      i32.div_s
317      local.get 1
318      i32.const 1
319      i32.const -63
320      i32.const 2
321      i32.const 1
322      drop
323      nop
324      i32.const -49
325      br_if 0 (;@1;)
326      local.set 0
327      i32.ge_u
328      br_if 0 (;@1;)
329      i32.const 2
330      i32.const 0
331      i32.const 2
332      br_if 0 (;@1;)
333      i32.const 0
334      i32.ge_u
335      i32.const 0
336      i32.const 0
337      br_if 0 (;@1;)
338      i32.const 0
339      local.get 1
340      select
341      i32.const 32
342      call $main
343      i32.const -1
344      i32.rem_s
345      i32.const 2
346      i32.const 0
347      i32.const 2
348      i32.const 0
349      i32.ge_u
350      i32.ge_u
351      br_if 0 (;@1;)
352      i32.const 0
353      i32.ge_u
354      br_if 0 (;@1;)
355      i32.const 2
356      i32.const 0
357      i32.const 2
358      i32.const 0
359      i32.ge_u
360      br_if 0 (;@1;)
361      i32.const -64
362      i32.ge_u
363      br_if 0 (;@1;)
364      select
365      br_if 0 (;@1;)
366      i32.const 0
367      local.get 1
368      select
369      i32.const 2
370      i32.const 0
371      i32.ge_u
372      br_if 0 (;@1;)
373      i32.const -64
374      i32.ge_u
375      i32.const 2
376      i32.const 0
377      i32.const 2
378      i32.const 0
379      i32.ge_u
380      i32.ge_u
381      br_if 0 (;@1;)
382      i32.const 0
383      i32.ge_u
384      nop
385      i32.const -59
386      i32.eqz
387      i32.eqz
388      i32.eqz
389      i32.eqz
390      i32.eqz
391      i32.eqz
392      i32.eqz
393      i32.const 32
394      select
395      br_if 0 (;@1;)
396      i32.const 0
397      local.get 1
398      select
399      i32.const 32
400      br_if 0 (;@1;)
401      i32.const 4
402      i32.rem_s
403      i32.const 2
404      i32.const 0
405      i32.const 2
406      i32.const 0
407      i32.ge_u
408      br_if 0 (;@1;)
409      i32.const -63
410      i32.const 2
411      i32.const 0
412      i32.ge_u
413      br_if 0 (;@1;)
414      i32.const 0
415      i32.div_s
416      local.get 1
417      i32.const 1
418      i32.const -63
419      i32.const 2
420      i32.const 1
421      drop
422      i32.const -63
423      i32.const 27
424      select
425      i32.const 27
426      select
427      local.tee 0
428      i32.const 27
429      i32.const 32
430      br_if 0 (;@1;)
431      i32.const 32
432      br_if 0 (;@1;)
433      i32.const 452672
434      i32.const 32
435      br_if 1 (;@0;)
436      i32.const -23
437      i32.div_s
438      local.get 1
439      if  ;; label = @2
440        nop
441        i32.const -52
442        if  ;; label = @3
443          nop
444          i32.const -52
445          local.tee 1
446          br_table 1 (;@2;) 0 (;@3;)
447        end
448        local.get 2
449        br_table 0 (;@2;) 0 (;@2;)
450      end
451      local.get 1
452      nop
453      i32.const -23
454      i32.div_s
455      nop
456      i32.const -25
457      i32.popcnt
458      select
459      select
460      i32.const 139
461      select
462      drop
463      i32.const -64
464      i32.ge_u
465      br_if 0 (;@1;)
466      select
467      br_if 0 (;@1;)
468      i32.const 0
469      local.get 1
470      select
471      i32.const 2
472      i32.const 0
473      i32.ge_u
474      br_if 0 (;@1;)
475      i32.const -64
476      i32.ge_u
477      i32.const 2
478      i32.const 0
479      i32.const 2
480      i32.const 0
481      i32.ge_u
482      i32.ge_u
483      br_if 0 (;@1;)
484      i32.const 0
485      i32.ge_u
486      nop
487      i32.const -59
488      i32.eqz
489      i32.eqz
490      i32.eqz
491      i32.eqz
492      i32.eqz
493      i32.eqz
494      i32.eqz
495      i32.const 32
496      select
497      br_if 0 (;@1;)
498      i32.const 0
499      local.get 1
500      select
501      i32.const 32
502      br_if 0 (;@1;)
503      i32.const 4
504      i32.rem_s
505      i32.const 2
506      i32.const 0
507      br_table 0 (;@1;)
508      unreachable
509      i32.ge_u
510      br_if 0 (;@1;)
511      i32.const 0
512      i32.const -19
513      nop
514      nop
515      i32.const -23
516      i32.div_s
517      i32.const 2
518      i32.const 0
519      i32.ge_u
520      br_if 0 (;@1;)
521      i32.const -63
522      i32.const 2
523      i32.const 0
524      i32.ge_u
525      br_if 0 (;@1;)
526      i32.const 0
527      i32.div_s
528      local.get 1
529      i32.const 1
530      i32.const -63
531      i32.const 2
532      i32.const 1
533      drop
534      nop
535      i32.const -49
536      br_if 0 (;@1;)
537      local.set 0
538      i32.ge_u
539      br_if 0 (;@1;)
540      i32.const 2
541      i32.const 0
542      i32.const 2
543      br_if 0 (;@1;)
544      i32.const 0
545      i32.ge_u
546      i32.const 0
547      i32.const 0
548      br_if 0 (;@1;)
549      i32.const 0
550      local.get 1
551      select
552      i32.const 32
553      call $main
554      i32.const -1
555      i32.rem_s
556      i32.const 2
557      i32.const 0
558      i32.const 2
559      i32.const 0
560      i32.ge_u
561      i32.ge_u
562      br_if 0 (;@1;)
563      i32.const 0
564      i32.ge_u
565      br_if 0 (;@1;)
566      i32.const 2
567      i32.const 0
568      i32.const 2
569      i32.const 0
570      i32.ge_u
571      br_if 0 (;@1;)
572      i32.const -64
573      i32.ge_u
574      br_if 0 (;@1;)
575      select
576      br_if 0 (;@1;)
577      i32.const 0
578      local.get 1
579      select
580      i32.const 2
581      i32.const 0
582      i32.ge_u
583      br_if 0 (;@1;)
584      i32.const -64
585      i32.ge_u
586      i32.const 2
587      i32.const 0
588      i32.const 2
589      i32.const 0
590      i32.ge_u
591      i32.ge_u
592      br_if 0 (;@1;)
593      i32.const 0
594      i32.ge_u
595      nop
596      i32.const -59
597      i32.eqz
598      i32.eqz
599      i32.eqz
600      i32.eqz
601      i32.eqz
602      i32.eqz
603      i32.eqz
604      i32.const 32
605      select
606      br_if 0 (;@1;)
607      i32.const 0
608      i32.const 2
609      i32.const 0
610      i32.const 2
611      i32.const -63
612      i32.const 27
613      i32.const -63
614      i32.eqz
615      i32.eqz
616      br 0 (;@1;)
617    end
618    unreachable
619    i32.div_s
620    unreachable
621    i32.rem_s
622    i32.div_s
623    return
624    br_if 0 (;@0;)
625    i32.const 0
626    i32.extend8_s
627    unreachable
628    unreachable
629    unreachable
630    unreachable
631    i32.ctz
632    unreachable
633    i32.ge_u
634    unreachable
635    unreachable
636    i32.popcnt
637    unreachable
638    unreachable
639    i32.popcnt)
640  (export "main" (func $main)))
641