Warning
This version is intended for compiler hackers. We are in the midst of substantial structural changes, and this is a snapshot.
This version contains substantial internal changes to CM (Blume) and MLRISC (Leung). Also a new scheme for version numbers is proposed. Summary:
The version numbers, of late, have begun to carry at least one unnecessay digit. For example, the last public release was 110.0.3. The internal versions since then have been called 110.xx, such as 110.21 etc. Continuing in this fashion, the next set of public versions will be 111.0, 112.0, etc. At the rate at which we have public releases, the leading 1 is meaningless. Version Numbers
We have a proposal to change this release to version 3.21, and the next to version 3.22. The next public release will be version 4.0. This is assuming:
public release 75 was version 1.0, public release 93 was version 2.0, and public release 110 was version 3.0.
Send opinions to
.
CM
- New implementation of generic pickler modules
These have been moved to comp-lib and are now being used not only by the compiler's environment-pickler but also by CM to write skeleton files and stable libraries
New implementation of the environment pickler/unpickler (is smaller in object code size, slightly faster, a bit more general as it allows "lazy" unpickling, and compiles without warnings)
- New format of stable library files (they are smaller, load faster, and (tend to) incur less main memory usage)
- Some streamlining of CM's internals
- The new CM manual is in draft version, and can be previewed at:
http://www.kurims.kyoto-u.ac.jp/~blume/SMLNJ-DEV/manual/
MLRISC
gc callbacks:
A new interface to generating gc involving callbacks is now in place. This will allow for code motion past gc safe points and late generation of gc invocation code.Stream based
All phases of the back end use a new stream based interface to the flow graph. This allows changes in internal representation depending on the level of optimization.Address width
This is set to 64 on the alpha so that address arithmetic is done in 64 bits (LDA). This is supposed to fix the ADDL/LDA problem. Recall that word32 was actually broken on the alpha (in all previous MLRISC versions). But the fix of replacing LDA by ADDL has severe impact on performance.NOTE: this is a somewhat risky fix, so I have to identify all the places where address arithmetic is used in MLRiscGen, InvokeGC, MkRecord etc.
MLRiscGen is a new version with some gc type annotations support.
Machine-gen
All the back ends are modified so that it is specialized using the functor MachineGen. This keeps the machine dependent stuff to a minimum. MachineGen also has support for profiling (in Compiler.Stats.) See Compiler.Stats.summary();Dominator trees
The dominator tree stuff has been cleaned up. It is now faster and more modular.Alpha
Various fixes provided by Fermin went into the alpha backend, which now supports CVTx2x operators.Control-C
There used be some problem with states in the backpatch modules. The state was not cleaned up properly when ^C is pressed during compilation. BTW, the same problem appeared in callgc.sml. In this release the functor MachineGen will reset the state of the MLRISC system before processing a new compilation unit. I think now we should have a harder time of crashing SML with ^C.Labels
Labels have been simplified (no more option).MLTREECOMP
MLTREECOMP has been changed to use the stream interface. This makes things more convenient in many places, when we have to pass around the code emitter functions. The mltree-mult stuff has been changed to support signed arithmetic better (for C--). MLTreeGen has been changed to support CVTI2I operators.register allocation modules
The phases of register allocation has been broken up into several modules.x86
Various fixes from Fermin and James went in here. Fermin sent in a bug fix for spilling CALLs. James (sbj@mit.edu) sent in fixes for the assembler and X86RewritePseudo. Also, I've changed X86RewritePseudo and X86Spill so that they preserve annotations; again requested by James.In the instruction set, 'RET of operand option' is added.
Lal George Last modified: Tue Sep 7 14:05:55 EDT 1999