]>
Commit | Line | Data |
---|---|---|
1 | README | |
2 | ------ | |
3 | ||
4 | This compiler is a big long chain of modules that transform L5 code into | |
5 | x86_64 assembly. | |
6 | ||
7 | Here is a breakdown of the modules and changes from L5: | |
8 | ||
9 | * The parser. The parser was mainly brought in from lab 4, and mainly | |
10 | just a straight-forward extension of the L4 parser to have increments, | |
11 | decrements, conditionals, and hex constants. | |
12 | ||
13 | * AST utilities were updated to use the new temp typing system. | |
14 | ||
15 | * Temporaries now are the only source of sizing information until we hit | |
16 | the stage at which point instructions are generated. At that point, | |
17 | instructions get sizing info, too, but really, that's about it. | |
18 | ||
19 | * The typechecker was mostly unchanged. | |
20 | ||
21 | * The translator was changed to use the new sizing system. Of interest, | |
22 | the 'safe' alloc routine and the 'safe' dereference routines have been | |
23 | moved into the IR stage, as opposed to having custom instructions | |
24 | generated for them at the munch stage. This was done with the addition | |
25 | of the 'stmvar' IR function, which is equivalent to the GCC C extension: | |
26 | ({ stm; stm; ... expr }) | |
27 | in that it evaluates the statements first, then returns the evaluation | |
28 | of the expression. | |
29 | ||
30 | * The munch modules were updated to remove a lot of their suck and make | |
31 | them correct again. Specifically, they were updated to use the new | |
32 | typing system and perform type inference of sorts (i.e. adding a | |
33 | quadword base pointer and a long offset yields a quad, etc.). This is | |
34 | far superior to the previous sizing method, in which we gave some loose | |
35 | (and disgusting) annotations of size and left the final sizing decisions | |
36 | to the stringifier (O.o). | |
37 | ||
38 | * The liveness analyzer was mainly unchanged. | |
39 | ||
40 | * The grapher was fully unchanged. Nice. | |
41 | ||
42 | * The color orderer was optimized a bit. | |
43 | ||
44 | * The coloring module was fully unchanged. Nice. | |
45 | ||
46 | * The solidifier was similarly ripped out and hit by the diqing beam, sent | |
47 | on a flight to Diqing airport, which is in Diqing which is in | |
48 | the Diqing province in China, and subsequently it was diqed. It is now | |
49 | much happier. | |
50 | ||
51 | * The peepholer has been moved into the optimization framework. | |
52 | ||
53 | * An optimization framework was added, allowing optimizers to be | |
54 | individually turned off from the command line with approximately no work | |
55 | on our part. I'm particularly proud of the simplicity with which it | |
56 | allows one to write optimizations; see optimize/feckful.sml. They need | |
57 | only be hooked in one place (in particular, in a list at the top of | |
58 | top.sml). Individual optimizations will be discussed in the paper to be | |
59 | handed in tomorrow. | |
60 | ||
61 | * The stringifier is of no interest to you, for it does real things that | |
62 | interact with the real world, and that is not of interest to people who | |
63 | write in ML. | |
64 | ||
65 | We believe that it is fully functional. We generate correct code whenever we | |
66 | are supposed to, and we pass every test that we can lay our hands on | |
67 | (including all of the regression suite). There are a number of optimizations | |
68 | that we wish to do, especially various interprocedural ones, but we ran out | |
69 | of time. |