]> git.proxmox.com Git - rustc.git/blame - src/binaryen/test/passes/remove-unused-names_merge-blocks.wast
New upstream version 1.25.0+dfsg1
[rustc.git] / src / binaryen / test / passes / remove-unused-names_merge-blocks.wast
CommitLineData
abe05a73
XL
1(module
2 (memory (shared 256 256))
3 (type $i (func (param i32)))
4 (type $ii (func (param i32 i32)))
5 (type $iii (func (param i32 i32 i32)))
6 (type $3 (func))
7 (table 1 1 anyfunc)
8 (elem (i32.const 0) $call-i)
9 (func $call-i (type $i) (param $0 i32)
10 (nop)
11 )
12 (func $call-ii (type $ii) (param $0 i32) (param $1 i32)
13 (nop)
14 )
15 (func $call-iii (type $iii) (param $0 i32) (param $1 i32) (param $2 i32)
16 (nop)
17 )
18 (func $b0-yes (type $i) (param $i1 i32)
19 (block $topmost
20 (block $block0
21 (drop
22 (i32.const 10)
23 )
24 )
25 )
26 )
27 (func $b0-no (type $i) (param $i1 i32)
28 (block $topmost
29 (block $block0
30 (br $block0)
31 )
32 (br $topmost)
33 )
34 )
35 (func $b0-br-but-ok (type $i) (param $i1 i32)
36 (block $topmost
37 (block $block0
38 (br $topmost)
39 )
40 )
41 )
42 (func $b1-yes (type $i) (param $i1 i32)
43 (block $topmost
44 (block $block0
45 (block $block1
46 (drop
47 (i32.const 10)
48 )
49 )
50 )
51 )
52 )
53 (func $b2-yes (type $i) (param $i1 i32)
54 (block $topmost
55 (drop
56 (i32.const 5)
57 )
58 (block $block0
59 (drop
60 (i32.const 10)
61 )
62 )
63 (drop
64 (i32.const 15)
65 )
66 )
67 )
68 (func $b3-yes (type $i) (param $i1 i32)
69 (block $topmost
70 (drop
71 (i32.const 3)
72 )
73 (block $block0
74 (drop
75 (i32.const 6)
76 )
77 (block $block1
78 (drop
79 (i32.const 10)
80 )
81 )
82 (drop
83 (i32.const 15)
84 )
85 )
86 (drop
87 (i32.const 20)
88 )
89 )
90 )
91 (func $b4 (type $i) (param $i1 i32)
92 (block $topmost
93 (block $inner
94 (drop
95 (i32.const 10)
96 )
97 (br $inner)
98 )
99 )
100 )
101 (func $b5 (type $i) (param $i1 i32)
102 (block $topmost
103 (block $middle
104 (block $inner
105 (drop
106 (i32.const 10)
107 )
108 (br $inner)
109 )
110 (br $middle)
111 )
112 )
113 )
114 (func $b6 (type $i) (param $i1 i32)
115 (block $topmost
116 (drop
117 (i32.const 5)
118 )
119 (block $inner
120 (drop
121 (i32.const 10)
122 )
123 (br $inner)
124 )
125 (drop
126 (i32.const 15)
127 )
128 )
129 )
130 (func $b7 (type $i) (param $i1 i32)
131 (block $topmost
132 (drop
133 (i32.const 3)
134 )
135 (block $middle
136 (drop
137 (i32.const 6)
138 )
139 (block $inner
140 (drop
141 (i32.const 10)
142 )
143 (br $inner)
144 )
145 (drop
146 (i32.const 15)
147 )
148 (br $middle)
149 )
150 (drop
151 (i32.const 20)
152 )
153 )
154 )
155 (func $unary (type $3)
156 (local $x i32)
157 (drop
158 (i32.eqz
159 (block $block0 (result i32)
160 (i32.const 10)
161 )
162 )
163 )
164 (drop
165 (i32.eqz
166 (block $block1 (result i32)
167 (drop
168 (i32.const 10)
169 )
170 (i32.const 20)
171 )
172 )
173 )
174 (drop
175 (i32.eqz
176 (block $block2 (result i32)
177 (drop
178 (i32.const 10)
179 )
180 (drop
181 (i32.const 20)
182 )
183 (i32.const 30)
184 )
185 )
186 )
187 (set_local $x
188 (block $block3 (result i32)
189 (drop
190 (i32.const 10)
191 )
192 (i32.const 20)
193 )
194 )
195 (drop
196 (i32.load
197 (block $block4 (result i32)
198 (drop
199 (i32.const 10)
200 )
201 (i32.const 20)
202 )
203 )
204 )
205 (return
206 (block $block5
207 (drop
208 (i32.const 10)
209 )
210 (unreachable)
211 )
212 )
213 )
214 (func $binary (type $3)
215 (drop
216 (i32.add
217 (block $block0 (result i32)
218 (i32.const 10)
219 )
220 (i32.const 20)
221 )
222 )
223 (drop
224 (i32.add
225 (block $block1 (result i32)
226 (drop
227 (i32.const 10)
228 )
229 (i32.const 20)
230 )
231 (i32.const 30)
232 )
233 )
234 (drop
235 (i32.add
236 (block $block2 (result i32)
237 (drop
238 (i32.const 10)
239 )
240 (drop
241 (i32.const 20)
242 )
243 (i32.const 30)
244 )
245 (i32.const 40)
246 )
247 )
248 (drop
249 (i32.add
250 (i32.const 10)
251 (block $block3 (result i32)
252 (i32.const 20)
253 )
254 )
255 )
256 (drop
257 (i32.add
258 (i32.const 10)
259 (block $block4 (result i32)
260 (drop
261 (i32.const 20)
262 )
263 (i32.const 30)
264 )
265 )
266 )
267 (drop
268 (i32.add
269 (i32.const 10)
270 (block $block5 (result i32)
271 (drop
272 (i32.const 20)
273 )
274 (drop
275 (i32.const 30)
276 )
277 (i32.const 40)
278 )
279 )
280 )
281 (drop
282 (i32.add
283 (block $block6 (result i32)
284 (i32.const 10)
285 )
286 (block $block7 (result i32)
287 (i32.const 20)
288 )
289 )
290 )
291 (drop
292 (i32.add
293 (block $block8 (result i32)
294 (drop
295 (i32.const 10)
296 )
297 (i32.const 20)
298 )
299 (block $block9 (result i32)
300 (drop
301 (i32.const 30)
302 )
303 (i32.const 40)
304 )
305 )
306 )
307 (drop
308 (i32.add
309 (block $block10 (result i32)
310 (drop
311 (i32.const 10)
312 )
313 (drop
314 (i32.const 20)
315 )
316 (i32.const 30)
317 )
318 (block $block11 (result i32)
319 (drop
320 (i32.const 40)
321 )
322 (drop
323 (i32.const 50)
324 )
325 (i32.const 60)
326 )
327 )
328 )
329 (i32.store
330 (i32.const 10)
331 (block $block12 (result i32)
332 (drop
333 (i32.const 20)
334 )
335 (i32.const 30)
336 )
337 )
338 (i32.store
339 (block $block13 (result i32)
340 (drop
341 (i32.const 10)
342 )
343 (i32.const 20)
344 )
345 (i32.const 30)
346 )
347 (drop
348 (i32.add
349 (unreachable)
350 (block $block14 (result i32)
351 (drop
352 (i32.const 10)
353 )
354 (i32.const 20)
355 )
356 )
357 )
358 (drop
359 (i32.add
360 (block $block15 (result i32)
361 (unreachable)
362 (i32.const 10)
363 )
364 (block $block16 (result i32)
365 (drop
366 (i32.const 20)
367 )
368 (i32.const 30)
369 )
370 )
371 )
372 )
373 (func $trinary (type $3)
374 (drop
375 (select
376 (block $block0 (result i32)
377 (drop
378 (i32.const 10)
379 )
380 (i32.const 20)
381 )
382 (block $block1 (result i32)
383 (drop
384 (i32.const 30)
385 )
386 (i32.const 40)
387 )
388 (block $block2 (result i32)
389 (drop
390 (i32.const 50)
391 )
392 (i32.const 60)
393 )
394 )
395 )
396 (drop
397 (select
398 (block $block3 (result i32)
399 (i32.const 10)
400 )
401 (block $block4 (result i32)
402 (drop
403 (i32.const 20)
404 )
405 (i32.const 30)
406 )
407 (block $block5 (result i32)
408 (drop
409 (i32.const 40)
410 )
411 (i32.const 50)
412 )
413 )
414 )
415 (drop
416 (select
417 (block $block6 (result i32)
418 (drop
419 (i32.const 10)
420 )
421 (i32.const 20)
422 )
423 (block $block7 (result i32)
424 (i32.const 30)
425 )
426 (block $block8 (result i32)
427 (drop
428 (i32.const 40)
429 )
430 (i32.const 50)
431 )
432 )
433 )
434 (drop
435 (select
436 (block $block9 (result i32)
437 (drop
438 (i32.const 10)
439 )
440 (i32.const 20)
441 )
442 (block $block10 (result i32)
443 (drop
444 (i32.const 30)
445 )
446 (i32.const 40)
447 )
448 (block $block11 (result i32)
449 (i32.const 50)
450 )
451 )
452 )
453 (drop
454 (select
455 (block $block12 (result i32)
456 (i32.const 10)
457 )
458 (block $block13 (result i32)
459 (i32.const 20)
460 )
461 (block $block14 (result i32)
462 (drop
463 (i32.const 30)
464 )
465 (i32.const 40)
466 )
467 )
468 )
469 (drop
470 (select
471 (block $block15 (result i32)
472 (i32.const 10)
473 )
474 (block $block16 (result i32)
475 (drop
476 (i32.const 20)
477 )
478 (i32.const 30)
479 )
480 (block $block17 (result i32)
481 (i32.const 40)
482 )
483 )
484 )
485 (drop
486 (select
487 (block $block18 (result i32)
488 (drop
489 (i32.const 10)
490 )
491 (i32.const 20)
492 )
493 (block $block19 (result i32)
494 (i32.const 30)
495 )
496 (block $block20 (result i32)
497 (i32.const 40)
498 )
499 )
500 )
501 (drop
502 (select
503 (block $block21 (result i32)
504 (unreachable)
505 (i32.const 20)
506 )
507 (block $block22 (result i32)
508 (drop
509 (i32.const 30)
510 )
511 (i32.const 40)
512 )
513 (block $block23 (result i32)
514 (drop
515 (i32.const 50)
516 )
517 (i32.const 60)
518 )
519 )
520 )
521 (drop
522 (select
523 (block $block24 (result i32)
524 (drop
525 (i32.const 10)
526 )
527 (unreachable)
528 )
529 (block $block25 (result i32)
530 (drop
531 (i32.const 30)
532 )
533 (i32.const 40)
534 )
535 (block $block26 (result i32)
536 (drop
537 (i32.const 50)
538 )
539 (i32.const 60)
540 )
541 )
542 )
543 (drop
544 (select
545 (block $block27 (result i32)
546 (drop
547 (i32.const 10)
548 )
549 (i32.const 20)
550 )
551 (block $block28 (result i32)
552 (unreachable)
553 (i32.const 40)
554 )
555 (block $block29 (result i32)
556 (drop
557 (i32.const 50)
558 )
559 (i32.const 60)
560 )
561 )
562 )
563 (drop
564 (select
565 (block $block30 (result i32)
566 (drop
567 (i32.const 10)
568 )
569 (i32.const 20)
570 )
571 (block $block31 (result i32)
572 (drop
573 (i32.const 30)
574 )
575 (unreachable)
576 )
577 (block $block32 (result i32)
578 (drop
579 (i32.const 50)
580 )
581 (i32.const 60)
582 )
583 )
584 )
585 (drop
586 (select
587 (block $block33 (result i32)
588 (drop
589 (i32.const 10)
590 )
591 (i32.const 20)
592 )
593 (block $block34 (result i32)
594 (drop
595 (i32.const 30)
596 )
597 (i32.const 40)
598 )
599 (block $block35 (result i32)
600 (unreachable)
601 (i32.const 60)
602 )
603 )
604 )
605 (drop
606 (select
607 (block $block36 (result i32)
608 (drop
609 (i32.const 10)
610 )
611 (i32.const 20)
612 )
613 (block $block37 (result i32)
614 (drop
615 (i32.const 30)
616 )
617 (i32.const 40)
618 )
619 (block $block38 (result i32)
620 (drop
621 (i32.const 50)
622 )
623 (unreachable)
624 )
625 )
626 )
627 )
628 (func $breaks (type $3)
629 (block $out
630 (block
631 (drop
632 (block $block0 (result i32)
633 (drop
634 (i32.const 10)
635 )
636 (i32.const 20)
637 )
638 )
639 (br $out)
640 )
641 (br_if $out
642 (block $block1 (result i32)
643 (drop
644 (i32.const 10)
645 )
646 (i32.const 20)
647 )
648 )
649 (block
650 (drop
651 (block $block2 (result i32)
652 (drop
653 (i32.const 10)
654 )
655 (i32.const 20)
656 )
657 )
658 (br_if $out
659 (block $block3 (result i32)
660 (drop
661 (i32.const 30)
662 )
663 (i32.const 40)
664 )
665 )
666 )
667 (br_table $out $out
668 (block $block4 (result i32)
669 (drop
670 (i32.const 10)
671 )
672 (i32.const 20)
673 )
674 )
675 (drop
676 (block $out2 (result i32)
677 (br_table $out2 $out2
678 (block $block5 (result i32)
679 (drop
680 (i32.const 10)
681 )
682 (i32.const 20)
683 )
684 (block $block6 (result i32)
685 (drop
686 (i32.const 30)
687 )
688 (i32.const 40)
689 )
690 )
691 )
692 )
693 (unreachable)
694 )
695 )
696 (func $calls (type $3)
697 (call $call-i
698 (block $block0 (result i32)
699 (i32.const 10)
700 )
701 )
702 (call $call-i
703 (block $block1 (result i32)
704 (drop
705 (i32.const 10)
706 )
707 (i32.const 20)
708 )
709 )
710 (call $call-i
711 (block $block2 (result i32)
712 (drop
713 (i32.const 10)
714 )
715 (drop
716 (i32.const 20)
717 )
718 (i32.const 30)
719 )
720 )
721 (call $call-ii
722 (block $block3 (result i32)
723 (drop
724 (i32.const 10)
725 )
726 (i32.const 20)
727 )
728 (block $block4 (result i32)
729 (drop
730 (i32.const 30)
731 )
732 (i32.const 40)
733 )
734 )
735 (call $call-ii
736 (block $block5 (result i32)
737 (unreachable)
738 (i32.const 10)
739 )
740 (block $block6 (result i32)
741 (drop
742 (i32.const 20)
743 )
744 (i32.const 30)
745 )
746 )
747 (call $call-ii
748 (block $block7 (result i32)
749 (drop
750 (i32.const 10)
751 )
752 (unreachable)
753 )
754 (block $block8 (result i32)
755 (drop
756 (i32.const 20)
757 )
758 (i32.const 30)
759 )
760 )
761 (call $call-ii
762 (block $block9 (result i32)
763 (drop
764 (i32.const 10)
765 )
766 (i32.const 20)
767 )
768 (block $block10 (result i32)
769 (unreachable)
770 (i32.const 30)
771 )
772 )
773 (call $call-ii
774 (block $block11 (result i32)
775 (drop
776 (i32.const 10)
777 )
778 (i32.const 20)
779 )
780 (block $block12 (result i32)
781 (drop
782 (i32.const 30)
783 )
784 (unreachable)
785 )
786 )
787 (call $call-iii
788 (block $block13 (result i32)
789 (drop
790 (i32.const 10)
791 )
792 (i32.const 20)
793 )
794 (block $block14 (result i32)
795 (drop
796 (i32.const 30)
797 )
798 (i32.const 40)
799 )
800 (block $block15 (result i32)
801 (drop
802 (i32.const 50)
803 )
804 (i32.const 60)
805 )
806 )
807 (call $call-iii
808 (block $block16 (result i32)
809 (drop
810 (i32.const 10)
811 )
812 (i32.const 20)
813 )
814 (i32.const 30)
815 (block $block17 (result i32)
816 (drop
817 (i32.const 40)
818 )
819 (i32.const 50)
820 )
821 )
822 (call_indirect (type $ii)
823 (block $block18 (result i32)
824 (drop
825 (i32.const 10)
826 )
827 (i32.const 20)
828 )
829 (block $block19 (result i32)
830 (drop
831 (i32.const 30)
832 )
833 (i32.const 40)
834 )
835 (block $block20 (result i32)
836 (drop
837 (i32.const 50)
838 )
839 (i32.const 60)
840 )
841 )
842 (call_indirect (type $ii)
843 (unreachable)
844 (block $block21 (result i32)
845 (drop
846 (i32.const 30)
847 )
848 (i32.const 40)
849 )
850 (block $block22 (result i32)
851 (drop
852 (i32.const 50)
853 )
854 (i32.const 60)
855 )
856 )
857 (call_indirect (type $ii)
858 (block $block21 (result i32)
859 (drop
860 (i32.const 31)
861 )
862 (i32.const 41)
863 )
864 (unreachable)
865 (block $block22 (result i32)
866 (drop
867 (i32.const 51)
868 )
869 (i32.const 61)
870 )
871 )
872 (call_indirect (type $ii)
873 (block $block21 (result i32)
874 (drop
875 (i32.const 32)
876 )
877 (i32.const 42)
878 )
879 (block $block22 (result i32)
880 (drop
881 (i32.const 52)
882 )
883 (i32.const 62)
884 )
885 (unreachable)
886 )
887 )
888 (func $atomics (type $3)
889 (drop
890 (i32.atomic.rmw.cmpxchg ;; mergeblock logic should be same as select
891 (block $block0 (result i32)
892 (drop
893 (i32.const 10)
894 )
895 (i32.const 20)
896 )
897 (block $block1 (result i32)
898 (drop
899 (i32.const 30)
900 )
901 (i32.const 40)
902 )
903 (block $block2 (result i32)
904 (drop
905 (i32.const 50)
906 )
907 (i32.const 60)
908 )
909 )
910 )
911 (drop
912 (i32.atomic.rmw.add ;; atomicrmw is like a binary
913 (block $block1 (result i32)
914 (drop
915 (i32.const 10)
916 )
917 (i32.const 20)
918 )
919 (i32.const 30)
920 )
921 )
922 )
923 (func $mix-select (param $x i32)
924 (drop
925 (select
926 (get_local $x)
927 (get_local $x)
928 (block (result i32)
929 (set_local $x ;; cannot be moved before the gets
930 (i32.const 1)
931 )
932 (i32.const 2)
933 )
934 )
935 )
936 )
937 (func $block-type-change (type $3)
938 (local $0 f64)
939 (local $1 f64)
940 (if
941 (f64.gt
942 (get_local $0)
943 (block $block0 (result f64)
944 (nop)
945 (get_local $1)
946 )
947 )
948 (nop)
949 )
950 )
951 (func $do-reorder (param $x i32)
952 (local $y i32)
953 (if (i32.const 1)
954 (block
955 (set_local $x
956 (i32.le_u
957 (get_local $x)
958 (block (result i32)
959 (set_local $y (i32.const 5))
960 (i32.const 10)
961 )
962 )
963 )
964 )
965 )
966 )
967 (func $do-not-reorder (param $x i32)
968 (local $y i32)
969 (if (i32.const 1)
970 (block
971 (set_local $x
972 (i32.le_u
973 (get_local $y)
974 (block (result i32)
975 (set_local $y (i32.const 5))
976 (i32.const 10)
977 )
978 )
979 )
980 )
981 )
982 )
983 (func $return-different-type (result i32)
984 (drop
985 (f64.abs
986 (return
987 (block (result i32) ;; when we flip the block out, it should have an ok type for the (dead) f64 op
988 (drop (i32.const 2))
989 (i32.const 1)
990 )
991 )
992 )
993 )
994 (unreachable)
995 )
996
997 (func $drop-unreachable (result i32)
998 (local $0 i32)
999 (block $label$1 (result i32)
1000 (drop
1001 (block (result i32)
1002 (unreachable)
1003 )
1004 )
1005 (unreachable)
1006 )
1007 )
1008 (func $concrete_finale_in_unreachable (result f64)
1009 (block $label$0 (result f64)
1010 (drop
1011 (block (result f64)
1012 (unreachable)
1013 (f64.const 6.322092475576799e-96)
1014 )
1015 )
1016 (f64.const -1)
1017 )
1018 )
1019 (func $dont-move-unreachable
1020 (loop $label$0
1021 (drop
1022 (block $label$3 (result i32)
1023 (br $label$0)
1024 (i32.const 1)
1025 )
1026 )
1027 )
1028 )
1029 (func $dont-move-unreachable-last
1030 (loop $label$0
1031 (drop
1032 (block $label$3 (result i32)
1033 (call $dont-move-unreachable-last)
1034 (br $label$0)
1035 )
1036 )
1037 )
1038 )
1039 (func $move-around-unreachable-in-middle
1040 (loop $label$0
1041 (drop
1042 (block $label$2 (result i32)
1043 (block $block2
1044 (nop)
1045 )
1046 (block $label$3 (result i32)
1047 (drop
1048 (br_if $label$3
1049 (br $label$0)
1050 (i32.const 0)
1051 )
1052 )
1053 (i32.const 1)
1054 )
1055 )
1056 )
1057 )
1058 )
1059 (func $drop-unreachable-block-with-concrete-final
1060 (drop
1061 (block (result i32)
1062 (drop
1063 (block
1064 (drop
1065 (return)
1066 )
1067 )
1068 )
1069 (i32.const -452)
1070 )
1071 )
1072 )
1073 (func $merging-with-unreachable-in-middle (result i32)
1074 (block $label$1 (result i32)
1075 (block (result i32)
1076 (return
1077 (i32.const 21536)
1078 )
1079 (block $label$15
1080 (br $label$15)
1081 )
1082 (i32.const 19299)
1083 )
1084 )
1085 )
1086 (func $remove-br-after-unreachable
1087 (block $label$9
1088 (drop
1089 (block
1090 (block
1091 (return)
1092 (br $label$9) ;; removing this leads to the block becoming unreachable
1093 )
1094 )
1095 )
1096 )
1097 )
1098)
1099