1 : |
dbm |
637 |
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
|
2 : |
|
|
<html>
|
3 : |
|
|
<head>
|
4 : |
|
|
<title>SML/NJ Version 110.28 NEWS</title>
|
5 : |
|
|
</head>
|
6 : |
|
|
|
7 : |
|
|
<body bgcolor="white">
|
8 : |
|
|
<center><h1>Standard ML of New Jersey<BR>
|
9 : |
|
|
Version 110.28, May 1, 2000</h1>
|
10 : |
|
|
</center>
|
11 : |
|
|
|
12 : |
|
|
<center>
|
13 : |
|
|
<tt> http://cm.bell-labs.com/cm/cs/what/smlnj/index.html </tt>
|
14 : |
|
|
</center>
|
15 : |
|
|
|
16 : |
|
|
<blockquote>
|
17 : |
|
|
<center>
|
18 : |
|
|
<h2> Warning </h2>
|
19 : |
|
|
</center>
|
20 : |
|
|
<blockquote>
|
21 : |
|
|
<blockquote>
|
22 : |
|
|
<em>
|
23 : |
|
|
This version is intended for compiler hackers.
|
24 : |
|
|
We are in the midst of substantial structural changes,
|
25 : |
|
|
and this is a snapshot.
|
26 : |
|
|
</em>
|
27 : |
|
|
</blockquote>
|
28 : |
|
|
</blockquote>
|
29 : |
|
|
|
30 : |
|
|
<hr>
|
31 : |
|
|
|
32 : |
|
|
<center><h2>Summary:</h2></center>
|
33 : |
|
|
<UL>
|
34 : |
|
|
<LI> This version has some tuning of phase ordering for FLINT, which
|
35 : |
|
|
mostly solves the excessive space problem during compilation. With
|
36 : |
|
|
this tuning, 110.28 is slightly better than 110.25 in performance,
|
37 : |
|
|
but not quite as good as 110.25+latest MLRISC. See the benchmarks
|
38 : |
|
|
below. Futher work on the register allocator in MLRISC should
|
39 : |
|
|
improve space performance further.
|
40 : |
|
|
<p>
|
41 : |
|
|
<LI>CM:
|
42 : |
|
|
Installation scripts have been tweaked. A new noweb tool has been
|
43 : |
|
|
added. ".fun" suffix has been added to those that imply sml compilation.
|
44 : |
|
|
New version numbering scheme added. Alternative syntax for anchored
|
45 : |
|
|
paths added. Parallel make made smarter. Support for "unsharing".
|
46 : |
|
|
Simple "makedepend" functionality added. Further details below.
|
47 : |
|
|
<p>
|
48 : |
|
|
See src/system/README and the latest version of the CM manual at
|
49 : |
|
|
<blockquote>
|
50 : |
|
|
<//http://www.kurims.kyoto-u.ac.jp/~blume/SMLNJ-DEV/manual/index.html>
|
51 : |
|
|
<//http://www.kurims.kyoto-u.ac.jp/~blume/SMLNJ-DEV/manual.ps>
|
52 : |
|
|
</blockquote>
|
53 : |
|
|
for further information about visible changes.
|
54 : |
|
|
<p>
|
55 : |
|
|
<li> A few MLRISC changes, most not SML/NJ related.
|
56 : |
|
|
<p>
|
57 : |
|
|
<li> ML-Yacc: updated manual and examples to be SML '97, SML/NJ 110+ compliant.
|
58 : |
|
|
Examples now compiled with CM.
|
59 : |
|
|
<li> Reported bug fixes:
|
60 : |
|
|
<pre>
|
61 : |
|
|
1498. Specialized real arrays not pretty-printed correctly
|
62 : |
|
|
1510. Signature matching bug makes "casts" possible
|
63 : |
|
|
1562. CM complains about unrecognized file extension ".fun"
|
64 : |
|
|
1563. redundant pathconfig contents with multiple builds
|
65 : |
|
|
</pre>
|
66 : |
|
|
<p>
|
67 : |
|
|
<hr>
|
68 : |
|
|
<h2> Change Details </h2>
|
69 : |
|
|
<center><h3> FLINT </h3></center>
|
70 : |
|
|
Tuned ordering of phases to improve time/space performance. See
|
71 : |
|
|
src/compiler/FLINT/opt/flintopt.txt for description of some of the
|
72 : |
|
|
issues.
|
73 : |
|
|
<p>
|
74 : |
|
|
<hr>
|
75 : |
|
|
<center><h3> MLRISC </h3></center>
|
76 : |
|
|
This update synchronizes my repository with Yale's. Most of these
|
77 : |
|
|
changes, however, do not affect SML/NJ at all (the RA is an exception).
|
78 : |
|
|
<p>
|
79 : |
|
|
<ol>
|
80 : |
|
|
<li>Register Allocator
|
81 : |
|
|
<ol type="a">
|
82 : |
|
|
<li> An improvement in the interference graph construction:
|
83 : |
|
|
Given a copy
|
84 : |
|
|
<pre>
|
85 : |
|
|
s <- t
|
86 : |
|
|
</pre>
|
87 : |
|
|
no interference edge between s and t is added for this definition of s.
|
88 : |
|
|
<p>
|
89 : |
|
|
<li> I've added two new spill heuristic modules that Fermin and I developed
|
90 : |
|
|
(in the new library RA.cm). These are unused in SML/NJ but maybe
|
91 : |
|
|
useful for others (Moby?)
|
92 : |
|
|
<p>
|
93 : |
|
|
<li> Added a flag "ra-dump-size" to print out the size of the flowgraph
|
94 : |
|
|
and the interference graph.
|
95 : |
|
|
</ol>
|
96 : |
|
|
<li> X86
|
97 : |
|
|
<ol type="a">
|
98 : |
|
|
<li> Various fixes in the backend provided by Fermin [C--] and Lal.
|
99 : |
|
|
</ol>
|
100 : |
|
|
<p>
|
101 : |
|
|
<li> Alpha
|
102 : |
|
|
<ol type="a">
|
103 : |
|
|
<li> Added the BSR instruction and code generation that goes with it [C--]
|
104 : |
|
|
<p>
|
105 : |
|
|
<li> Other fixes too numerous to recount provided by Fermin [C--]
|
106 : |
|
|
<p>
|
107 : |
|
|
<li>PSEUDOARITH was missing in AlphaRewrite. This causes an endless
|
108 : |
|
|
loop in C--.
|
109 : |
|
|
</ol>
|
110 : |
|
|
<p>
|
111 : |
|
|
<li> Regmaps
|
112 : |
|
|
<ol type="a">
|
113 : |
|
|
<li> The regmaps are not initialized with the identity physical bindings
|
114 : |
|
|
at creation time. This is unneeded.
|
115 : |
|
|
</ol>
|
116 : |
|
|
<p>
|
117 : |
|
|
<li> MLRISC Optimizations
|
118 : |
|
|
<ol type="a">
|
119 : |
|
|
<li> The DJ-Graph module can now compute the iterated dominance frontiers
|
120 : |
|
|
intersects with liveness incrementally in linear time! Woohoo!
|
121 : |
|
|
This is now used in my new SSA construction algorithm.
|
122 : |
|
|
<p>
|
123 : |
|
|
<li> THe branch reorganization module is now smarter about linear chains of
|
124 : |
|
|
basic blocks.
|
125 : |
|
|
</ol>
|
126 : |
|
|
</ol>
|
127 : |
|
|
<p>
|
128 : |
|
|
<center><h3> CM </h3></center>
|
129 : |
|
|
<ul>
|
130 : |
|
|
<li>Several manual updates
|
131 : |
|
|
<blockquote>
|
132 : |
|
|
I always try to keep the manual in sync with CM's latest features.
|
133 : |
|
|
</blockquote>
|
134 : |
|
|
<p>
|
135 : |
|
|
<li>New noweb tool
|
136 : |
|
|
<blockquote>
|
137 : |
|
|
The existing system is entirely unaffected by this, but some CM users
|
138 : |
|
|
have asked for renewed noweb support. Everything is documented in the
|
139 : |
|
|
CM manual.
|
140 : |
|
|
<p>
|
141 : |
|
|
New (plugin) libraries:
|
142 : |
|
|
<pre>
|
143 : |
|
|
noweb-tool.cm
|
144 : |
|
|
nw-ext.cm
|
145 : |
|
|
</pre>
|
146 : |
|
|
</blockquote>
|
147 : |
|
|
<p>
|
148 : |
|
|
<li>CM version numbering added
|
149 : |
|
|
<blockquote>
|
150 : |
|
|
This is an implementation of Lal's proposal for adding version
|
151 : |
|
|
numbers and version checking to .cm files. Lal said that his
|
152 : |
|
|
proposal was just that -- a proposal. For the time being I went
|
153 : |
|
|
ahead and implemented it so that people can comment on it.
|
154 : |
|
|
Everything is completely backward-compatible (except for the stable
|
155 : |
|
|
library format, i.e., new bootfiles!).
|
156 : |
|
|
<p>
|
157 : |
|
|
As usual, see the CM manual for details.
|
158 : |
|
|
</blockquote>
|
159 : |
|
|
<p>
|
160 : |
|
|
<li> Alternative syntax for anchored paths
|
161 : |
|
|
<blockquote>
|
162 : |
|
|
Dave has recently voiced the same concerns that I had when I did
|
163 : |
|
|
this, so there should be some support. My take is that eventually
|
164 : |
|
|
I will let support for the current syntax (where anchors are
|
165 : |
|
|
"implicit") fade out in favor of the new, explicit syntax.
|
166 : |
|
|
In order to be backward-compatible, both old and new syntax are
|
167 : |
|
|
currently supported.
|
168 : |
|
|
<p>
|
169 : |
|
|
Again, see the CM manual for details.
|
170 : |
|
|
</blockquote>
|
171 : |
|
|
<p>
|
172 : |
|
|
<li> Parallel make is trying to be slightly smarter
|
173 : |
|
|
<blockquote>
|
174 : |
|
|
When the master process finds a "bottleneck", i.e., when there is
|
175 : |
|
|
only one compilation unit that can be compiled and everybody else
|
176 : |
|
|
is waiting on it, then it will simply compile it directly instead
|
177 : |
|
|
of clumsily telling one of the slaves to do it.
|
178 : |
|
|
</blockquote>
|
179 : |
|
|
<p>
|
180 : |
|
|
<li> Support for "unsharing" added
|
181 : |
|
|
<blockquote>
|
182 : |
|
|
This is necessary in order to be able to have two different
|
183 : |
|
|
versions of the same library running at the same time (e.g., for
|
184 : |
|
|
trying out a new MLRISC while still having the old MLRISC linked
|
185 : |
|
|
into the current compiler, etc.) See the CM manual.
|
186 : |
|
|
</blockquote>
|
187 : |
|
|
<p>
|
188 : |
|
|
<li> makedepend
|
189 : |
|
|
<blockquote>
|
190 : |
|
|
Simple "makedepend" functionality added for generating Makefile
|
191 : |
|
|
dependency information. (This is rather crude at the moment.
|
192 : |
|
|
Expect some changes here in the future.)
|
193 : |
|
|
</blockquote>
|
194 : |
|
|
<p>
|
195 : |
|
|
<li> New sml class prefix
|
196 : |
|
|
<blockquote>
|
197 : |
|
|
".fun" added as a recognized suffix for ML files. Also documented
|
198 : |
|
|
explicitly in the manual that the fallback behavior (unknown suffix
|
199 : |
|
|
-> ML file) is not an official feature!
|
200 : |
|
|
</blockquote>
|
201 : |
|
|
<p>
|
202 : |
|
|
<li>Pickler
|
203 : |
|
|
<blockquote>
|
204 : |
|
|
Small changes to the pickler for stable libraries.
|
205 : |
|
|
<blockquote>
|
206 : |
|
|
<p>
|
207 : |
|
|
<li>Internal cleanup
|
208 : |
|
|
<blockquote>
|
209 : |
|
|
Several internal changes to CM (for cleanup/improvement).
|
210 : |
|
|
</blockquote>
|
211 : |
|
|
<p>
|
212 : |
|
|
<li>install.sh changes
|
213 : |
|
|
<blockquote>
|
214 : |
|
|
I changed config/install.sh to remove duplicate entries from the
|
215 : |
|
|
lib/pathconfig file at the end. Moreover, the final version of
|
216 : |
|
|
lib/pathconfig is sorted alphabetically. The same (sorting) is done
|
217 : |
|
|
in src/system/installml.
|
218 : |
|
|
<p>
|
219 : |
|
|
The config/install.sh script now consistently uses relative
|
220 : |
|
|
pathnames in lib/pathconfig whenever the anchor is in the lib
|
221 : |
|
|
directory. (So far this was true for the libraries that come
|
222 : |
|
|
pre-compiled and bundled as part of the bootfiles but not for
|
223 : |
|
|
libraries that are compiled by the script itself.)
|
224 : |
|
|
<p>
|
225 : |
|
|
Changed install.sh script to handle archive files without version number
|
226 : |
|
|
and to use "boot.<arch>-<os>" instead of "sml.boot.<arch>-<os>" for the
|
227 : |
|
|
name of the boot file archive.
|
228 : |
|
|
</blockquote>
|
229 : |
|
|
</ul>
|
230 : |
|
|
<p>
|
231 : |
|
|
<hr>
|
232 : |
|
|
<center><h3> BENCHMARKS </h3></center>
|
233 : |
|
|
Allen Leung, 28 April 2000:
|
234 : |
|
|
<p>
|
235 : |
|
|
I've rerun the benchmarks to see if anything has slowed down in
|
236 : |
|
|
MLRISC recently, but found nothing. I compared 110.25, 110.25+latest
|
237 : |
|
|
MLRISC, and 110.27+ (which also has the latest MLRISC). 110.25 uses
|
238 : |
|
|
cpsopt, and 110.27+ uses flintopt. [110.27+ is repository state
|
239 : |
|
|
at the end of April, which is essentially 110.28 - dbm].
|
240 : |
|
|
<p>
|
241 : |
|
|
The results are:
|
242 : |
|
|
<pre>
|
243 : |
|
|
110.25 versus 110.25+latest MLRISC
|
244 : |
|
|
----------------------------------
|
245 : |
|
|
Name Compilation Runtime Speedup
|
246 : |
|
|
barnesHut 5.560 5.368 3.57% 3.690 3.302 11.76%
|
247 : |
|
|
boyer 8.678 7.672 13.12% 0.313 0.312 0.53%
|
248 : |
|
|
count-graphs 2.048 1.915 6.96% 28.577 27.128 5.34%
|
249 : |
|
|
fft 1.325 1.233 7.43% 1.060 0.982 7.98%
|
250 : |
|
|
knuthBendix 5.337 4.680 14.03% 0.962 0.918 4.72%
|
251 : |
|
|
lexgen 10.310 9.950 3.62% 0.917 0.902 1.66%
|
252 : |
|
|
life 1.230 1.127 9.17% 0.128 0.100 28.33%
|
253 : |
|
|
logic 3.533 3.258 8.44% 5.750 5.413 6.22%
|
254 : |
|
|
mandelbrot 0.145 0.148 -2.25% 0.700 0.685 2.19%
|
255 : |
|
|
mlyacc 34.557 33.342 3.64% 0.553 0.533 3.75%
|
256 : |
|
|
nucleic 6.675 6.507 2.59% 0.173 0.167 4.00%
|
257 : |
|
|
ratio-regions 6.358 6.218 2.25% 119.753 120.772 -0.84%
|
258 : |
|
|
ray 2.280 2.247 1.48% 3.563 3.517 1.33%
|
259 : |
|
|
simple 9.798 9.650 1.54% 2.987 3.083 -3.14%
|
260 : |
|
|
tsp 1.763 1.528 15.38% 8.657 7.718 12.16%
|
261 : |
|
|
vliw 33.938 32.570 4.20% 1.982 2.000 -0.92%
|
262 : |
|
|
Average speedup: 5.32%
|
263 : |
|
|
Average compile time speedup: 5.95%
|
264 : |
|
|
</pre>
|
265 : |
|
|
As you can see, MLRISC on x86 has improved slightly since the
|
266 : |
|
|
110.25. Now comparing 110.25 with 110.27+:
|
267 : |
|
|
<pre>
|
268 : |
|
|
110.25 versus 110.27+
|
269 : |
|
|
---------------------
|
270 : |
|
|
Name Compilation Runtime Speedup
|
271 : |
|
|
barnesHut 5.560 5.568 -0.15% 3.690 3.347 10.26%
|
272 : |
|
|
boyer 8.678 10.058 -13.72% 0.313 0.322 -2.59%
|
273 : |
|
|
count-graphs 2.048 2.125 -3.61% 28.577 31.533 -9.38%
|
274 : |
|
|
fft 1.325 1.297 2.19% 1.060 1.052 0.79%
|
275 : |
|
|
knuthBendix 5.337 3.737 42.82% 0.962 1.175 -18.16%
|
276 : |
|
|
lexgen 10.310 9.985 3.25% 0.917 0.992 -7.56%
|
277 : |
|
|
life 1.230 1.105 11.31% 0.128 0.125 2.67%
|
278 : |
|
|
logic 3.533 3.302 7.02% 5.750 5.357 7.34%
|
279 : |
|
|
mandelbrot 0.145 0.162 -10.31% 0.700 0.753 -7.08%
|
280 : |
|
|
mlyacc 34.557 37.292 -7.33% 0.553 0.493 12.16%
|
281 : |
|
|
nucleic 6.675 7.717 -13.50% 0.173 0.165 5.05%
|
282 : |
|
|
ratio-regions 6.358 3.915 62.41% 119.753 126.153 -5.07%
|
283 : |
|
|
ray 2.280 2.142 6.46% 3.563 2.827 26.06%
|
284 : |
|
|
simple 9.798 10.067 -2.67% 2.987 2.812 6.22%
|
285 : |
|
|
tsp 1.763 1.605 9.87% 8.657 8.870 -2.41%
|
286 : |
|
|
vliw 33.938 46.907 -27.65% 1.982 1.802 9.99%
|
287 : |
|
|
Average speedup: 1.77%
|
288 : |
|
|
Average compile time speedup: 4.15%
|
289 : |
|
|
|
290 : |
|
|
110.25+latest MLRISC versus 110.27+
|
291 : |
|
|
-----------------------------------
|
292 : |
|
|
Name Compilation Runtime Speedup
|
293 : |
|
|
barnesHut 5.368 5.568 -3.59% 3.302 3.347 -1.34%
|
294 : |
|
|
boyer 7.672 10.058 -23.73% 0.312 0.322 -3.11%
|
295 : |
|
|
count-graphs 1.915 2.125 -9.88% 27.128 31.533 -13.97%
|
296 : |
|
|
fft 1.233 1.297 -4.88% 0.982 1.052 -6.66%
|
297 : |
|
|
knuthBendix 4.680 3.737 25.25% 0.918 1.175 -21.84%
|
298 : |
|
|
lexgen 9.950 9.985 -0.35% 0.902 0.992 -9.08%
|
299 : |
|
|
life 1.127 1.105 1.96% 0.100 0.125 -20.00%
|
300 : |
|
|
logic 3.258 3.302 -1.31% 5.413 5.357 1.06%
|
301 : |
|
|
mandelbrot 0.148 0.162 -8.25% 0.685 0.753 -9.07%
|
302 : |
|
|
mlyacc 33.342 37.292 -10.59% 0.533 0.493 8.11%
|
303 : |
|
|
nucleic 6.507 7.717 -15.68% 0.167 0.165 1.01%
|
304 : |
|
|
ratio-regions 6.218 3.915 58.83% 120.772 126.153 -4.27%
|
305 : |
|
|
ray 2.247 2.142 4.90% 3.517 2.827 24.41%
|
306 : |
|
|
simple 9.650 10.067 -4.14% 3.083 2.812 9.66%
|
307 : |
|
|
tsp 1.528 1.605 -4.78% 7.718 8.870 -12.98%
|
308 : |
|
|
vliw 32.570 46.907 -30.56% 2.000 1.802 11.01%
|
309 : |
|
|
Average speedup: -2.94%
|
310 : |
|
|
Average compile time speedup: -1.68%
|
311 : |
|
|
<pre>
|
312 : |
|
|
Overall, I'd say 110.27+ is pretty competitive with 110.25. There are
|
313 : |
|
|
some big improvements (ray, vliw, mlyacc) which can only be attributed to FLINT
|
314 : |
|
|
changes. But something has slowed down (tsp, knuth-bendix, life, mandelbrot,
|
315 : |
|
|
count-graphs). [We know the reasons with knuth-bendix.]
|
316 : |
|
|
Also, compilation time in 110.27+ is generally slower (which is offset
|
317 : |
|
|
by huge improvements in knuth-bendix and ratio-regions).
|
318 : |
|
|
<p>
|
319 : |
|
|
<hr>
|
320 : |
|
|
|
321 : |
|
|
<font size=-2>
|
322 : |
|
|
<address><a href="mailto:george@research.bell-labs.com">
|
323 : |
|
|
Lal George</a></address>
|
324 : |
|
|
<!-- Created: Thu Aug 6 00:13:09 EDT 1998 -->
|
325 : |
|
|
<!-- hhmts start -->
|
326 : |
|
|
Last modified: Tue May 2 12:23:30 EDT 2000
|
327 : |
|
|
<!-- hhmts end -->
|
328 : |
|
|
</font>
|
329 : |
|
|
</blockquote>
|
330 : |
|
|
</body>
|
331 : |
|
|
</html>
|