4 This compiler is a big long chain of modules that transform L5 code into
 
   7 Here is a breakdown of the modules and changes from L5:
 
   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.
 
  13   * AST utilities were updated to use the new temp typing system.
 
  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.
 
  19   * The typechecker was mostly unchanged.
 
  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
 
  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).
 
  38   * The liveness analyzer was mainly unchanged.
 
  40   * The grapher was fully unchanged.  Nice.
 
  42   * The color orderer was optimized a bit.
 
  44   * The coloring module was fully unchanged.  Nice.
 
  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
 
  51   * The peepholer has been moved into the optimization framework.
 
  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
 
  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
 
  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