1 : |
blume |
916 |
S M L / N J
|
2 : |
|
|
|
3 : |
|
|
1 1 0 . 3 5 N E W S
|
4 : |
|
|
|
5 : |
|
|
August 24, 2001
|
6 : |
|
|
|
7 : |
|
|
WARNING
|
8 : |
|
|
|
9 : |
|
|
This version is intended for compiler hackers. The
|
10 : |
|
|
version ought to be stable, however we have not run
|
11 : |
|
|
our full regression testing.
|
12 : |
|
|
|
13 : |
|
|
http://cm.bell-labs.com/cm/cs/what/smlnj/index.html
|
14 : |
|
|
|
15 : |
|
|
|
16 : |
|
|
Summary:
|
17 : |
|
|
|
18 : |
|
|
Compiler sources have been reorganized into serveral CM libraries.
|
19 : |
|
|
There have been various changes to the exported interfaces themselves
|
20 : |
|
|
as well.
|
21 : |
|
|
|
22 : |
|
|
Reorganization (and simplification) of the "Cells" interface in MLRISC.
|
23 : |
|
|
|
24 : |
|
|
"Cluster" data structure removed from MLRISC, now using "graph"s
|
25 : |
|
|
throughout.
|
26 : |
|
|
|
27 : |
|
|
Bug fixes to MLRISC.
|
28 : |
|
|
|
29 : |
|
|
Updates to closure phase in compiler.
|
30 : |
|
|
|
31 : |
blume |
918 |
--------------------------------------------------------------------------
|
32 : |
blume |
916 |
|
33 : |
|
|
Details:
|
34 : |
|
|
|
35 : |
blume |
918 |
Compiler library reorganization:
|
36 : |
|
|
|
37 : |
|
|
We are currently making an effort of modularizing the compiler's sources
|
38 : |
|
|
so that well-defined parts can be easily reused by other projects. For
|
39 : |
|
|
example, we now provide an ML parser library that is independent of
|
40 : |
|
|
the rest of the compiler. An ML parser might be of interest to program
|
41 : |
|
|
analysis folks. Similarly, there is an ML elaborator library, although
|
42 : |
|
|
its interface is not yet as clean as we would like it to make.
|
43 : |
|
|
Another important library that can be used independently by other
|
44 : |
|
|
projects (and has been for some time already, e.g., C-- and Moby), is
|
45 : |
|
|
MLRISC. In the future we expect the FLINT optimizer to become its
|
46 : |
|
|
own library as well. With this design, SML/NJ will consist of several
|
47 : |
|
|
large but generic and independently useful libraries together with SML/NJ-
|
48 : |
|
|
specific "glue" code.
|
49 : |
|
|
|
50 : |
|
|
Here is the new library organization as implemented in 110.35:
|
51 : |
|
|
|
52 : |
|
|
"Visible compiler"...
|
53 : |
|
|
|
54 : |
|
|
$smlnj/viscomp/basics.cm
|
55 : |
|
|
- common definitions used by many or all of the libraries below
|
56 : |
|
|
$smlnj/viscomp/parser.cm
|
57 : |
|
|
- a Standard ML parser and data structures (ast)
|
58 : |
|
|
$smlnj/viscomp/elabdata.cm
|
59 : |
|
|
- data structures and utility functions for elaboration
|
60 : |
|
|
(absyn, types, static environments, ...)
|
61 : |
|
|
$smlnj/viscomp/elaborate.cm
|
62 : |
|
|
- a Standard ML type checker and elaborator
|
63 : |
|
|
$smlnj/viscomp/core.cm
|
64 : |
|
|
- FLINT optimizer and SML/NJ-specific glue code
|
65 : |
|
|
$smlnj/viscomp/execute.cm
|
66 : |
|
|
- SML/NJ object file ("binfile") handling, linking, execution
|
67 : |
|
|
$smlnj/viscomp/debugprof.cm
|
68 : |
|
|
- instrumentation phases (operating on data structures exported
|
69 : |
|
|
by elabdata.cm) for debugging (e.g., backtracing) and profiling
|
70 : |
|
|
$smlnj/compiler.cm
|
71 : |
|
|
- collection of structures (no longer nested within a single
|
72 : |
|
|
structure Compiler) that make up the "visible compiler"
|
73 : |
|
|
|
74 : |
|
|
$smlnj/compiler/compiler.cm
|
75 : |
|
|
- legacy "structure Compiler"
|
76 : |
|
|
|
77 : |
|
|
Architecture specific backends, part of the "visible compiler"...
|
78 : |
|
|
$smlnj/viscomp/alpha32.cm
|
79 : |
|
|
$smlnj/viscomp/hppa.cm
|
80 : |
|
|
$smlnj/viscomp/ppc.cm
|
81 : |
|
|
$smlnj/viscomp/sparc.cm
|
82 : |
|
|
$smlnj/viscomp/x86.cm
|
83 : |
|
|
|
84 : |
|
|
Visible cross-compilers (collection of structures analogous to
|
85 : |
|
|
$smlnj/compiler.cm)...
|
86 : |
|
|
$smlnj/compiler/current.cm
|
87 : |
|
|
$smlnj/compiler/alpha32.cm
|
88 : |
|
|
$smlnj/compiler/hppa.cm
|
89 : |
|
|
$smlnj/compiler/ppc.cm
|
90 : |
|
|
$smlnj/compiler/sparc.cm
|
91 : |
|
|
$smlnj/compiler/x86.cm
|
92 : |
|
|
|
93 : |
|
|
MLRISC:
|
94 : |
|
|
$smlnj/MLRISC/Control.cm
|
95 : |
|
|
$smlnj/MLRISC/Lib.cm
|
96 : |
|
|
$smlnj/MLRISC/Graphs.cm
|
97 : |
|
|
$smlnj/MLRISC/MLTREE.cm
|
98 : |
|
|
$smlnj/MLRISC/MLRISC.cm
|
99 : |
|
|
$smlnj/MLRISC/ALPHA.cm
|
100 : |
|
|
$smlnj/MLRISC/HPPA.cm
|
101 : |
|
|
$smlnj/MLRISC/PPC.cm
|
102 : |
|
|
$smlnj/MLRISC/SPARC.cm
|
103 : |
|
|
$smlnj/MLRISC/IA32.cm
|
104 : |
|
|
|
105 : |
|
|
Compilation manager:
|
106 : |
|
|
|
107 : |
|
|
$smlnj/cm.cm
|
108 : |
|
|
$smlnj/cm/cm.cm
|
109 : |
|
|
$smlnj/cm/tools.cm
|
110 : |
|
|
|
111 : |
|
|
Bootstrap compiler(s), including cross-compilers:
|
112 : |
|
|
$smlnj/cmb.cm
|
113 : |
|
|
$smlnj/cmb/current.cm
|
114 : |
|
|
$smlnj/cmb/alpha32-unix.cm
|
115 : |
|
|
$smlnj/cmb/hppa-unix.cm
|
116 : |
|
|
$smlnj/cmb/ppc-unix.cm
|
117 : |
|
|
$smlnj/cmb/sparc-unix.cm
|
118 : |
|
|
$smlnj/cmb/x86-unix.cm
|
119 : |
|
|
$smlnj/cmb/x86-win32.cm
|
120 : |
|
|
|
121 : |
|
|
MLRISC changes:
|
122 : |
|
|
|
123 : |
|
|
* Lal has dramatically simplified the interface for CELLS in MLRISC.
|
124 : |
|
|
|
125 : |
|
|
In summary, the cells interface is broken up into three parts:
|
126 : |
|
|
|
127 : |
|
|
1. CellsBasis : CELLS_BASIS
|
128 : |
|
|
|
129 : |
|
|
CellsBasis is a top level structure and common for all
|
130 : |
|
|
architectures. it contains the definitions of basic datatypes
|
131 : |
|
|
and utility functions over these types.
|
132 : |
|
|
|
133 : |
|
|
2. functor Cells() : CELLS
|
134 : |
|
|
|
135 : |
|
|
Cells generates an interface for CELLS that incorporates the
|
136 : |
|
|
specific resources on the target architecture, such as the
|
137 : |
|
|
presence of special register classes, their number and size,
|
138 : |
|
|
and various useful substructures.
|
139 : |
|
|
|
140 : |
|
|
3. <ARCH>CELLS
|
141 : |
|
|
|
142 : |
|
|
e.g. SparcCells: SPARCCELLS
|
143 : |
|
|
|
144 : |
|
|
<ARCH>CELLS usually contains additional bindings for special
|
145 : |
|
|
registers on the architecture, such as:
|
146 : |
|
|
|
147 : |
|
|
val r0 : cell (* register zero *)
|
148 : |
|
|
val y : cell (* Y register *)
|
149 : |
|
|
val psr : cell (* processor status register *)
|
150 : |
|
|
...
|
151 : |
|
|
|
152 : |
|
|
The structure returned by applying the Cells functor is opened
|
153 : |
|
|
in this interface.
|
154 : |
|
|
|
155 : |
|
|
The main implication of all this is that the datatypes for cells is
|
156 : |
|
|
split between CellsBasis and CELLS -- a fairly simple change for user
|
157 : |
|
|
code.
|
158 : |
|
|
|
159 : |
|
|
* Removed "clusters" from MLRISC completely and replaced with "graphs".
|
160 : |
|
|
This will make it possible to integrate into SML/NJ various optimizations
|
161 : |
|
|
that had already been implemented for "graphs" (but for the benefit of
|
162 : |
|
|
other projects).
|
163 : |
|
|
|
164 : |
|
|
Bug fixes:
|
165 : |
|
|
|
166 : |
|
|
* Improved "closure" phase in FLINT.
|
167 : |
|
|
* Bug fixes in MLRISC.
|