
This directory contains LIAR, the MIT/GNU Scheme compiler.


Here is a brief summary of the subdirectory contents:

"base" contains the common base on which the rest of the compiler is
built.  A good place to start reading the compiler is
"base/toplev.scm" which is the top-level driver of the program.

"fggen" contains the Flow Graph (FG) generator.  This converts SCode
to the internal FG format which is used in the front end of the
compiler.

"fgopt" contains a number of passes that analyze and optimize the FG
intermediate representation.  Most of the Scheme-specific technology
is here.

"rtlbase" contains the definition of the Register Transfer Language
(RTL) data abstractions.  This is a second intermediate language which
is a fairly standard intermediate representation for compilers.

"rtlgen" contains the pass that converts the FG format to RTL.  This
corresponds directly to what most compilers consider the "code
generator".

"rtlopt" contains several passes that analyze and optimize the RTL
representation.  Such things as common subexpression elimination,
lifetime analysis, dead code elimination, and register allocation and
assignment are all performed here.  This is almost exclusively
standard compiler technology which is not Scheme-specific.

"back" contains the "back end" of the compiler.  This consists of a
pass to convert RTL into assembly code for the target machine, and an
assembler/linker for that machine.

"machines" contains a subdirectory for each target machine; these
subdirectories contain all of the machine-specific code for the
compiler.


The following subdirectories are not parts of the compiler per se:

"documentation" contains a little bit of descriptive material.

"etc" contains some programs which are used for developing and
debugging the compiler.

"improvements" contains some code which has been designed but, for
various reasons, not yet installed in the compiler.
