1 USING: compiler.cfg.value-numbering compiler.cfg.instructions
2 compiler.cfg.registers compiler.cfg.debugger compiler.cfg.comparisons
3 cpu.architecture tools.test kernel math combinators.short-circuit
4 accessors sequences compiler.cfg.predecessors locals compiler.cfg.dce
5 compiler.cfg.ssa.destruction compiler.cfg.loop-detection
6 compiler.cfg.representations compiler.cfg assocs vectors arrays
7 layouts literals namespaces alien ;
8 IN: compiler.cfg.value-numbering.tests
10 : trim-temps ( insns -- insns )
15 [ ##compare-float-unordered? ]
16 [ ##compare-float-ordered? ]
18 [ ##test-vector-branch? ]
19 } 1|| [ f >>temp ] when
22 ! Folding constants together
25 T{ ##load-constant f 0 0.0 }
26 T{ ##load-constant f 1 -0.0 }
27 T{ ##replace f 0 D 0 }
28 T{ ##replace f 1 D 1 }
32 T{ ##load-constant f 0 0.0 }
33 T{ ##load-constant f 1 -0.0 }
34 T{ ##replace f 0 D 0 }
35 T{ ##replace f 1 D 1 }
36 } value-numbering-step
41 T{ ##load-constant f 0 0.0 }
42 T{ ##copy f 1 0 any-rep }
43 T{ ##replace f 0 D 0 }
44 T{ ##replace f 1 D 1 }
48 T{ ##load-constant f 0 0.0 }
49 T{ ##load-constant f 1 0.0 }
50 T{ ##replace f 0 D 0 }
51 T{ ##replace f 1 D 1 }
52 } value-numbering-step
57 T{ ##load-constant f 0 t }
58 T{ ##copy f 1 0 any-rep }
59 T{ ##replace f 0 D 0 }
60 T{ ##replace f 1 D 1 }
64 T{ ##load-constant f 0 t }
65 T{ ##load-constant f 1 t }
66 T{ ##replace f 0 D 0 }
67 T{ ##replace f 1 D 1 }
68 } value-numbering-step
74 T{ ##load-reference f 1 + }
76 T{ ##compare f 4 2 1 cc> }
77 T{ ##copy f 6 4 any-rep }
78 T{ ##replace f 6 D 0 }
82 T{ ##load-reference f 1 + }
84 T{ ##compare f 4 2 1 cc> }
85 T{ ##compare-imm f 6 4 5 cc/= }
86 T{ ##replace f 6 D 0 }
87 } value-numbering-step trim-temps
92 T{ ##load-reference f 1 + }
94 T{ ##compare f 4 2 1 cc<= }
95 T{ ##compare f 6 2 1 cc/<= }
96 T{ ##replace f 6 D 0 }
100 T{ ##load-reference f 1 + }
102 T{ ##compare f 4 2 1 cc<= }
103 T{ ##compare-imm f 6 4 5 cc= }
104 T{ ##replace f 6 D 0 }
105 } value-numbering-step trim-temps
112 T{ ##compare-float-unordered f 12 8 9 cc< }
113 T{ ##compare-float-unordered f 14 8 9 cc/< }
114 T{ ##replace f 14 D 0 }
120 T{ ##compare-float-unordered f 12 8 9 cc< }
121 T{ ##compare-imm f 14 12 5 cc= }
122 T{ ##replace f 14 D 0 }
123 } value-numbering-step trim-temps
128 T{ ##peek f 29 D -1 }
129 T{ ##peek f 30 D -2 }
130 T{ ##compare f 33 29 30 cc<= }
131 T{ ##compare-branch f 29 30 cc<= }
135 T{ ##peek f 29 D -1 }
136 T{ ##peek f 30 D -2 }
137 T{ ##compare f 33 29 30 cc<= }
138 T{ ##compare-imm-branch f 33 5 cc/= }
139 } value-numbering-step trim-temps
145 T{ ##test-vector f 2 1 f float-4-rep vcc-any }
146 T{ ##test-vector-branch f 1 f float-4-rep vcc-any }
151 T{ ##test-vector f 2 1 f float-4-rep vcc-any }
152 T{ ##compare-imm-branch f 2 5 cc/= }
153 } value-numbering-step trim-temps
156 ! Immediate operand conversion
160 T{ ##load-immediate f 1 100 }
161 T{ ##add-imm f 2 0 100 }
166 T{ ##load-immediate f 1 100 }
168 } value-numbering-step
174 T{ ##load-immediate f 1 100 }
175 T{ ##add-imm f 2 0 100 }
180 T{ ##load-immediate f 1 100 }
182 } value-numbering-step
188 T{ ##load-immediate f 1 100 }
189 T{ ##add-imm f 2 0 -100 }
194 T{ ##load-immediate f 1 100 }
196 } value-numbering-step
202 T{ ##load-immediate f 1 0 }
208 } value-numbering-step
214 T{ ##load-immediate f 1 100 }
215 T{ ##mul-imm f 2 0 100 }
220 T{ ##load-immediate f 1 100 }
222 } value-numbering-step
228 T{ ##load-immediate f 1 100 }
229 T{ ##mul-imm f 2 0 100 }
234 T{ ##load-immediate f 1 100 }
236 } value-numbering-step
242 T{ ##shl-imm f 2 1 3 }
247 T{ ##mul-imm f 2 1 8 }
248 } value-numbering-step
254 T{ ##load-immediate f 1 -1 }
260 T{ ##load-immediate f 1 -1 }
262 } value-numbering-step
268 T{ ##load-immediate f 1 -1 }
274 T{ ##load-immediate f 1 -1 }
276 } value-numbering-step
282 T{ ##load-immediate f 1 0 }
288 T{ ##load-immediate f 1 0 }
290 } value-numbering-step
296 T{ ##load-immediate f 1 0 }
298 T{ ##copy f 3 0 any-rep }
303 T{ ##load-immediate f 1 0 }
306 } value-numbering-step
313 T{ ##copy f 2 0 any-rep }
320 } value-numbering-step
326 T{ ##load-immediate f 1 100 }
327 T{ ##and-imm f 2 0 100 }
332 T{ ##load-immediate f 1 100 }
334 } value-numbering-step
340 T{ ##load-immediate f 1 100 }
341 T{ ##and-imm f 2 0 100 }
346 T{ ##load-immediate f 1 100 }
348 } value-numbering-step
354 T{ ##load-immediate f 1 100 }
355 T{ ##or-imm f 2 0 100 }
360 T{ ##load-immediate f 1 100 }
362 } value-numbering-step
368 T{ ##load-immediate f 1 100 }
369 T{ ##or-imm f 2 0 100 }
374 T{ ##load-immediate f 1 100 }
376 } value-numbering-step
382 T{ ##load-immediate f 1 100 }
383 T{ ##xor-imm f 2 0 100 }
388 T{ ##load-immediate f 1 100 }
390 } value-numbering-step
396 T{ ##load-immediate f 1 100 }
397 T{ ##xor-imm f 2 0 100 }
402 T{ ##load-immediate f 1 100 }
404 } value-numbering-step
410 T{ ##load-immediate f 1 100 }
411 T{ ##compare-imm f 2 0 100 cc<= }
416 T{ ##load-immediate f 1 100 }
417 T{ ##compare f 2 0 1 cc<= }
418 } value-numbering-step trim-temps
424 T{ ##load-constant f 1 3.5 }
425 T{ ##compare f 2 0 1 cc= }
430 T{ ##load-constant f 1 3.5 }
431 T{ ##compare f 2 0 1 cc= }
432 } value-numbering-step trim-temps
438 T{ ##load-immediate f 1 100 }
439 T{ ##compare-imm f 2 0 100 cc>= }
444 T{ ##load-immediate f 1 100 }
445 T{ ##compare f 2 1 0 cc<= }
446 } value-numbering-step trim-temps
452 T{ ##load-immediate f 1 100 }
453 T{ ##compare-imm-branch f 0 100 cc<= }
458 T{ ##load-immediate f 1 100 }
459 T{ ##compare-branch f 0 1 cc<= }
460 } value-numbering-step
466 T{ ##load-constant f 1 3.5 }
467 T{ ##compare-branch f 0 1 cc= }
472 T{ ##load-constant f 1 3.5 }
473 T{ ##compare-branch f 0 1 cc= }
474 } value-numbering-step trim-temps
480 T{ ##load-immediate f 1 100 }
481 T{ ##compare-imm-branch f 0 100 cc>= }
486 T{ ##load-immediate f 1 100 }
487 T{ ##compare-branch f 1 0 cc<= }
488 } value-numbering-step trim-temps
495 T{ ##load-immediate f 1 100 }
496 T{ ##add-imm f 2 0 100 }
497 T{ ##load-immediate f 3 50 }
498 T{ ##add-imm f 4 0 150 }
503 T{ ##load-immediate f 1 100 }
505 T{ ##load-immediate f 3 50 }
507 } value-numbering-step
513 T{ ##load-immediate f 1 100 }
514 T{ ##add-imm f 2 0 100 }
515 T{ ##load-immediate f 3 50 }
516 T{ ##add-imm f 4 0 150 }
521 T{ ##load-immediate f 1 100 }
523 T{ ##load-immediate f 3 50 }
525 } value-numbering-step
531 T{ ##load-immediate f 1 100 }
532 T{ ##add-imm f 2 0 100 }
533 T{ ##load-immediate f 3 50 }
534 T{ ##add-imm f 4 0 50 }
539 T{ ##load-immediate f 1 100 }
541 T{ ##load-immediate f 3 50 }
543 } value-numbering-step
549 T{ ##load-immediate f 1 100 }
550 T{ ##add-imm f 2 0 -100 }
551 T{ ##load-immediate f 3 50 }
552 T{ ##add-imm f 4 0 -150 }
557 T{ ##load-immediate f 1 100 }
559 T{ ##load-immediate f 3 50 }
561 } value-numbering-step
567 T{ ##load-immediate f 1 100 }
568 T{ ##mul-imm f 2 0 100 }
569 T{ ##load-immediate f 3 50 }
570 T{ ##mul-imm f 4 0 5000 }
575 T{ ##load-immediate f 1 100 }
577 T{ ##load-immediate f 3 50 }
579 } value-numbering-step
585 T{ ##load-immediate f 1 100 }
586 T{ ##mul-imm f 2 0 100 }
587 T{ ##load-immediate f 3 50 }
588 T{ ##mul-imm f 4 0 5000 }
593 T{ ##load-immediate f 1 100 }
595 T{ ##load-immediate f 3 50 }
597 } value-numbering-step
603 T{ ##load-immediate f 1 100 }
604 T{ ##and-imm f 2 0 100 }
605 T{ ##load-immediate f 3 50 }
606 T{ ##and-imm f 4 0 32 }
611 T{ ##load-immediate f 1 100 }
613 T{ ##load-immediate f 3 50 }
615 } value-numbering-step
621 T{ ##load-immediate f 1 100 }
622 T{ ##and-imm f 2 0 100 }
623 T{ ##load-immediate f 3 50 }
624 T{ ##and-imm f 4 0 32 }
629 T{ ##load-immediate f 1 100 }
631 T{ ##load-immediate f 3 50 }
633 } value-numbering-step
639 T{ ##load-immediate f 1 100 }
640 T{ ##or-imm f 2 0 100 }
641 T{ ##load-immediate f 3 50 }
642 T{ ##or-imm f 4 0 118 }
647 T{ ##load-immediate f 1 100 }
649 T{ ##load-immediate f 3 50 }
651 } value-numbering-step
657 T{ ##load-immediate f 1 100 }
658 T{ ##or-imm f 2 0 100 }
659 T{ ##load-immediate f 3 50 }
660 T{ ##or-imm f 4 0 118 }
665 T{ ##load-immediate f 1 100 }
667 T{ ##load-immediate f 3 50 }
669 } value-numbering-step
675 T{ ##load-immediate f 1 100 }
676 T{ ##xor-imm f 2 0 100 }
677 T{ ##load-immediate f 3 50 }
678 T{ ##xor-imm f 4 0 86 }
683 T{ ##load-immediate f 1 100 }
685 T{ ##load-immediate f 3 50 }
687 } value-numbering-step
693 T{ ##load-immediate f 1 100 }
694 T{ ##xor-imm f 2 0 100 }
695 T{ ##load-immediate f 3 50 }
696 T{ ##xor-imm f 4 0 86 }
701 T{ ##load-immediate f 1 100 }
703 T{ ##load-immediate f 3 50 }
705 } value-numbering-step
713 T{ ##load-immediate f 2 0 }
714 T{ ##copy f 3 0 any-rep }
715 T{ ##replace f 3 D 0 }
723 T{ ##replace f 3 D 0 }
724 } value-numbering-step
731 T{ ##load-immediate f 2 0 }
732 T{ ##copy f 3 0 any-rep }
733 T{ ##replace f 3 D 0 }
741 T{ ##replace f 3 D 0 }
742 } value-numbering-step
749 T{ ##load-immediate f 2 0 }
750 T{ ##copy f 3 0 any-rep }
751 T{ ##replace f 3 D 0 }
759 T{ ##replace f 3 D 0 }
760 } value-numbering-step
767 T{ ##load-immediate f 2 0 }
768 T{ ##copy f 3 0 any-rep }
769 T{ ##replace f 3 D 0 }
777 T{ ##replace f 3 D 0 }
778 } value-numbering-step
784 T{ ##load-immediate f 1 1 }
785 T{ ##copy f 2 0 any-rep }
786 T{ ##replace f 2 D 0 }
791 T{ ##load-immediate f 1 1 }
793 T{ ##replace f 2 D 0 }
794 } value-numbering-step
801 T{ ##load-immediate f 1 1 }
802 T{ ##load-immediate f 2 3 }
803 T{ ##load-immediate f 3 4 }
808 T{ ##load-immediate f 1 1 }
809 T{ ##load-immediate f 2 3 }
811 } value-numbering-step
817 T{ ##load-immediate f 1 1 }
818 T{ ##load-immediate f 2 3 }
819 T{ ##load-immediate f 3 -2 }
824 T{ ##load-immediate f 1 1 }
825 T{ ##load-immediate f 2 3 }
827 } value-numbering-step
833 T{ ##load-immediate f 1 2 }
834 T{ ##load-immediate f 2 3 }
835 T{ ##load-immediate f 3 6 }
840 T{ ##load-immediate f 1 2 }
841 T{ ##load-immediate f 2 3 }
843 } value-numbering-step
849 T{ ##load-immediate f 1 2 }
850 T{ ##load-immediate f 2 1 }
851 T{ ##load-immediate f 3 0 }
856 T{ ##load-immediate f 1 2 }
857 T{ ##load-immediate f 2 1 }
859 } value-numbering-step
865 T{ ##load-immediate f 1 2 }
866 T{ ##load-immediate f 2 1 }
867 T{ ##load-immediate f 3 3 }
872 T{ ##load-immediate f 1 2 }
873 T{ ##load-immediate f 2 1 }
875 } value-numbering-step
881 T{ ##load-immediate f 1 2 }
882 T{ ##load-immediate f 2 3 }
883 T{ ##load-immediate f 3 1 }
888 T{ ##load-immediate f 1 2 }
889 T{ ##load-immediate f 2 3 }
891 } value-numbering-step
897 T{ ##load-immediate f 1 1 }
898 T{ ##load-immediate f 3 8 }
903 T{ ##load-immediate f 1 1 }
904 T{ ##shl-imm f 3 1 3 }
905 } value-numbering-step
912 T{ ##load-immediate f 1 -1 }
913 T{ ##load-immediate f 3 HEX: ffffffffffff }
918 T{ ##load-immediate f 1 -1 }
919 T{ ##shr-imm f 3 1 16 }
920 } value-numbering-step
927 T{ ##load-immediate f 1 -8 }
928 T{ ##load-immediate f 3 -4 }
933 T{ ##load-immediate f 1 -8 }
934 T{ ##sar-imm f 3 1 1 }
935 } value-numbering-step
942 T{ ##load-immediate f 1 65536 }
943 T{ ##load-immediate f 2 140737488355328 }
949 T{ ##load-immediate f 1 65536 }
950 T{ ##shl-imm f 2 1 31 }
952 } value-numbering-step
958 T{ ##load-immediate f 2 140737488355328 }
964 T{ ##load-immediate f 2 140737488355328 }
966 } value-numbering-step
972 T{ ##load-immediate f 2 2147483647 }
973 T{ ##add-imm f 3 0 2147483647 }
974 T{ ##add-imm f 4 3 2147483647 }
979 T{ ##load-immediate f 2 2147483647 }
982 } value-numbering-step
989 T{ ##load-immediate f 1 1 }
990 T{ ##load-immediate f 2 -1 }
995 T{ ##load-immediate f 1 1 }
997 } value-numbering-step
1003 T{ ##load-immediate f 1 1 }
1004 T{ ##load-immediate f 2 -2 }
1009 T{ ##load-immediate f 1 1 }
1011 } value-numbering-step
1014 ! Displaced alien optimizations
1015 3 vreg-counter set-global
1020 T{ ##load-immediate f 2 16 }
1021 T{ ##box-displaced-alien f 1 2 0 c-ptr }
1022 T{ ##unbox-any-c-ptr f 4 0 }
1023 T{ ##add-imm f 3 4 16 }
1028 T{ ##load-immediate f 2 16 }
1029 T{ ##box-displaced-alien f 1 2 0 c-ptr }
1030 T{ ##unbox-any-c-ptr f 3 1 }
1031 } value-numbering-step
1034 4 vreg-counter set-global
1038 T{ ##box-alien f 0 1 }
1039 T{ ##load-immediate f 2 16 }
1040 T{ ##box-displaced-alien f 3 2 0 c-ptr }
1041 T{ ##copy f 5 1 any-rep }
1042 T{ ##add-imm f 4 5 16 }
1046 T{ ##box-alien f 0 1 }
1047 T{ ##load-immediate f 2 16 }
1048 T{ ##box-displaced-alien f 3 2 0 c-ptr }
1049 T{ ##unbox-any-c-ptr f 4 3 }
1050 } value-numbering-step
1053 3 vreg-counter set-global
1058 T{ ##load-immediate f 2 0 }
1059 T{ ##copy f 3 0 any-rep }
1060 T{ ##replace f 3 D 1 }
1065 T{ ##load-immediate f 2 0 }
1066 T{ ##box-displaced-alien f 3 2 0 c-ptr }
1067 T{ ##replace f 3 D 1 }
1068 } value-numbering-step
1074 T{ ##load-immediate f 1 1 }
1075 T{ ##load-immediate f 2 2 }
1076 T{ ##load-immediate f 3 5 }
1080 T{ ##load-immediate f 1 1 }
1081 T{ ##load-immediate f 2 2 }
1082 T{ ##compare f 3 1 2 cc= }
1083 } value-numbering-step
1088 T{ ##load-immediate f 1 1 }
1089 T{ ##load-immediate f 2 2 }
1090 T{ ##load-constant f 3 t }
1094 T{ ##load-immediate f 1 1 }
1095 T{ ##load-immediate f 2 2 }
1096 T{ ##compare f 3 1 2 cc/= }
1097 } value-numbering-step
1102 T{ ##load-immediate f 1 1 }
1103 T{ ##load-immediate f 2 2 }
1104 T{ ##load-constant f 3 t }
1108 T{ ##load-immediate f 1 1 }
1109 T{ ##load-immediate f 2 2 }
1110 T{ ##compare f 3 1 2 cc< }
1111 } value-numbering-step
1116 T{ ##load-immediate f 1 1 }
1117 T{ ##load-immediate f 2 2 }
1118 T{ ##load-immediate f 3 5 }
1122 T{ ##load-immediate f 1 1 }
1123 T{ ##load-immediate f 2 2 }
1124 T{ ##compare f 3 2 1 cc< }
1125 } value-numbering-step
1131 T{ ##load-immediate f 1 5 }
1136 T{ ##compare f 1 0 0 cc< }
1137 } value-numbering-step
1143 T{ ##load-constant f 1 t }
1148 T{ ##compare f 1 0 0 cc<= }
1149 } value-numbering-step
1155 T{ ##load-immediate f 1 5 }
1160 T{ ##compare f 1 0 0 cc> }
1161 } value-numbering-step
1167 T{ ##load-constant f 1 t }
1172 T{ ##compare f 1 0 0 cc>= }
1173 } value-numbering-step
1179 T{ ##load-immediate f 1 5 }
1184 T{ ##compare f 1 0 0 cc/= }
1185 } value-numbering-step
1191 T{ ##load-constant f 1 t }
1196 T{ ##compare f 1 0 0 cc= }
1197 } value-numbering-step
1202 T{ ##vector>scalar f 1 0 float-4-rep }
1203 T{ ##copy f 2 0 any-rep }
1207 T{ ##vector>scalar f 1 0 float-4-rep }
1208 T{ ##scalar>vector f 2 1 float-4-rep }
1209 } value-numbering-step
1214 T{ ##copy f 1 0 any-rep }
1218 T{ ##shuffle-vector-imm f 1 0 { 0 1 2 3 } float-4-rep }
1219 } value-numbering-step
1224 T{ ##shuffle-vector-imm f 1 0 { 1 2 3 0 } float-4-rep }
1225 T{ ##shuffle-vector-imm f 2 0 { 0 2 3 1 } float-4-rep }
1229 T{ ##shuffle-vector-imm f 1 0 { 1 2 3 0 } float-4-rep }
1230 T{ ##shuffle-vector-imm f 2 1 { 3 1 2 0 } float-4-rep }
1231 } value-numbering-step
1236 T{ ##shuffle-vector-imm f 1 0 { 1 2 3 0 } float-4-rep }
1237 T{ ##shuffle-vector-imm f 2 1 { 1 0 } double-2-rep }
1241 T{ ##shuffle-vector-imm f 1 0 { 1 2 3 0 } float-4-rep }
1242 T{ ##shuffle-vector-imm f 2 1 { 1 0 } double-2-rep }
1243 } value-numbering-step
1248 T{ ##load-constant f 0 $[ 55 tag-fixnum ] }
1249 T{ ##load-constant f 1 B{ 55 0 0 0 55 0 0 0 55 0 0 0 55 0 0 0 } }
1250 T{ ##copy f 2 1 any-rep }
1254 T{ ##load-constant f 0 $[ 55 tag-fixnum ] }
1255 T{ ##scalar>vector f 1 0 int-4-rep }
1256 T{ ##shuffle-vector-imm f 2 1 { 0 0 0 0 } float-4-rep }
1257 } value-numbering-step
1262 T{ ##load-constant f 0 1.25 }
1263 T{ ##load-constant f 1 B{ 0 0 160 63 0 0 160 63 0 0 160 63 0 0 160 63 } }
1264 T{ ##copy f 2 1 any-rep }
1268 T{ ##load-constant f 0 1.25 }
1269 T{ ##scalar>vector f 1 0 float-4-rep }
1270 T{ ##shuffle-vector-imm f 2 1 { 0 0 0 0 } float-4-rep }
1271 } value-numbering-step
1276 T{ ##zero-vector f 2 float-4-rep }
1280 T{ ##xor-vector f 2 1 1 float-4-rep }
1281 } value-numbering-step
1284 : test-branch-folding ( insns -- insns' n )
1286 [ V{ 0 1 } clone >>successors basic-block set value-numbering-step ] keep
1287 successors>> first ;
1291 T{ ##load-immediate f 1 1 }
1292 T{ ##load-immediate f 2 2 }
1298 T{ ##load-immediate f 1 1 }
1299 T{ ##load-immediate f 2 2 }
1300 T{ ##compare-branch f 1 2 cc= }
1301 } test-branch-folding
1306 T{ ##load-immediate f 1 1 }
1307 T{ ##load-immediate f 2 2 }
1313 T{ ##load-immediate f 1 1 }
1314 T{ ##load-immediate f 2 2 }
1315 T{ ##compare-branch f 1 2 cc/= }
1316 } test-branch-folding
1321 T{ ##load-immediate f 1 1 }
1322 T{ ##load-immediate f 2 2 }
1328 T{ ##load-immediate f 1 1 }
1329 T{ ##load-immediate f 2 2 }
1330 T{ ##compare-branch f 1 2 cc< }
1331 } test-branch-folding
1336 T{ ##load-immediate f 1 1 }
1337 T{ ##load-immediate f 2 2 }
1343 T{ ##load-immediate f 1 1 }
1344 T{ ##load-immediate f 2 2 }
1345 T{ ##compare-branch f 2 1 cc< }
1346 } test-branch-folding
1358 T{ ##compare-branch f 0 0 cc< }
1359 } test-branch-folding
1371 T{ ##compare-branch f 0 0 cc<= }
1372 } test-branch-folding
1384 T{ ##compare-branch f 0 0 cc> }
1385 } test-branch-folding
1397 T{ ##compare-branch f 0 0 cc>= }
1398 } test-branch-folding
1410 T{ ##compare-branch f 0 0 cc= }
1411 } test-branch-folding
1423 T{ ##compare-branch f 0 0 cc/= }
1424 } test-branch-folding
1430 T{ ##load-constant f 1 t }
1437 T{ ##compare f 1 0 0 cc<= }
1438 T{ ##compare-imm-branch f 1 5 cc/= }
1439 } test-branch-folding
1442 ! More branch folding tests
1443 V{ T{ ##branch } } 0 test-bb
1447 T{ ##compare-branch f 0 0 cc< }
1451 T{ ##load-immediate f 1 1 }
1456 T{ ##load-immediate f 2 2 }
1461 T{ ##phi f 3 H{ { 2 1 } { 3 2 } } }
1462 T{ ##replace f 3 D 0 }
1469 cfg new 0 get >>entry dup cfg set
1471 select-representations
1475 [ 1 ] [ 1 get successors>> length ] unit-test
1477 [ t ] [ 1 get successors>> first 3 get eq? ] unit-test
1479 [ 2 ] [ 4 get instructions>> length ] unit-test
1488 T{ ##compare-branch f 1 1 cc< }
1492 T{ ##copy f 2 0 any-rep }
1502 T{ ##replace f 3 D 0 }
1507 2 get 0 2array 2array 3 get instructions>> first (>>inputs)
1512 cfg new 0 get >>entry
1518 [ t ] [ 1 get successors>> first 3 get eq? ] unit-test
1520 [ 1 ] [ 3 get instructions>> first inputs>> assoc-size ] unit-test
1522 V{ T{ ##prologue } T{ ##branch } } 0 test-bb
1525 T{ ##peek { dst 15 } { loc D 0 } }
1526 T{ ##copy { dst 16 } { src 15 } { rep any-rep } }
1527 T{ ##copy { dst 17 } { src 15 } { rep any-rep } }
1528 T{ ##copy { dst 18 } { src 15 } { rep any-rep } }
1529 T{ ##copy { dst 19 } { src 15 } { rep any-rep } }
1537 T{ ##copy { dst 21 } { src 20 } { rep any-rep } }
1538 T{ ##compare-imm-branch
1546 T{ ##copy { dst 23 } { src 15 } { rep any-rep } }
1547 T{ ##copy { dst 24 } { src 15 } { rep any-rep } }
1548 T{ ##load-reference { dst 25 } { obj t } }
1553 T{ ##replace { src 25 } { loc D 0 } }
1559 T{ ##copy { dst 26 } { src 15 } { rep any-rep } }
1560 T{ ##copy { dst 27 } { src 15 } { rep any-rep } }
1570 T{ ##replace { src 28 } { loc D 0 } }
1581 cfg new 0 get >>entry
1582 value-numbering eliminate-dead-code drop
1585 [ f ] [ 1 get instructions>> [ ##peek? ] any? ] unit-test