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 compiler.cfg.value-numbering.simd
9 QUALIFIED-WITH: alien.c-types c
10 IN: compiler.cfg.value-numbering.tests
12 : trim-temps ( insns -- insns )
17 [ ##compare-integer? ]
18 [ ##compare-integer-imm? ]
19 [ ##compare-float-unordered? ]
20 [ ##compare-float-ordered? ]
24 [ ##test-vector-branch? ]
25 } 1|| [ f >>temp ] when
28 ! Folding constants together
31 T{ ##load-reference f 0 0.0 }
32 T{ ##load-reference f 1 -0.0 }
36 T{ ##load-reference f 0 0.0 }
37 T{ ##load-reference f 1 -0.0 }
38 } value-numbering-step
43 T{ ##load-reference f 0 0.0 }
44 T{ ##copy f 1 0 any-rep }
48 T{ ##load-reference f 0 0.0 }
49 T{ ##load-reference f 1 0.0 }
50 } value-numbering-step
55 T{ ##load-reference f 0 t }
56 T{ ##copy f 1 0 any-rep }
60 T{ ##load-reference f 0 t }
61 T{ ##load-reference f 1 t }
62 } value-numbering-step
65 ! ##load-reference/##replace fusion
69 T{ ##load-integer f 0 10 }
70 T{ ##replace-imm f 10 D 0 }
74 T{ ##load-integer f 0 10 }
75 T{ ##replace f 0 D 0 }
76 } value-numbering-step
81 T{ ##load-reference f 0 f }
82 T{ ##replace-imm f f D 0 }
86 T{ ##load-reference f 0 f }
87 T{ ##replace f 0 D 0 }
88 } value-numbering-step
95 T{ ##load-reference f 0 + }
96 T{ ##replace-imm f + D 0 }
100 T{ ##load-reference f 0 + }
101 T{ ##replace f 0 D 0 }
102 } value-numbering-step
109 T{ ##load-integer f 0 10,000,000,000 }
110 T{ ##replace f 0 D 0 }
114 T{ ##load-integer f 0 10,000,000,000 }
115 T{ ##replace f 0 D 0 }
116 } value-numbering-step
122 T{ ##load-integer f 0 HEX: 7fffffff }
123 T{ ##replace f 0 D 0 }
127 T{ ##load-integer f 0 HEX: 7fffffff }
128 T{ ##replace f 0 D 0 }
129 } value-numbering-step
133 ! Double compare elimination
138 T{ ##compare f 4 2 1 cc= }
139 T{ ##copy f 6 4 any-rep }
140 T{ ##replace f 6 D 0 }
146 T{ ##compare f 4 2 1 cc= }
147 T{ ##compare-imm f 6 4 f cc/= }
148 T{ ##replace f 6 D 0 }
149 } value-numbering-step trim-temps
155 T{ ##compare-imm f 2 1 16 cc= }
156 T{ ##copy f 3 2 any-rep }
157 T{ ##replace f 3 D 0 }
162 T{ ##compare-imm f 2 1 16 cc= }
163 T{ ##compare-imm f 3 2 f cc/= }
164 T{ ##replace f 3 D 0 }
165 } value-numbering-step trim-temps
172 T{ ##compare-integer f 4 2 1 cc> }
173 T{ ##copy f 6 4 any-rep }
174 T{ ##replace f 6 D 0 }
180 T{ ##compare-integer f 4 2 1 cc> }
181 T{ ##compare-imm f 6 4 f cc/= }
182 T{ ##replace f 6 D 0 }
183 } value-numbering-step trim-temps
190 T{ ##compare-integer f 4 2 1 cc<= }
191 T{ ##compare-integer f 6 2 1 cc/<= }
192 T{ ##replace f 6 D 0 }
198 T{ ##compare-integer f 4 2 1 cc<= }
199 T{ ##compare-imm f 6 4 f cc= }
200 T{ ##replace f 6 D 0 }
201 } value-numbering-step trim-temps
207 T{ ##compare-integer-imm f 2 1 100 cc<= }
208 T{ ##compare-integer-imm f 3 1 100 cc/<= }
209 T{ ##replace f 3 D 0 }
214 T{ ##compare-integer-imm f 2 1 100 cc<= }
215 T{ ##compare-imm f 3 2 f cc= }
216 T{ ##replace f 3 D 0 }
217 } value-numbering-step trim-temps
224 T{ ##compare-float-unordered f 12 8 9 cc< }
225 T{ ##compare-float-unordered f 14 8 9 cc/< }
226 T{ ##replace f 14 D 0 }
232 T{ ##compare-float-unordered f 12 8 9 cc< }
233 T{ ##compare-imm f 14 12 f cc= }
234 T{ ##replace f 14 D 0 }
235 } value-numbering-step trim-temps
240 T{ ##peek f 29 D -1 }
241 T{ ##peek f 30 D -2 }
242 T{ ##compare f 33 29 30 cc= }
243 T{ ##compare-branch f 29 30 cc= }
247 T{ ##peek f 29 D -1 }
248 T{ ##peek f 30 D -2 }
249 T{ ##compare f 33 29 30 cc= }
250 T{ ##compare-imm-branch f 33 f cc/= }
251 } value-numbering-step trim-temps
256 T{ ##peek f 29 D -1 }
257 T{ ##peek f 30 D -2 }
258 T{ ##compare-integer f 33 29 30 cc<= }
259 T{ ##compare-integer-branch f 29 30 cc<= }
263 T{ ##peek f 29 D -1 }
264 T{ ##peek f 30 D -2 }
265 T{ ##compare-integer f 33 29 30 cc<= }
266 T{ ##compare-imm-branch f 33 f cc/= }
267 } value-numbering-step trim-temps
272 T{ ##peek f 29 D -1 }
273 T{ ##peek f 30 D -2 }
274 T{ ##test f 33 29 30 cc= }
275 T{ ##test-branch f 29 30 cc= }
279 T{ ##peek f 29 D -1 }
280 T{ ##peek f 30 D -2 }
281 T{ ##test f 33 29 30 cc= }
282 T{ ##compare-imm-branch f 33 f cc/= }
283 } value-numbering-step trim-temps
288 T{ ##peek f 29 D -1 }
289 T{ ##test-imm f 33 29 30 cc= }
290 T{ ##test-imm-branch f 29 30 cc= }
294 T{ ##peek f 29 D -1 }
295 T{ ##test-imm f 33 29 30 cc= }
296 T{ ##compare-imm-branch f 33 f cc/= }
297 } value-numbering-step trim-temps
303 T{ ##test-vector f 2 1 f float-4-rep vcc-any }
304 T{ ##test-vector-branch f 1 f float-4-rep vcc-any }
309 T{ ##test-vector f 2 1 f float-4-rep vcc-any }
310 T{ ##compare-imm-branch f 2 f cc/= }
311 } value-numbering-step trim-temps
318 T{ ##compare-imm f 2 1 + cc= }
319 T{ ##compare-imm-branch f 1 + cc= }
324 T{ ##compare-imm f 2 1 + cc= }
325 T{ ##compare-imm-branch f 2 f cc/= }
326 } value-numbering-step trim-temps
330 ! Immediate operand fusion
334 T{ ##load-integer f 1 100 }
335 T{ ##add-imm f 2 0 100 }
340 T{ ##load-integer f 1 100 }
342 } value-numbering-step
348 T{ ##load-integer f 1 100 }
349 T{ ##add-imm f 2 0 100 }
354 T{ ##load-integer f 1 100 }
356 } value-numbering-step
362 T{ ##load-integer f 1 100 }
363 T{ ##add-imm f 2 0 -100 }
368 T{ ##load-integer f 1 100 }
370 } value-numbering-step
376 T{ ##load-integer f 1 0 }
382 } value-numbering-step
388 T{ ##load-integer f 1 100 }
389 T{ ##mul-imm f 2 0 100 }
394 T{ ##load-integer f 1 100 }
396 } value-numbering-step
402 T{ ##load-integer f 1 100 }
403 T{ ##mul-imm f 2 0 100 }
408 T{ ##load-integer f 1 100 }
410 } value-numbering-step
416 T{ ##shl-imm f 2 1 3 }
421 T{ ##mul-imm f 2 1 8 }
422 } value-numbering-step
428 T{ ##load-integer f 1 -1 }
434 T{ ##load-integer f 1 -1 }
436 } value-numbering-step
442 T{ ##load-integer f 1 -1 }
448 T{ ##load-integer f 1 -1 }
450 } value-numbering-step
456 T{ ##load-integer f 1 0 }
462 T{ ##load-integer f 1 0 }
464 } value-numbering-step
470 T{ ##load-integer f 1 0 }
472 T{ ##copy f 3 0 any-rep }
477 T{ ##load-integer f 1 0 }
480 } value-numbering-step
487 T{ ##copy f 2 0 any-rep }
494 } value-numbering-step
501 T{ ##copy f 2 0 any-rep }
508 } value-numbering-step
514 T{ ##load-integer f 1 100 }
515 T{ ##and-imm f 2 0 100 }
520 T{ ##load-integer f 1 100 }
522 } value-numbering-step
528 T{ ##load-integer f 1 100 }
529 T{ ##and-imm f 2 0 100 }
534 T{ ##load-integer f 1 100 }
536 } value-numbering-step
542 T{ ##load-integer f 1 100 }
543 T{ ##or-imm f 2 0 100 }
548 T{ ##load-integer f 1 100 }
550 } value-numbering-step
556 T{ ##load-integer f 1 100 }
557 T{ ##or-imm f 2 0 100 }
562 T{ ##load-integer f 1 100 }
564 } value-numbering-step
570 T{ ##load-integer f 1 100 }
571 T{ ##xor-imm f 2 0 100 }
576 T{ ##load-integer f 1 100 }
578 } value-numbering-step
584 T{ ##load-integer f 1 100 }
585 T{ ##xor-imm f 2 0 100 }
590 T{ ##load-integer f 1 100 }
592 } value-numbering-step
598 T{ ##load-integer f 1 100 }
599 T{ ##compare-imm f 2 0 100 cc= }
604 T{ ##load-integer f 1 100 }
605 T{ ##compare f 2 0 1 cc= }
606 } value-numbering-step trim-temps
612 T{ ##load-integer f 1 100 }
613 T{ ##compare-integer-imm f 2 0 100 cc<= }
618 T{ ##load-integer f 1 100 }
619 T{ ##compare-integer f 2 0 1 cc<= }
620 } value-numbering-step trim-temps
627 T{ ##load-reference f 1 + }
628 T{ ##compare-imm f 2 0 + cc= }
633 T{ ##load-reference f 1 + }
634 T{ ##compare f 2 0 1 cc= }
635 } value-numbering-step trim-temps
641 T{ ##load-reference f 1 + }
642 T{ ##compare-imm-branch f 0 + cc= }
647 T{ ##load-reference f 1 + }
648 T{ ##compare-branch f 0 1 cc= }
649 } value-numbering-step trim-temps
657 T{ ##load-reference f 1 3.5 }
658 T{ ##compare f 2 0 1 cc= }
663 T{ ##load-reference f 1 3.5 }
664 T{ ##compare f 2 0 1 cc= }
665 } value-numbering-step trim-temps
671 T{ ##load-reference f 1 3.5 }
672 T{ ##compare-branch f 0 1 cc= }
677 T{ ##load-reference f 1 3.5 }
678 T{ ##compare-branch f 0 1 cc= }
679 } value-numbering-step trim-temps
686 T{ ##load-integer f 1 100 }
687 T{ ##compare-integer-imm f 2 0 100 cc>= }
692 T{ ##load-integer f 1 100 }
693 T{ ##compare-integer f 2 1 0 cc<= }
694 } value-numbering-step trim-temps
700 T{ ##load-integer f 1 100 }
701 T{ ##compare-integer-imm-branch f 0 100 cc<= }
706 T{ ##load-integer f 1 100 }
707 T{ ##compare-integer-branch f 0 1 cc<= }
708 } value-numbering-step
714 T{ ##load-integer f 1 100 }
715 T{ ##compare-integer-imm-branch f 0 100 cc>= }
720 T{ ##load-integer f 1 100 }
721 T{ ##compare-integer-branch f 1 0 cc<= }
722 } value-numbering-step trim-temps
728 T{ ##load-integer f 1 100 }
729 T{ ##load-integer f 2 200 }
730 T{ ##load-reference f 3 t }
734 T{ ##load-integer f 1 100 }
735 T{ ##load-integer f 2 200 }
736 T{ ##compare-integer f 3 1 2 cc<= }
737 } value-numbering-step trim-temps
742 T{ ##load-integer f 1 100 }
743 T{ ##load-integer f 2 200 }
744 T{ ##load-reference f 3 f }
748 T{ ##load-integer f 1 100 }
749 T{ ##load-integer f 2 200 }
750 T{ ##compare-integer f 3 1 2 cc= }
751 } value-numbering-step trim-temps
756 T{ ##load-integer f 1 100 }
757 T{ ##load-reference f 2 f }
761 T{ ##load-integer f 1 100 }
762 T{ ##compare-integer-imm f 2 1 123 cc= }
763 } value-numbering-step trim-temps
768 T{ ##load-integer f 1 10 }
769 T{ ##load-integer f 2 20 }
770 T{ ##load-reference f 3 f }
774 T{ ##load-integer f 1 10 }
775 T{ ##load-integer f 2 20 }
776 T{ ##compare-integer f 3 1 2 cc= }
777 } value-numbering-step
782 T{ ##load-integer f 1 1 }
783 T{ ##load-integer f 2 2 }
784 T{ ##load-reference f 3 t }
788 T{ ##load-integer f 1 1 }
789 T{ ##load-integer f 2 2 }
790 T{ ##compare-integer f 3 1 2 cc/= }
791 } value-numbering-step
796 T{ ##load-integer f 1 1 }
797 T{ ##load-integer f 2 2 }
798 T{ ##load-reference f 3 t }
802 T{ ##load-integer f 1 1 }
803 T{ ##load-integer f 2 2 }
804 T{ ##compare-integer f 3 1 2 cc< }
805 } value-numbering-step
810 T{ ##load-integer f 1 10 }
811 T{ ##load-integer f 2 20 }
812 T{ ##load-reference f 3 f }
816 T{ ##load-integer f 1 10 }
817 T{ ##load-integer f 2 20 }
818 T{ ##compare-integer f 3 2 1 cc< }
819 } value-numbering-step
825 T{ ##load-reference f 1 f }
830 T{ ##compare-integer f 1 0 0 cc< }
831 } value-numbering-step
837 T{ ##copy f 1 0 any-rep }
838 T{ ##load-reference f 2 f }
843 T{ ##copy f 1 0 any-rep }
844 T{ ##compare-integer f 2 0 1 cc< }
845 } value-numbering-step
851 T{ ##load-reference f 1 t }
856 T{ ##compare-integer f 1 0 0 cc<= }
857 } value-numbering-step
863 T{ ##load-reference f 1 f }
868 T{ ##compare-integer f 1 0 0 cc> }
869 } value-numbering-step
875 T{ ##load-reference f 1 t }
880 T{ ##compare-integer f 1 0 0 cc>= }
881 } value-numbering-step
887 T{ ##load-reference f 1 f }
892 T{ ##compare-integer f 1 0 0 cc/= }
893 } value-numbering-step
899 T{ ##load-reference f 1 t }
904 T{ ##compare-integer f 1 0 0 cc= }
905 } value-numbering-step
910 T{ ##load-integer f 1 10 }
911 T{ ##load-reference f 2 t }
915 T{ ##load-integer f 1 10 }
916 T{ ##compare-imm f 2 1 10 cc= }
917 } value-numbering-step
922 T{ ##load-integer f 1 10 }
923 T{ ##load-reference f 2 f }
927 T{ ##load-integer f 1 10 }
928 T{ ##compare-imm f 2 1 20 cc= }
929 } value-numbering-step
934 T{ ##load-integer f 1 10 }
935 T{ ##load-reference f 2 t }
939 T{ ##load-integer f 1 10 }
940 T{ ##compare-imm f 2 1 100 cc/= }
941 } value-numbering-step
946 T{ ##load-integer f 1 10 }
947 T{ ##load-reference f 2 f }
951 T{ ##load-integer f 1 10 }
952 T{ ##compare-imm f 2 1 10 cc/= }
953 } value-numbering-step
959 T{ ##load-reference f 1 + }
960 T{ ##load-reference f 2 f }
964 T{ ##load-reference f 1 + }
965 T{ ##compare-imm f 2 1 + cc/= }
966 } value-numbering-step
971 T{ ##load-reference f 1 + }
972 T{ ##load-reference f 2 t }
976 T{ ##load-reference f 1 + }
977 T{ ##compare-imm f 2 1 * cc/= }
978 } value-numbering-step
983 T{ ##load-reference f 1 + }
984 T{ ##load-reference f 2 t }
988 T{ ##load-reference f 1 + }
989 T{ ##compare-imm f 2 1 + cc= }
990 } value-numbering-step
995 T{ ##load-reference f 1 + }
996 T{ ##load-reference f 2 f }
1000 T{ ##load-reference f 1 + }
1001 T{ ##compare-imm f 2 1 * cc= }
1002 } value-numbering-step
1009 T{ ##load-reference f 1 t }
1014 T{ ##compare f 1 0 0 cc= }
1015 } value-numbering-step
1021 T{ ##load-reference f 1 f }
1026 T{ ##compare f 1 0 0 cc/= }
1027 } value-numbering-step
1032 T{ ##load-integer f 1 12 }
1033 T{ ##load-reference f 3 t }
1037 T{ ##load-integer f 1 12 }
1038 T{ ##test-imm f 3 1 13 cc/= }
1039 } value-numbering-step
1044 T{ ##load-integer f 1 15 }
1045 T{ ##load-reference f 3 f }
1049 T{ ##load-integer f 1 15 }
1050 T{ ##test-imm f 3 1 16 cc/= }
1051 } value-numbering-step
1056 T{ ##load-integer f 1 12 }
1057 T{ ##load-reference f 3 f }
1061 T{ ##load-integer f 1 12 }
1062 T{ ##test-imm f 3 1 13 cc= }
1063 } value-numbering-step
1068 T{ ##load-integer f 1 15 }
1069 T{ ##load-reference f 3 t }
1073 T{ ##load-integer f 1 15 }
1074 T{ ##test-imm f 3 1 16 cc= }
1075 } value-numbering-step
1078 ! Rewriting a ##test of an ##and into a ##test
1084 T{ ##test f 3 0 1 cc= }
1091 T{ ##test f 3 2 2 cc= }
1092 } value-numbering-step
1098 T{ ##and-imm f 2 0 12 }
1099 T{ ##test-imm f 3 0 12 cc= }
1104 T{ ##and-imm f 2 0 12 }
1105 T{ ##test f 3 2 2 cc= }
1106 } value-numbering-step
1109 ! Rewriting ##test into ##test-imm
1113 T{ ##load-integer f 1 10 }
1114 T{ ##test-imm f 2 0 10 cc= }
1119 T{ ##load-integer f 1 10 }
1120 T{ ##test f 2 0 1 cc= }
1121 } value-numbering-step trim-temps
1127 T{ ##load-integer f 1 10 }
1128 T{ ##test-imm f 2 0 10 cc= }
1133 T{ ##load-integer f 1 10 }
1134 T{ ##test f 2 1 0 cc= }
1135 } value-numbering-step trim-temps
1141 T{ ##load-integer f 1 10 }
1142 T{ ##test-imm-branch f 0 10 cc= }
1147 T{ ##load-integer f 1 10 }
1148 T{ ##test-branch f 0 1 cc= }
1149 } value-numbering-step
1155 T{ ##load-integer f 1 10 }
1156 T{ ##test-imm-branch f 0 10 cc= }
1161 T{ ##load-integer f 1 10 }
1162 T{ ##test-branch f 1 0 cc= }
1163 } value-numbering-step
1169 T{ ##load-integer f 1 10 }
1170 T{ ##test-imm-branch f 0 10 cc= }
1175 T{ ##load-integer f 1 10 }
1176 T{ ##test-branch f 1 0 cc= }
1177 } value-numbering-step
1180 ! Make sure the immediate fits
1185 T{ ##load-integer f 1 100000000000 }
1186 T{ ##test f 2 1 0 cc= }
1191 T{ ##load-integer f 1 100000000000 }
1192 T{ ##test f 2 1 0 cc= }
1193 } value-numbering-step
1199 T{ ##load-integer f 1 100000000000 }
1200 T{ ##test-branch f 1 0 cc= }
1205 T{ ##load-integer f 1 100000000000 }
1206 T{ ##test-branch f 1 0 cc= }
1207 } value-numbering-step
1211 ! Rewriting ##compare into ##test
1216 T{ ##test f 1 0 0 cc= }
1221 T{ ##compare-integer-imm f 1 0 0 cc= }
1222 } value-numbering-step
1228 T{ ##test f 1 0 0 cc/= }
1233 T{ ##compare-integer-imm f 1 0 0 cc/= }
1234 } value-numbering-step
1240 T{ ##compare-integer-imm f 1 0 0 cc<= }
1245 T{ ##compare-integer-imm f 1 0 0 cc<= }
1246 } value-numbering-step
1252 T{ ##test-branch f 0 0 cc= }
1257 T{ ##compare-integer-imm-branch f 0 0 cc= }
1258 } value-numbering-step
1264 T{ ##test-branch f 0 0 cc/= }
1269 T{ ##compare-integer-imm-branch f 0 0 cc/= }
1270 } value-numbering-step
1276 T{ ##compare-integer-imm-branch f 0 0 cc<= }
1281 T{ ##compare-integer-imm-branch f 0 0 cc<= }
1282 } value-numbering-step
1290 T{ ##load-integer f 1 100 }
1291 T{ ##add-imm f 2 0 100 }
1292 T{ ##load-integer f 3 50 }
1293 T{ ##add-imm f 4 0 150 }
1298 T{ ##load-integer f 1 100 }
1300 T{ ##load-integer f 3 50 }
1302 } value-numbering-step
1308 T{ ##load-integer f 1 100 }
1309 T{ ##add-imm f 2 0 100 }
1310 T{ ##load-integer f 3 50 }
1311 T{ ##add-imm f 4 0 150 }
1316 T{ ##load-integer f 1 100 }
1318 T{ ##load-integer f 3 50 }
1320 } value-numbering-step
1326 T{ ##load-integer f 1 100 }
1327 T{ ##add-imm f 2 0 100 }
1328 T{ ##load-integer f 3 50 }
1329 T{ ##add-imm f 4 0 50 }
1334 T{ ##load-integer f 1 100 }
1336 T{ ##load-integer f 3 50 }
1338 } value-numbering-step
1344 T{ ##load-integer f 1 100 }
1345 T{ ##add-imm f 2 0 -100 }
1346 T{ ##load-integer f 3 50 }
1347 T{ ##add-imm f 4 0 -150 }
1352 T{ ##load-integer f 1 100 }
1354 T{ ##load-integer f 3 50 }
1356 } value-numbering-step
1362 T{ ##load-integer f 1 100 }
1363 T{ ##mul-imm f 2 0 100 }
1364 T{ ##load-integer f 3 50 }
1365 T{ ##mul-imm f 4 0 5000 }
1370 T{ ##load-integer f 1 100 }
1372 T{ ##load-integer f 3 50 }
1374 } value-numbering-step
1380 T{ ##load-integer f 1 100 }
1381 T{ ##mul-imm f 2 0 100 }
1382 T{ ##load-integer f 3 50 }
1383 T{ ##mul-imm f 4 0 5000 }
1388 T{ ##load-integer f 1 100 }
1390 T{ ##load-integer f 3 50 }
1392 } value-numbering-step
1398 T{ ##load-integer f 1 100 }
1399 T{ ##and-imm f 2 0 100 }
1400 T{ ##load-integer f 3 50 }
1401 T{ ##and-imm f 4 0 32 }
1406 T{ ##load-integer f 1 100 }
1408 T{ ##load-integer f 3 50 }
1410 } value-numbering-step
1416 T{ ##load-integer f 1 100 }
1417 T{ ##and-imm f 2 0 100 }
1418 T{ ##load-integer f 3 50 }
1419 T{ ##and-imm f 4 0 32 }
1424 T{ ##load-integer f 1 100 }
1426 T{ ##load-integer f 3 50 }
1428 } value-numbering-step
1434 T{ ##load-integer f 1 100 }
1435 T{ ##or-imm f 2 0 100 }
1436 T{ ##load-integer f 3 50 }
1437 T{ ##or-imm f 4 0 118 }
1442 T{ ##load-integer f 1 100 }
1444 T{ ##load-integer f 3 50 }
1446 } value-numbering-step
1452 T{ ##load-integer f 1 100 }
1453 T{ ##or-imm f 2 0 100 }
1454 T{ ##load-integer f 3 50 }
1455 T{ ##or-imm f 4 0 118 }
1460 T{ ##load-integer f 1 100 }
1462 T{ ##load-integer f 3 50 }
1464 } value-numbering-step
1470 T{ ##load-integer f 1 100 }
1471 T{ ##xor-imm f 2 0 100 }
1472 T{ ##load-integer f 3 50 }
1473 T{ ##xor-imm f 4 0 86 }
1478 T{ ##load-integer f 1 100 }
1480 T{ ##load-integer f 3 50 }
1482 } value-numbering-step
1488 T{ ##load-integer f 1 100 }
1489 T{ ##xor-imm f 2 0 100 }
1490 T{ ##load-integer f 3 50 }
1491 T{ ##xor-imm f 4 0 86 }
1496 T{ ##load-integer f 1 100 }
1498 T{ ##load-integer f 3 50 }
1500 } value-numbering-step
1506 T{ ##shl-imm f 1 0 10 }
1507 T{ ##shl-imm f 2 0 21 }
1508 T{ ##replace f 2 D 0 }
1513 T{ ##shl-imm f 1 0 10 }
1514 T{ ##shl-imm f 2 1 11 }
1515 T{ ##replace f 2 D 0 }
1516 } value-numbering-step
1522 T{ ##shl-imm f 1 0 10 }
1523 T{ ##shl-imm f 2 1 $[ cell-bits 1 - ] }
1524 T{ ##replace f 2 D 0 }
1529 T{ ##shl-imm f 1 0 10 }
1530 T{ ##shl-imm f 2 1 $[ cell-bits 1 - ] }
1531 T{ ##replace f 2 D 0 }
1532 } value-numbering-step
1538 T{ ##sar-imm f 1 0 10 }
1539 T{ ##sar-imm f 2 0 21 }
1540 T{ ##replace f 2 D 0 }
1545 T{ ##sar-imm f 1 0 10 }
1546 T{ ##sar-imm f 2 1 11 }
1547 T{ ##replace f 2 D 0 }
1548 } value-numbering-step
1554 T{ ##sar-imm f 1 0 10 }
1555 T{ ##sar-imm f 2 1 $[ cell-bits 1 - ] }
1556 T{ ##replace f 2 D 0 }
1561 T{ ##sar-imm f 1 0 10 }
1562 T{ ##sar-imm f 2 1 $[ cell-bits 1 - ] }
1563 T{ ##replace f 2 D 0 }
1564 } value-numbering-step
1570 T{ ##shr-imm f 1 0 10 }
1571 T{ ##shr-imm f 2 0 21 }
1572 T{ ##replace f 2 D 0 }
1577 T{ ##shr-imm f 1 0 10 }
1578 T{ ##shr-imm f 2 1 11 }
1579 T{ ##replace f 2 D 0 }
1580 } value-numbering-step
1586 T{ ##shr-imm f 1 0 10 }
1587 T{ ##shr-imm f 2 1 $[ cell-bits 1 - ] }
1588 T{ ##replace f 2 D 0 }
1593 T{ ##shr-imm f 1 0 10 }
1594 T{ ##shr-imm f 2 1 $[ cell-bits 1 - ] }
1595 T{ ##replace f 2 D 0 }
1596 } value-numbering-step
1602 T{ ##shr-imm f 1 0 10 }
1603 T{ ##sar-imm f 2 1 11 }
1604 T{ ##replace f 2 D 0 }
1609 T{ ##shr-imm f 1 0 10 }
1610 T{ ##sar-imm f 2 1 11 }
1611 T{ ##replace f 2 D 0 }
1612 } value-numbering-step
1616 2 \ vreg-counter set-global
1621 T{ ##add-imm f 1 0 10 }
1622 T{ ##shl-imm f 3 0 2 }
1623 T{ ##add-imm f 2 3 40 }
1624 T{ ##replace f 2 D 0 }
1629 T{ ##add-imm f 1 0 10 }
1630 T{ ##shl-imm f 2 1 2 }
1631 T{ ##replace f 2 D 0 }
1632 } value-numbering-step
1638 T{ ##add-imm f 1 0 10 }
1639 T{ ##mul-imm f 4 0 3 }
1640 T{ ##add-imm f 2 4 30 }
1641 T{ ##replace f 2 D 0 }
1646 T{ ##add-imm f 1 0 10 }
1647 T{ ##mul-imm f 2 1 3 }
1648 T{ ##replace f 2 D 0 }
1649 } value-numbering-step
1655 T{ ##add-imm f 1 0 -10 }
1656 T{ ##shl-imm f 5 0 2 }
1657 T{ ##add-imm f 2 5 -40 }
1658 T{ ##replace f 2 D 0 }
1663 T{ ##sub-imm f 1 0 10 }
1664 T{ ##shl-imm f 2 1 2 }
1665 T{ ##replace f 2 D 0 }
1666 } value-numbering-step
1672 T{ ##add-imm f 1 0 -10 }
1673 T{ ##mul-imm f 6 0 3 }
1674 T{ ##add-imm f 2 6 -30 }
1675 T{ ##replace f 2 D 0 }
1680 T{ ##sub-imm f 1 0 10 }
1681 T{ ##mul-imm f 2 1 3 }
1682 T{ ##replace f 2 D 0 }
1683 } value-numbering-step
1691 T{ ##copy f 3 0 any-rep }
1692 T{ ##replace f 3 D 0 }
1698 T{ ##add-imm f 3 0 0 }
1699 T{ ##replace f 3 D 0 }
1700 } value-numbering-step
1707 T{ ##copy f 3 0 any-rep }
1708 T{ ##replace f 3 D 0 }
1714 T{ ##or-imm f 3 0 0 }
1715 T{ ##replace f 3 D 0 }
1716 } value-numbering-step
1723 T{ ##copy f 3 0 any-rep }
1724 T{ ##replace f 3 D 0 }
1730 T{ ##xor-imm f 3 0 0 }
1731 T{ ##replace f 3 D 0 }
1732 } value-numbering-step
1738 T{ ##load-integer f 1 0 }
1743 T{ ##and-imm f 1 0 0 }
1744 } value-numbering-step
1750 T{ ##copy f 1 0 any-rep }
1751 T{ ##replace f 1 D 0 }
1756 T{ ##and-imm f 1 0 -1 }
1757 T{ ##replace f 1 D 0 }
1758 } value-numbering-step
1764 T{ ##copy f 1 0 any-rep }
1765 T{ ##replace f 1 D 0 }
1771 T{ ##replace f 1 D 0 }
1772 } value-numbering-step
1778 T{ ##copy f 1 0 any-rep }
1779 T{ ##replace f 1 D 0 }
1784 T{ ##or-imm f 1 0 0 }
1785 T{ ##replace f 1 D 0 }
1786 } value-numbering-step
1792 T{ ##load-integer f 1 -1 }
1797 T{ ##or-imm f 1 0 -1 }
1798 } value-numbering-step
1804 T{ ##copy f 1 0 any-rep }
1805 T{ ##replace f 1 D 0 }
1811 T{ ##replace f 1 D 0 }
1812 } value-numbering-step
1818 T{ ##copy f 1 0 any-rep }
1819 T{ ##replace f 1 D 0 }
1824 T{ ##xor-imm f 1 0 0 }
1825 T{ ##replace f 1 D 0 }
1826 } value-numbering-step
1833 T{ ##replace f 1 D 0 }
1838 T{ ##xor-imm f 1 0 -1 }
1839 T{ ##replace f 1 D 0 }
1840 } value-numbering-step
1846 T{ ##load-integer f 1 0 }
1852 } value-numbering-step
1858 T{ ##copy f 2 0 any-rep }
1859 T{ ##replace f 2 D 0 }
1864 T{ ##mul-imm f 2 0 1 }
1865 T{ ##replace f 2 D 0 }
1866 } value-numbering-step
1872 T{ ##copy f 2 0 any-rep }
1873 T{ ##replace f 2 D 0 }
1878 T{ ##shl-imm f 2 0 0 }
1879 T{ ##replace f 2 D 0 }
1880 } value-numbering-step
1886 T{ ##copy f 2 0 any-rep }
1887 T{ ##replace f 2 D 0 }
1892 T{ ##shr-imm f 2 0 0 }
1893 T{ ##replace f 2 D 0 }
1894 } value-numbering-step
1900 T{ ##copy f 2 0 any-rep }
1901 T{ ##replace f 2 D 0 }
1906 T{ ##sar-imm f 2 0 0 }
1907 T{ ##replace f 2 D 0 }
1908 } value-numbering-step
1915 T{ ##load-integer f 1 1 }
1916 T{ ##load-integer f 2 3 }
1917 T{ ##load-integer f 3 4 }
1922 T{ ##load-integer f 1 1 }
1923 T{ ##load-integer f 2 3 }
1925 } value-numbering-step
1931 T{ ##load-integer f 1 1 }
1932 T{ ##load-integer f 2 3 }
1933 T{ ##load-integer f 3 -2 }
1938 T{ ##load-integer f 1 1 }
1939 T{ ##load-integer f 2 3 }
1941 } value-numbering-step
1947 T{ ##load-integer f 1 2 }
1948 T{ ##load-integer f 2 3 }
1949 T{ ##load-integer f 3 6 }
1954 T{ ##load-integer f 1 2 }
1955 T{ ##load-integer f 2 3 }
1957 } value-numbering-step
1963 T{ ##load-integer f 1 2 }
1964 T{ ##load-integer f 2 1 }
1965 T{ ##load-integer f 3 0 }
1970 T{ ##load-integer f 1 2 }
1971 T{ ##load-integer f 2 1 }
1973 } value-numbering-step
1979 T{ ##load-integer f 1 2 }
1980 T{ ##load-integer f 2 1 }
1981 T{ ##load-integer f 3 3 }
1986 T{ ##load-integer f 1 2 }
1987 T{ ##load-integer f 2 1 }
1989 } value-numbering-step
1995 T{ ##load-integer f 1 2 }
1996 T{ ##load-integer f 2 3 }
1997 T{ ##load-integer f 3 1 }
2002 T{ ##load-integer f 1 2 }
2003 T{ ##load-integer f 2 3 }
2005 } value-numbering-step
2011 T{ ##load-integer f 1 1 }
2012 T{ ##load-integer f 3 8 }
2017 T{ ##load-integer f 1 1 }
2018 T{ ##shl-imm f 3 1 3 }
2019 } value-numbering-step
2026 T{ ##load-integer f 1 -1 }
2027 T{ ##load-integer f 3 HEX: ffffffffffff }
2032 T{ ##load-integer f 1 -1 }
2033 T{ ##shr-imm f 3 1 16 }
2034 } value-numbering-step
2041 T{ ##load-integer f 1 -8 }
2042 T{ ##load-integer f 3 -4 }
2047 T{ ##load-integer f 1 -8 }
2048 T{ ##sar-imm f 3 1 1 }
2049 } value-numbering-step
2056 T{ ##load-integer f 1 65536 }
2057 T{ ##load-integer f 2 140737488355328 }
2063 T{ ##load-integer f 1 65536 }
2064 T{ ##shl-imm f 2 1 31 }
2066 } value-numbering-step
2072 T{ ##load-integer f 2 140737488355328 }
2078 T{ ##load-integer f 2 140737488355328 }
2080 } value-numbering-step
2083 ! PPC ADDI can't hold immediates this big.
2088 T{ ##load-integer f 2 2147483647 }
2089 T{ ##add-imm f 3 0 2147483647 }
2090 T{ ##add-imm f 4 3 2147483647 }
2095 T{ ##load-integer f 2 2147483647 }
2098 } value-numbering-step
2106 T{ ##load-integer f 1 1 }
2107 T{ ##load-integer f 2 -1 }
2112 T{ ##load-integer f 1 1 }
2114 } value-numbering-step
2120 T{ ##load-integer f 1 1 }
2121 T{ ##load-integer f 2 -2 }
2126 T{ ##load-integer f 1 1 }
2128 } value-numbering-step
2131 ! ##tagged>integer constant folding
2134 T{ ##load-reference f 1 f }
2135 T{ ##load-integer f 2 $[ \ f type-number ] }
2136 T{ ##copy f 3 2 any-rep }
2140 T{ ##load-reference f 1 f }
2141 T{ ##tagged>integer f 2 1 }
2142 T{ ##and-imm f 3 2 15 }
2143 } value-numbering-step
2148 T{ ##load-integer f 1 100 }
2149 T{ ##load-integer f 2 $[ 100 tag-fixnum ] }
2150 T{ ##load-integer f 3 $[ 100 tag-fixnum 1 + ] }
2154 T{ ##load-integer f 1 100 }
2155 T{ ##tagged>integer f 2 1 }
2156 T{ ##add-imm f 3 2 1 }
2157 } value-numbering-step
2160 ! Alien boxing and unboxing
2164 T{ ##box-alien f 1 0 }
2165 T{ ##copy f 2 0 any-rep }
2166 T{ ##replace f 2 D 0 }
2171 T{ ##box-alien f 1 0 }
2172 T{ ##unbox-alien f 2 1 }
2173 T{ ##replace f 2 D 0 }
2174 } value-numbering-step
2180 T{ ##box-alien f 1 0 }
2181 T{ ##copy f 2 0 any-rep }
2182 T{ ##replace f 2 D 0 }
2187 T{ ##box-alien f 1 0 }
2188 T{ ##unbox-any-c-ptr f 2 1 }
2189 T{ ##replace f 2 D 0 }
2190 } value-numbering-step
2196 T{ ##load-integer f 2 0 }
2197 T{ ##copy f 1 0 any-rep }
2198 T{ ##replace f 1 D 0 }
2203 T{ ##load-integer f 2 0 }
2204 T{ ##box-displaced-alien f 1 2 0 c-ptr }
2205 T{ ##replace f 1 D 0 }
2206 } value-numbering-step
2209 3 vreg-counter set-global
2214 T{ ##load-integer f 2 16 }
2215 T{ ##box-displaced-alien f 1 2 0 c-ptr }
2216 T{ ##unbox-any-c-ptr f 4 0 }
2217 T{ ##add-imm f 3 4 16 }
2222 T{ ##load-integer f 2 16 }
2223 T{ ##box-displaced-alien f 1 2 0 c-ptr }
2224 T{ ##unbox-any-c-ptr f 3 1 }
2225 } value-numbering-step
2228 4 vreg-counter set-global
2232 T{ ##box-alien f 0 1 }
2233 T{ ##load-integer f 2 16 }
2234 T{ ##box-displaced-alien f 3 2 0 c-ptr }
2235 T{ ##copy f 5 1 any-rep }
2236 T{ ##add-imm f 4 5 16 }
2240 T{ ##box-alien f 0 1 }
2241 T{ ##load-integer f 2 16 }
2242 T{ ##box-displaced-alien f 3 2 0 c-ptr }
2243 T{ ##unbox-any-c-ptr f 4 3 }
2244 } value-numbering-step
2247 3 vreg-counter set-global
2252 T{ ##load-integer f 2 0 }
2253 T{ ##copy f 3 0 any-rep }
2254 T{ ##replace f 3 D 1 }
2259 T{ ##load-integer f 2 0 }
2260 T{ ##box-displaced-alien f 3 2 0 c-ptr }
2261 T{ ##replace f 3 D 1 }
2262 } value-numbering-step
2265 ! Various SIMD simplifications
2268 T{ ##vector>scalar f 1 0 float-4-rep }
2269 T{ ##copy f 2 0 any-rep }
2273 T{ ##vector>scalar f 1 0 float-4-rep }
2274 T{ ##scalar>vector f 2 1 float-4-rep }
2275 } value-numbering-step
2280 T{ ##copy f 1 0 any-rep }
2284 T{ ##shuffle-vector-imm f 1 0 { 0 1 2 3 } float-4-rep }
2285 } value-numbering-step
2290 T{ ##shuffle-vector-imm f 1 0 { 1 2 3 0 } float-4-rep }
2291 T{ ##shuffle-vector-imm f 2 0 { 0 2 3 1 } float-4-rep }
2295 T{ ##shuffle-vector-imm f 1 0 { 1 2 3 0 } float-4-rep }
2296 T{ ##shuffle-vector-imm f 2 1 { 3 1 2 0 } float-4-rep }
2297 } value-numbering-step
2302 T{ ##shuffle-vector-imm f 1 0 { 1 2 3 0 } float-4-rep }
2303 T{ ##shuffle-vector-imm f 2 1 { 1 0 } double-2-rep }
2307 T{ ##shuffle-vector-imm f 1 0 { 1 2 3 0 } float-4-rep }
2308 T{ ##shuffle-vector-imm f 2 1 { 1 0 } double-2-rep }
2309 } value-numbering-step
2314 T{ ##load-integer f 0 55 }
2315 T{ ##load-reference f 1 B{ 55 0 0 0 55 0 0 0 55 0 0 0 55 0 0 0 } }
2316 T{ ##load-reference f 2 B{ 55 0 0 0 55 0 0 0 55 0 0 0 55 0 0 0 } }
2320 T{ ##load-integer f 0 55 }
2321 T{ ##scalar>vector f 1 0 int-4-rep }
2322 T{ ##shuffle-vector-imm f 2 1 { 0 0 0 0 } float-4-rep }
2323 } value-numbering-step
2328 T{ ##load-reference f 0 1.25 }
2329 T{ ##load-reference f 1 B{ 0 0 160 63 0 0 160 63 0 0 160 63 0 0 160 63 } }
2330 T{ ##load-reference f 2 B{ 0 0 160 63 0 0 160 63 0 0 160 63 0 0 160 63 } }
2334 T{ ##load-reference f 0 1.25 }
2335 T{ ##scalar>vector f 1 0 float-4-rep }
2336 T{ ##shuffle-vector-imm f 2 1 { 0 0 0 0 } float-4-rep }
2337 } value-numbering-step
2342 T{ ##load-reference f 0 1.25 }
2343 T{ ##load-reference f 1 B{ 0 0 160 63 0 0 160 63 0 0 160 63 0 0 160 63 } }
2344 T{ ##load-reference f 2 B{ 0 0 160 63 0 0 160 63 0 0 160 63 0 0 160 63 } }
2348 T{ ##load-reference f 0 1.25 }
2349 T{ ##scalar>vector f 1 0 float-4-rep }
2350 T{ ##shuffle-vector-imm f 2 1 { 0 0 0 0 } float-4-rep }
2351 } value-numbering-step
2356 T{ ##load-integer f 0 55 }
2357 T{ ##load-reference f 1 B{ 55 0 55 0 55 0 55 0 55 0 55 0 55 0 55 0 } }
2358 T{ ##load-reference f 2 B{ 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 } }
2359 T{ ##load-reference f 3 B{ 0 55 0 55 0 55 0 55 0 55 0 55 0 55 0 55 } }
2363 T{ ##load-integer f 0 55 }
2364 T{ ##scalar>vector f 1 0 short-8-rep }
2365 T{ ##load-reference f 2 B{ 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 } }
2366 T{ ##shuffle-vector f 3 1 2 float-4-rep }
2367 } value-numbering-step
2372 T{ ##load-reference f 0 1.25 }
2373 T{ ##load-reference f 2 3.75 }
2374 T{ ##load-reference f 4 B{ 0 0 0 0 0 0 244 63 0 0 0 0 0 0 14 64 } }
2378 T{ ##load-reference f 0 1.25 }
2379 T{ ##load-reference f 2 3.75 }
2380 T{ ##gather-vector-2 f 4 0 2 double-2-rep }
2381 } value-numbering-step
2386 T{ ##load-integer f 0 125 }
2387 T{ ##load-integer f 2 375 }
2388 T{ ##load-reference f 4 B{ 125 0 0 0 0 0 0 0 119 1 0 0 0 0 0 0 } }
2392 T{ ##load-integer f 0 125 }
2393 T{ ##load-integer f 2 375 }
2394 T{ ##gather-vector-2 f 4 0 2 longlong-2-rep }
2395 } value-numbering-step
2400 T{ ##load-reference f 0 1.25 }
2401 T{ ##load-reference f 1 2.50 }
2402 T{ ##load-reference f 2 3.75 }
2403 T{ ##load-reference f 3 5.00 }
2404 T{ ##load-reference f 4 B{ 0 0 160 63 0 0 32 64 0 0 112 64 0 0 160 64 } }
2408 T{ ##load-reference f 0 1.25 }
2409 T{ ##load-reference f 1 2.50 }
2410 T{ ##load-reference f 2 3.75 }
2411 T{ ##load-reference f 3 5.00 }
2412 T{ ##gather-vector-4 f 4 0 1 2 3 float-4-rep }
2413 } value-numbering-step
2418 T{ ##load-integer f 0 125 }
2419 T{ ##load-integer f 1 250 }
2420 T{ ##load-integer f 2 375 }
2421 T{ ##load-integer f 3 500 }
2422 T{ ##load-reference f 4 B{ 125 0 0 0 250 0 0 0 119 1 0 0 244 1 0 0 } }
2426 T{ ##load-integer f 0 125 }
2427 T{ ##load-integer f 1 250 }
2428 T{ ##load-integer f 2 375 }
2429 T{ ##load-integer f 3 500 }
2430 T{ ##gather-vector-4 f 4 0 1 2 3 int-4-rep }
2431 } value-numbering-step
2436 T{ ##zero-vector f 2 float-4-rep }
2440 T{ ##xor-vector f 2 1 1 float-4-rep }
2441 } value-numbering-step
2444 ! NOT x AND y => x ANDN y
2448 T{ ##fill-vector f 3 float-4-rep }
2449 T{ ##xor-vector f 4 0 3 float-4-rep }
2450 T{ ##andn-vector f 5 0 1 float-4-rep }
2454 T{ ##fill-vector f 3 float-4-rep }
2455 T{ ##xor-vector f 4 0 3 float-4-rep }
2456 T{ ##and-vector f 5 4 1 float-4-rep }
2457 } value-numbering-step
2462 T{ ##not-vector f 4 0 float-4-rep }
2463 T{ ##andn-vector f 5 0 1 float-4-rep }
2467 T{ ##not-vector f 4 0 float-4-rep }
2468 T{ ##and-vector f 5 4 1 float-4-rep }
2469 } value-numbering-step
2472 ! x AND NOT y => y ANDN x
2476 T{ ##fill-vector f 3 float-4-rep }
2477 T{ ##xor-vector f 4 0 3 float-4-rep }
2478 T{ ##andn-vector f 5 0 1 float-4-rep }
2482 T{ ##fill-vector f 3 float-4-rep }
2483 T{ ##xor-vector f 4 0 3 float-4-rep }
2484 T{ ##and-vector f 5 1 4 float-4-rep }
2485 } value-numbering-step
2490 T{ ##not-vector f 4 0 float-4-rep }
2491 T{ ##andn-vector f 5 0 1 float-4-rep }
2495 T{ ##not-vector f 4 0 float-4-rep }
2496 T{ ##and-vector f 5 1 4 float-4-rep }
2497 } value-numbering-step
2500 ! NOT x ANDN y => x AND y
2504 T{ ##fill-vector f 3 float-4-rep }
2505 T{ ##xor-vector f 4 0 3 float-4-rep }
2506 T{ ##and-vector f 5 0 1 float-4-rep }
2510 T{ ##fill-vector f 3 float-4-rep }
2511 T{ ##xor-vector f 4 0 3 float-4-rep }
2512 T{ ##andn-vector f 5 4 1 float-4-rep }
2513 } value-numbering-step
2518 T{ ##not-vector f 4 0 float-4-rep }
2519 T{ ##and-vector f 5 0 1 float-4-rep }
2523 T{ ##not-vector f 4 0 float-4-rep }
2524 T{ ##andn-vector f 5 4 1 float-4-rep }
2525 } value-numbering-step
2532 T{ ##fill-vector f 3 float-4-rep }
2533 T{ ##xor-vector f 4 0 3 float-4-rep }
2534 T{ ##andn-vector f 5 0 1 float-4-rep }
2535 T{ ##and-vector f 6 0 2 float-4-rep }
2536 T{ ##or-vector f 7 5 6 float-4-rep }
2540 T{ ##fill-vector f 3 float-4-rep }
2541 T{ ##xor-vector f 4 0 3 float-4-rep }
2542 T{ ##and-vector f 5 4 1 float-4-rep }
2543 T{ ##andn-vector f 6 4 2 float-4-rep }
2544 T{ ##or-vector f 7 5 6 float-4-rep }
2545 } value-numbering-step
2550 T{ ##not-vector f 4 0 float-4-rep }
2551 T{ ##andn-vector f 5 0 1 float-4-rep }
2552 T{ ##and-vector f 6 0 2 float-4-rep }
2553 T{ ##or-vector f 7 5 6 float-4-rep }
2557 T{ ##not-vector f 4 0 float-4-rep }
2558 T{ ##and-vector f 5 4 1 float-4-rep }
2559 T{ ##andn-vector f 6 4 2 float-4-rep }
2560 T{ ##or-vector f 7 5 6 float-4-rep }
2561 } value-numbering-step
2565 : test-branch-folding ( insns -- insns' n )
2567 [ V{ 0 1 } clone >>successors basic-block set value-numbering-step ] keep
2568 successors>> first ;
2572 T{ ##load-integer f 1 1 }
2573 T{ ##load-integer f 2 2 }
2579 T{ ##load-integer f 1 1 }
2580 T{ ##load-integer f 2 2 }
2581 T{ ##compare-branch f 1 2 cc= }
2582 } test-branch-folding
2587 T{ ##load-integer f 1 1 }
2588 T{ ##load-integer f 2 2 }
2594 T{ ##load-integer f 1 1 }
2595 T{ ##load-integer f 2 2 }
2596 T{ ##compare-branch f 1 2 cc/= }
2597 } test-branch-folding
2602 T{ ##load-integer f 1 1 }
2603 T{ ##load-integer f 2 2 }
2609 T{ ##load-integer f 1 1 }
2610 T{ ##load-integer f 2 2 }
2611 T{ ##compare-integer-branch f 1 2 cc< }
2612 } test-branch-folding
2617 T{ ##load-integer f 1 1 }
2618 T{ ##load-integer f 2 2 }
2624 T{ ##load-integer f 1 1 }
2625 T{ ##load-integer f 2 2 }
2626 T{ ##compare-integer-branch f 2 1 cc< }
2627 } test-branch-folding
2639 T{ ##compare-integer-branch f 0 0 cc< }
2640 } test-branch-folding
2652 T{ ##compare-integer-branch f 0 0 cc<= }
2653 } test-branch-folding
2665 T{ ##compare-integer-branch f 0 0 cc> }
2666 } test-branch-folding
2678 T{ ##compare-integer-branch f 0 0 cc>= }
2679 } test-branch-folding
2691 T{ ##compare-integer-branch f 0 0 cc= }
2692 } test-branch-folding
2704 T{ ##compare-integer-branch f 0 0 cc/= }
2705 } test-branch-folding
2711 T{ ##load-reference f 1 t }
2718 T{ ##compare f 1 0 0 cc<= }
2719 T{ ##compare-imm-branch f 1 f cc/= }
2720 } test-branch-folding
2723 ! More branch folding tests
2724 V{ T{ ##branch } } 0 test-bb
2728 T{ ##compare-integer-branch f 0 0 cc< }
2732 T{ ##load-integer f 1 1 }
2737 T{ ##load-integer f 2 2 }
2742 T{ ##phi f 3 H{ { 2 1 } { 3 2 } } }
2743 T{ ##replace f 3 D 0 }
2750 cfg new 0 get >>entry dup cfg set
2752 select-representations
2756 [ 1 ] [ 1 get successors>> length ] unit-test
2758 [ t ] [ 1 get successors>> first 3 get eq? ] unit-test
2760 [ 2 ] [ 4 get instructions>> length ] unit-test
2769 T{ ##compare-integer-branch f 1 1 cc< }
2773 T{ ##copy f 2 0 any-rep }
2778 T{ ##phi f 3 H{ { 1 1 } { 2 0 } } }
2783 T{ ##replace f 3 D 0 }
2790 cfg new 0 get >>entry
2796 [ t ] [ 1 get successors>> first 3 get eq? ] unit-test
2798 [ 1 ] [ 3 get instructions>> first inputs>> assoc-size ] unit-test
2800 V{ T{ ##prologue } T{ ##branch } } 0 test-bb
2803 T{ ##peek { dst 15 } { loc D 0 } }
2804 T{ ##copy { dst 16 } { src 15 } { rep any-rep } }
2805 T{ ##copy { dst 17 } { src 15 } { rep any-rep } }
2806 T{ ##copy { dst 18 } { src 15 } { rep any-rep } }
2807 T{ ##copy { dst 19 } { src 15 } { rep any-rep } }
2815 T{ ##copy { dst 21 } { src 20 } { rep any-rep } }
2816 T{ ##compare-imm-branch
2824 T{ ##copy { dst 23 } { src 15 } { rep any-rep } }
2825 T{ ##copy { dst 24 } { src 15 } { rep any-rep } }
2826 T{ ##load-reference { dst 25 } { obj t } }
2831 T{ ##replace { src 25 } { loc D 0 } }
2837 T{ ##copy { dst 26 } { src 15 } { rep any-rep } }
2838 T{ ##copy { dst 27 } { src 15 } { rep any-rep } }
2848 T{ ##replace { src 28 } { loc D 0 } }
2859 cfg new 0 get >>entry
2860 value-numbering eliminate-dead-code drop
2863 [ f ] [ 1 get instructions>> [ ##peek? ] any? ] unit-test
2865 ! Slot addressing optimization
2871 T{ ##add-imm f 2 1 2 }
2872 T{ ##slot f 3 0 1 $[ cell log2 ] $[ 7 2 cells - ] }
2878 T{ ##add-imm f 2 1 2 }
2879 T{ ##slot f 3 0 2 $[ cell log2 ] 7 }
2880 } value-numbering-step
2884 ! Alien addressing optimization
2886 ! Base offset fusion on ##load/store-memory-imm
2890 T{ ##tagged>integer f 2 1 }
2891 T{ ##add-imm f 3 2 10 }
2892 T{ ##load-memory-imm f 4 2 10 int-rep c:uchar }
2897 T{ ##tagged>integer f 2 1 }
2898 T{ ##add-imm f 3 2 10 }
2899 T{ ##load-memory-imm f 4 3 0 int-rep c:uchar }
2900 } value-numbering-step
2907 T{ ##tagged>integer f 2 0 }
2908 T{ ##tagged>integer f 3 1 }
2909 T{ ##add-imm f 4 3 10 }
2910 T{ ##store-memory-imm f 2 3 10 int-rep c:uchar }
2916 T{ ##tagged>integer f 2 0 }
2917 T{ ##tagged>integer f 3 1 }
2918 T{ ##add-imm f 4 3 10 }
2919 T{ ##store-memory-imm f 2 4 0 int-rep c:uchar }
2920 } value-numbering-step
2923 ! Displacement fusion on ##load/store-memory-imm
2928 T{ ##tagged>integer f 2 0 }
2929 T{ ##tagged>integer f 3 1 }
2931 T{ ##load-memory f 5 2 3 0 0 int-rep c:uchar }
2937 T{ ##tagged>integer f 2 0 }
2938 T{ ##tagged>integer f 3 1 }
2940 T{ ##load-memory-imm f 5 4 0 int-rep c:uchar }
2941 } value-numbering-step
2948 T{ ##tagged>integer f 2 0 }
2949 T{ ##tagged>integer f 3 1 }
2951 T{ ##store-memory f 5 2 3 0 0 int-rep c:uchar }
2957 T{ ##tagged>integer f 2 0 }
2958 T{ ##tagged>integer f 3 1 }
2960 T{ ##store-memory-imm f 5 4 0 int-rep c:uchar }
2961 } value-numbering-step
2964 ! Base offset fusion on ##load/store-memory -- only on x86
2970 T{ ##tagged>integer f 2 0 }
2971 T{ ##tagged>integer f 3 1 }
2972 T{ ##add-imm f 4 2 31337 }
2973 T{ ##load-memory f 5 2 3 0 31337 int-rep c:uchar }
2980 T{ ##tagged>integer f 2 0 }
2981 T{ ##tagged>integer f 3 1 }
2982 T{ ##add-imm f 4 2 31337 }
2983 T{ ##load-memory f 5 4 3 0 0 int-rep c:uchar }
2990 T{ ##tagged>integer f 2 0 }
2991 T{ ##tagged>integer f 3 1 }
2992 T{ ##add-imm f 4 2 31337 }
2993 T{ ##load-memory f 5 4 3 0 0 int-rep c:uchar }
2994 } value-numbering-step
2997 ! Displacement offset fusion on ##load/store-memory -- only on x86
3003 T{ ##tagged>integer f 2 0 }
3004 T{ ##tagged>integer f 3 1 }
3005 T{ ##add-imm f 4 3 31337 }
3006 T{ ##load-memory f 5 2 3 0 31338 int-rep c:uchar }
3013 T{ ##tagged>integer f 2 0 }
3014 T{ ##tagged>integer f 3 1 }
3015 T{ ##add-imm f 4 3 31337 }
3016 T{ ##load-memory f 5 2 4 0 1 int-rep c:uchar }
3023 T{ ##tagged>integer f 2 0 }
3024 T{ ##tagged>integer f 3 1 }
3025 T{ ##add-imm f 4 3 31337 }
3026 T{ ##load-memory f 5 2 4 0 1 int-rep c:uchar }
3027 } value-numbering-step
3030 ! Displacement offset fusion should not occur on
3031 ! ##load/store-memory with non-zero scale
3036 T{ ##tagged>integer f 2 0 }
3037 T{ ##tagged>integer f 3 1 }
3038 T{ ##add-imm f 4 3 10 }
3039 T{ ##load-memory f 5 2 4 1 1 int-rep c:uchar }
3040 } dup value-numbering-step assert=
3043 ! Scale fusion on ##load/store-memory
3049 T{ ##tagged>integer f 2 0 }
3050 T{ ##tagged>integer f 3 1 }
3051 T{ ##shl-imm f 4 3 2 }
3052 T{ ##load-memory f 5 2 3 2 0 int-rep c:uchar }
3059 T{ ##tagged>integer f 2 0 }
3060 T{ ##tagged>integer f 3 1 }
3061 T{ ##shl-imm f 4 3 2 }
3062 T{ ##load-memory f 5 2 4 0 0 int-rep c:uchar }
3069 T{ ##tagged>integer f 2 0 }
3070 T{ ##tagged>integer f 3 1 }
3071 T{ ##shl-imm f 4 3 2 }
3072 T{ ##load-memory f 5 2 4 0 0 int-rep c:uchar }
3073 } value-numbering-step
3077 ! Don't do scale fusion if there's already a scale
3082 T{ ##tagged>integer f 2 0 }
3083 T{ ##tagged>integer f 3 1 }
3084 T{ ##shl-imm f 4 3 2 }
3085 T{ ##load-memory f 5 2 4 1 0 int-rep c:uchar }
3086 } dup value-numbering-step assert=
3089 ! Don't do scale fusion if the scale factor is out of range
3094 T{ ##tagged>integer f 2 0 }
3095 T{ ##tagged>integer f 3 1 }
3096 T{ ##shl-imm f 4 3 4 }
3097 T{ ##load-memory f 5 2 4 0 0 int-rep c:uchar }
3098 } dup value-numbering-step assert=