SCM Repository
Annotation of /sml/trunk/HISTORY
Parent Directory
|
Revision Log
Revision 672 - (view) (download)
1 : | dbm | 570 | This is the HISTORY file for the Yale SML/NJ CVS repository. |
2 : | |||
3 : | An entry should be made for _every_ commit to the repository. | ||
4 : | The entries in this file will be used when creating the README | ||
5 : | for new versions, so keep that in mind when writing the | ||
6 : | description. | ||
7 : | |||
8 : | The form of an entry should be: | ||
9 : | |||
10 : | Name: | ||
11 : | Date: | ||
12 : | Tag: <post-commit CVS tag> | ||
13 : | Description: | ||
14 : | leunga | 591 | ---------------------------------------------------------------------- |
15 : | blume | 666 | Name: Matthias Blume |
16 : | blume | 672 | Date: 2000/06/19 13:40:00 |
17 : | Tag: blume-20000619-manual | ||
18 : | Description: | ||
19 : | |||
20 : | CM manual and system/README update. This only covers the fact that | ||
21 : | there are no more implicit anchors. (Path environments and the "bind" | ||
22 : | option to "cm" have yet to be documented.) | ||
23 : | |||
24 : | ---------------------------------------------------------------------- | ||
25 : | Name: Matthias Blume | ||
26 : | blume | 671 | Date: 2000/06/19 11:05:00 JST |
27 : | Tag: blume-20000619-chdir-bugfix | ||
28 : | Description: | ||
29 : | |||
30 : | Fixed a bug in new SrcPath module that sometimes led to a bad chDir call. | ||
31 : | |||
32 : | ---------------------------------------------------------------------- | ||
33 : | Name: Matthias Blume | ||
34 : | blume | 670 | Date: 2000/06/18 22:00:10 JST |
35 : | Tag: blume-20000618-implicit-anchors-really-gone | ||
36 : | Description: | ||
37 : | |||
38 : | I updates the previous HISTORY entry where I forgot to mention that | ||
39 : | implicit anchors are no longer with us. | ||
40 : | |||
41 : | The current update also gets rid of the (now useless) controller | ||
42 : | CM.Control.implicit_anchors. | ||
43 : | |||
44 : | ---------------------------------------------------------------------- | ||
45 : | Name: Matthias Blume | ||
46 : | blume | 666 | Date: 2000/06/16 17:30:00 JST |
47 : | Tag: blume-20000616-anchorenv | ||
48 : | Description: | ||
49 : | |||
50 : | This patch implements the long anticipated (just kidding :) "anchor | ||
51 : | environment" mechanism. In the course of doing this, I also | ||
52 : | re-implemented CM's internal "SrcPath" module from scratch. The new | ||
53 : | one should be more robust in certain boundary cases. In any case, it | ||
54 : | is a lot cleaner than its predecessor (IMHO). | ||
55 : | |||
56 : | This time, although there is yet another boot file format change, I | ||
57 : | kept the unpickler backward-compatible. As a result, no new bootfiles | ||
58 : | are necessary and bootstrapping is straightforward. (You cannot read | ||
59 : | new bootfiles into an old system, but the other way around is no | ||
60 : | problem.) | ||
61 : | |||
62 : | Visible changes: | ||
63 : | |||
64 : | blume | 670 | ** 0. Implicit path anchors (without the leading $-symbol) are no |
65 : | longer recognized at all. This means that such path names are not | ||
66 : | illegal either. For example, the name basis.cm simply refers to a | ||
67 : | local file called "basis.cm" (i.e, the name is an ordinary path | ||
68 : | relative to .cm-files directory). Or, to put it differently, only | ||
69 : | names that start with $ are anchored paths. | ||
70 : | blume | 666 | |
71 : | blume | 670 | ** 1. The $<singlearc> abbreviation for $/<singlearc> has finally |
72 : | vanished. | ||
73 : | |||
74 : | John (Reppy) had critizised this as soon as I originally proposed and | ||
75 : | blume | 666 | implemented it, but at that time I did not really deeply believe |
76 : | him. :) Now I came full-circle because I need the $<singlearc> syntax | ||
77 : | in another place where it cannot be seen as an abbreviation for | ||
78 : | $/<singlearc>. To avoid the confusion, $<singlearc> now means what it | ||
79 : | seems to mean (i.e., it "expands" into the corresponding anchor | ||
80 : | value). | ||
81 : | |||
82 : | However, when paths are used as members in CM description files, it | ||
83 : | continues to be true that there must be at least another arc after the | ||
84 : | anchor. This is now enforced separately during semantic analysis | ||
85 : | blume | 670 | (i.e., from a lexical/syntactical point of view, the notation is ok.) |
86 : | blume | 666 | |
87 : | ** 2. The "cm" class now accepts an option "bind". The option's value | ||
88 : | is a sub-option list of precisely two items -- one labeled "anchor" | ||
89 : | and the other one labeled "value". As you might expect, "anchor" is | ||
90 : | used to specify an anchor name to be bound, and "value" specifies what | ||
91 : | the anchor is being bound to. | ||
92 : | |||
93 : | The value must be a directory name and can be given in either standard | ||
94 : | syntax (including the possibility that it is itself an anchored path) | ||
95 : | or native syntax. | ||
96 : | |||
97 : | Examples: | ||
98 : | |||
99 : | foo.cm (bind:(anchor:bar value:$mystuff/bar)) | ||
100 : | lib.cm (bind:(anchor:a value:"H:\\x\\y\\z")) (* only works under windows *) | ||
101 : | |||
102 : | and so on. | ||
103 : | |||
104 : | The meaning of this is that the .cm-file will be processed with an | ||
105 : | augmented anchor environment where the given anchor(s) is/are bound to | ||
106 : | the given values(s). | ||
107 : | |||
108 : | The rationale for having this feature is this: Suppose you are trying | ||
109 : | to use two different (already stable) libraries a.cm and b.cm (that | ||
110 : | you perhaps didn't write yourself). Further, suppose each of these | ||
111 : | two libraries internally uses its own auxiliary library $aux/lib.cm. | ||
112 : | Normally you would now have a problem because the anchor "lib" can not | ||
113 : | be bound to more than one value globally. Therefore, the project that | ||
114 : | uses both a.cm and b.cm must locally redirect the anchor to some other | ||
115 : | place: | ||
116 : | |||
117 : | a.cm (bind:(anchor:lib value:/usr/lib/smlnj/a-stuff)) | ||
118 : | b.cm (bind:(anchor:lib value:/usr/lib/smlnj/b-stuff)) | ||
119 : | |||
120 : | This hard-wires $lib/aux.cm to /usr/lib/smlnj/a-stuff/aux.cm or | ||
121 : | /usr/lib/smlnj/b-stuff/aux.cm, respectively. | ||
122 : | |||
123 : | Hard-wiring path names is a bit inflexible (and CM will verbosely warn | ||
124 : | you when you do so at the time of CM.stabilize). Therefore, you can | ||
125 : | also use an anchored path as the value: | ||
126 : | |||
127 : | a.cm (bind:(anchor:lib value:$a-lib)) | ||
128 : | b.cm (bind:(anchor:lib value:$b-lib)) | ||
129 : | |||
130 : | Now you can globally configure (using the usual CM.Anchor.anchor or | ||
131 : | pathconfig machinery) bindings for "a-lib" and "b-lib". Since "lib" | ||
132 : | itself is always locally bound, setting it globally is no longer | ||
133 : | meaningful or necessary (but it does not hurt either). In fact, "lib" | ||
134 : | can still be used as a global anchor for separate purposes. As a | ||
135 : | matter of fact, one can locally define "lib" in terms of a global | ||
136 : | "lib": | ||
137 : | |||
138 : | a.cm (bind:(anchor:lib value:$lib/a)) | ||
139 : | b.cm (bind:(anchor:lib value:$lib/b)) | ||
140 : | |||
141 : | ** 3: The encoding of path names has changed. This affects the way | ||
142 : | path names are shown in CM's progress report and also the internal | ||
143 : | protocol encoding used for parallel make. | ||
144 : | |||
145 : | The encoding now uses one or more ':'-separated segments. Each | ||
146 : | segments corresponds to a file that has been specified relative to the | ||
147 : | file given by its preceding segment. The first segment is either | ||
148 : | relative to the CWD, absolute, or anchored. Each segment itself is | ||
149 : | basically a Unix pathname; all segments but the first are relative. | ||
150 : | |||
151 : | Example: | ||
152 : | |||
153 : | $foo/bar/baz.cm:a/b/c.sml | ||
154 : | |||
155 : | This path denotes the file bar/a/b/c.sml relative to the directory | ||
156 : | denoted by anchor "foo". Notice that the encoding also includes | ||
157 : | baz.cm which is the .cm-file that listed a/b/c.sml. As usual, such | ||
158 : | paths are resolved relative to the .cm-files directory, so baz.cm must | ||
159 : | be ignored to get the "real" pathname. | ||
160 : | |||
161 : | To make this fact more obvious, CM puts the names of such "virtual | ||
162 : | arcs" into parentheses when they appear in progress reports. (No | ||
163 : | parentheses will appear in the internal protocol encoding.) Thus, | ||
164 : | what you really see is: | ||
165 : | |||
166 : | $foo/bar/(baz.cm):a/b/c.sml | ||
167 : | |||
168 : | I find this notation to be much more informative than before. | ||
169 : | |||
170 : | Another new feature of the encoding is that special characters | ||
171 : | including parentheses, colons, (back)slashes, and white space are | ||
172 : | written as \ddd (where ddd is the decimal encoding of the character). | ||
173 : | |||
174 : | blume | 670 | *** The CM manual still needs to be updated. |
175 : | |||
176 : | blume | 666 | ---------------------------------------------------------------------- |
177 : | leunga | 660 | Name: Allen Leung |
178 : | Date: 2000/06/15 00:38:00 | ||
179 : | Tag: leunga-20000615-x86-peephole | ||
180 : | |||
181 : | x86 Peephole fix by Fermin. Affects c-- and moby only. | ||
182 : | |||
183 : | ---------------------------------------------------------------------- | ||
184 : | blume | 658 | Name: Matthias Blume |
185 : | Date: 2000/06/12 11:40:00 | ||
186 : | Tag: blume-20000612-parmakefix | ||
187 : | Description: | ||
188 : | |||
189 : | More cleanup after changing the file naming scheme: This time I | ||
190 : | repaired the parallel make mechanism for CMB.make which I broke earlier. | ||
191 : | |||
192 : | ---------------------------------------------------------------------- | ||
193 : | leunga | 657 | Name: Allen Leung |
194 : | Date: 2000/06/09 01:25:00 | ||
195 : | Tag: leunga-20000609-various | ||
196 : | |||
197 : | None of these things should affect normal SML/NJ operations | ||
198 : | |||
199 : | 1. Peephole improvements provided by Fermin (c--) | ||
200 : | 2. New annotation DEFUSE for adding extra dependence (moby) | ||
201 : | 3. New X86 LOCK instructions (moby) | ||
202 : | 4. New machine description language for reservation tables (scheduling) | ||
203 : | 5. Fixes to various optimization/analysis modules (branch chaining, dominator | ||
204 : | trees etc.) | ||
205 : | 6. I've changed the CM files so that they can work with versions | ||
206 : | 110.0.6, 110.25 and 110.28 | ||
207 : | |||
208 : | ---------------------------------------------------------------------- | ||
209 : | blume | 652 | Name: Matthias Blume |
210 : | blume | 656 | Date: 2000/06/09 12:40:00 |
211 : | Tag: blume-20000609-log | ||
212 : | Description: | ||
213 : | |||
214 : | - Removed all(?) remaining RCS Log entries from sources. | ||
215 : | |||
216 : | - Fixed bug in ml-yacc and ml-lex sources (use explicit anchors for | ||
217 : | anchored paths). | ||
218 : | |||
219 : | ---------------------------------------------------------------------- | ||
220 : | Name: Matthias Blume | ||
221 : | blume | 653 | Date: 2000/06/07 17:00:00 JST |
222 : | Tag: blume-20000607-no-implicit-anchors | ||
223 : | Description: | ||
224 : | |||
225 : | 1. This update changes the default setting for | ||
226 : | CM.Control.implicit_anchors from true to false. This means that | ||
227 : | implicit anchors are no longer permitted by default. I also tried to | ||
228 : | make sure that nothing else still relies on implicit anchors. | ||
229 : | (This is the next step on the schedule towards a CM that does not even | ||
230 : | have the notion of implicit anchors anymore.) | ||
231 : | |||
232 : | 2. More CM manual updates. | ||
233 : | |||
234 : | 3. I managed to track down and fix the pickling bug I mentioned last | ||
235 : | time. Because of the previously existing workaround, this entails no | ||
236 : | immediate practical changes. | ||
237 : | |||
238 : | ---------------------------------------------------------------------- | ||
239 : | Name: Matthias Blume | ||
240 : | blume | 652 | Date: 2000/06/06 11:15:00 JST |
241 : | Tag: blume-20000606-lazierpickle | ||
242 : | Description: | ||
243 : | |||
244 : | !!!! NEW BOOT FILES !!!! | ||
245 : | |||
246 : | * The main purpose of this update is to make library pickles lazier in | ||
247 : | order to reduce the initial space penalty for autoloading a library. | ||
248 : | As a result, it is now possible to have $smlnj/compiler.cm | ||
249 : | pre-registered. This should take care of the many complaints or | ||
250 : | inquiries about missing structure Compiler. This required changes to | ||
251 : | CM's internal data structures and small tweaks to some algorithms. | ||
252 : | |||
253 : | As a neat additional effect, it is no longer necessary (for the sake | ||
254 : | of lean heap image files) to distinguish between a "minimal" CM and a | ||
255 : | "full" CM. Now, there is only one CM (i.e., the "full" version: | ||
256 : | $smlnj/cm.cm aka $smlnj/cm/full.cm), and it is always available at the | ||
257 : | interactive top level. ($smlnj/cm/minimal.cm is gone.) | ||
258 : | |||
259 : | To make the life of compiler-hackers easier, "makeml" now also | ||
260 : | pre-registers $smlnj/cmb.cm (aka $smlnj/cmb/current.cm). In other | ||
261 : | words, after you bootstrap a new sml for the first time, you will not | ||
262 : | have to autoload $smlnj/cmb.cm again afterwards. (The first time | ||
263 : | around you will still have to do it, though.) | ||
264 : | |||
265 : | * A second change consists of major updates to the CM manual. There | ||
266 : | are now several appendices with summary information and also a full | ||
267 : | specification of the CM description file syntax. | ||
268 : | |||
269 : | * In directory src/system I added the script "allcross". This script | ||
270 : | invokes sml and cross-compiles the compiler for all supported | ||
271 : | architectures. (Useful when providing a new set of boot files.) | ||
272 : | |||
273 : | * There seems to be a latent bug in my "lazy pickles" mechanism. I | ||
274 : | added a small tweak to pickle-util.sml to work around this problem, | ||
275 : | but it is not a proper fix yet. I will investigate further. (The | ||
276 : | effect of the bug was an inflation of library pickle size.) | ||
277 : | |||
278 : | * Version number increased to 110.28.1 (to avoid compatibility problems). | ||
279 : | |||
280 : | ---------------------------------------------------------------------- | ||
281 : | leunga | 646 | Name: Allen Leung |
282 : | leunga | 648 | Date: 2000/05/25 17:28 EDT |
283 : | Tag: leunga-20000525-ra | ||
284 : | Description: | ||
285 : | |||
286 : | Fixed a bug in freezing phase of the register allocator. | ||
287 : | |||
288 : | ---------------------------------------------------------------------- | ||
289 : | Name: Allen Leung | ||
290 : | leunga | 647 | Date: 2000/05/15 22:53 EDT |
291 : | leunga | 646 | Tag: leunga-20000515-alpha-x86-ra |
292 : | Description: | ||
293 : | |||
294 : | 1. Alpha | ||
295 : | |||
296 : | Slight cleanup. Removed the instruction SGNXL | ||
297 : | |||
298 : | 2. X86 | ||
299 : | |||
300 : | Added the following instructions to the instruction set: | ||
301 : | |||
302 : | ROLx, RORx, | ||
303 : | BTx, BTSx, BTLx, BTRx, | ||
304 : | XCHGx, and variants with the LOCK prefix | ||
305 : | |||
306 : | 3. Register Allocation | ||
307 : | |||
308 : | The module ra-rewrite-with-renaming has been improved. | ||
309 : | |||
310 : | leunga | 647 | These have no effect on SML/NJ. |
311 : | |||
312 : | leunga | 646 | ---------------------------------------------------------------------- |
313 : | blume | 642 | Name: Matthias Blume |
314 : | blume | 645 | Date: 2000/05/15 16:20:00 JST |
315 : | Tag: blume-20000515-lightrebuild | ||
316 : | Description: | ||
317 : | |||
318 : | 1. I added an alternative to "-rebuild" to "makeml". The difference is | ||
319 : | that prior to calling CMB.make' the CM-variable "LIGHT" will be | ||
320 : | defined. In effect, the command will not build any cross-compiler | ||
321 : | backends and therefore finish more quickly. | ||
322 : | |||
323 : | The "fixpt" script also takes a "-light" switch to be able to use | ||
324 : | this new facility while compiling for a fixpoint. | ||
325 : | |||
326 : | 2. I replaced all mentions of anchored paths in group owner specifications | ||
327 : | with simple relative paths (usually starting with ".."). | ||
328 : | The rationale is that a library's internal workings should not be | ||
329 : | compromised by the lack of some anchor. (An anchor is necessary | ||
330 : | for someone who wants to refer to the library by an anchored path, | ||
331 : | but it should not be necessary to build the same library in the first | ||
332 : | place.) | ||
333 : | |||
334 : | 3. I changed the way CM's tool mechanism determines the shell command | ||
335 : | string used for things like ml-yacc etc. so that it does not break | ||
336 : | when CM.Control.implicit_anchors is turned off. | ||
337 : | |||
338 : | ---------------------------------------------------------------------- | ||
339 : | Name: Matthias Blume | ||
340 : | blume | 644 | Date: 2000/05/12 18:20:00 JST |
341 : | Tag: blume-20000512-ml-build | ||
342 : | Description: | ||
343 : | |||
344 : | Fixed a bug in config/_ml-build that prevented ml-yacc and ml-lex from | ||
345 : | getting installed properly (by config/install.sh). | ||
346 : | |||
347 : | ---------------------------------------------------------------------- | ||
348 : | Name: Matthias Blume | ||
349 : | blume | 643 | Date: 2000/05/12 17:30:00 JST |
350 : | Tag: blume-20000512-anchors | ||
351 : | Description: | ||
352 : | |||
353 : | !!! NEW BOOT FILES !!! | ||
354 : | |||
355 : | This change is in preparation of fading out support for "implicitly | ||
356 : | anchored path names". I went through all sources and used the | ||
357 : | explicit (and relatively new) $-notation. See system/README and the | ||
358 : | CM manual for more info on this. | ||
359 : | |||
360 : | I also modified the anchoring scheme for some things such as "smlnj", | ||
361 : | "MLRISC", "cm", etc. to take advantage of the fact that explicit | ||
362 : | anchors are more expressive: anchor name and first arc do not have to | ||
363 : | coincide. This entails the following user-visible change: | ||
364 : | |||
365 : | You have to write $smlnj/foo/bar instead of smlnj/foo/bar. In | ||
366 : | particular, when you fire up sml with a command-line argument, say, | ||
367 : | e.g.: | ||
368 : | |||
369 : | sml '$smlnj/cmb.cm' | ||
370 : | |||
371 : | At the ML toplevel prompt: | ||
372 : | |||
373 : | CM.autoload "$smlnj/cmb.cm"; | ||
374 : | |||
375 : | There is also a new controller in CM.Control that can be used to turn | ||
376 : | off all remaining support for implicit anchors by saying: | ||
377 : | |||
378 : | CM.autoload "$smlnj/ | ||
379 : | #set CM.Control.implicit_anchors false; | ||
380 : | |||
381 : | This causes CM to reject implicitly anchored paths. This is (for the | ||
382 : | time being) less permissive than the "final" version where there will | ||
383 : | be no more such implicit anchors and relative paths will be just that: | ||
384 : | relative. | ||
385 : | |||
386 : | The next step (version after next version?) will be to make the | ||
387 : | default for CM.Control.implicit_anchors false. After the dust has | ||
388 : | settled, I can then produce the "final" version of this... | ||
389 : | |||
390 : | Note: Since bootstrapping is a bit tricky, I provided new boot files. | ||
391 : | |||
392 : | ---------------------------------------------------------------------- | ||
393 : | Name: Matthias Blume | ||
394 : | blume | 642 | Date: 2000/05/11 16:30:00 JST |
395 : | Tag: blume-20000511-sources | ||
396 : | Description: | ||
397 : | |||
398 : | The main change is that I added function CM.sources as a generalized | ||
399 : | version of the earlier CM.makedepend. This entails the following | ||
400 : | additional changes: | ||
401 : | |||
402 : | - CM.makedepend has been dropped. | ||
403 : | |||
404 : | - CM manual has been updated. | ||
405 : | |||
406 : | - TOOLS signature and API have been changed. | ||
407 : | |||
408 : | ---------------------------------------------------------------------- | ||
409 : | leunga | 640 | Name: Allen Leung |
410 : | leunga | 641 | Date: 2000/05/10 21:17 EDT |
411 : | Tag: leunga-20000510-moby-c--ssa | ||
412 : | Description: | ||
413 : | |||
414 : | Various bug fixes and new features for C--, Moby and MLRISC optimizations. | ||
415 : | None of these affect SML/NJ. | ||
416 : | |||
417 : | 1. Register Allocation | ||
418 : | |||
419 : | a. A new ra spilling module (ra/ra-spill-with-renaming) is implemented. | ||
420 : | This module tries to remove local (i.e. basic block level) redundancies | ||
421 : | during spilling. | ||
422 : | |||
423 : | b. A new framework for performing region based register allocation. | ||
424 : | Not yet entirely functional. | ||
425 : | |||
426 : | 2. X86 | ||
427 : | |||
428 : | a. DefUse for POP was missing the stack pointer [found by Lal] | ||
429 : | b. Reload for CALL was incorrect in X86Spill [found by John] | ||
430 : | c. Various fixes in X86Spill so that it can be used correctly for | ||
431 : | the new spilling module. | ||
432 : | |||
433 : | 3. SSA/IR | ||
434 : | |||
435 : | a. New module ir/dj-dataflow.sml implements elimination based | ||
436 : | data flow analysis. | ||
437 : | |||
438 : | 4. MLRiscGen | ||
439 : | |||
440 : | a. Fix for gc type annotation | ||
441 : | |||
442 : | 5. MDGen | ||
443 : | |||
444 : | Various fixes for machine description -> ml code translation. For ssa | ||
445 : | only. | ||
446 : | |||
447 : | ---------------------------------------------------------------------- | ||
448 : | Name: Allen Leung | ||
449 : | leunga | 640 | Date: 2000/05/08 22:17 EDT |
450 : | Tag: leunga-20000508-labexp | ||
451 : | Description: | ||
452 : | |||
453 : | Fermin has found a few assembly problems with constant expressions | ||
454 : | generated in LabelExp. Mostly, the problems involve extra parentheses, | ||
455 : | which choke on dumb assemblers. This is his fix. | ||
456 : | |||
457 : | ---------------------------------------------------------------------- | ||
458 : | dbm | 635 | Name: Dave MacQueen |
459 : | Date: 2000/04/09 14:00 EDT | ||
460 : | Tag: dbm-20000502-Version_110_28 | ||
461 : | Description: | ||
462 : | |||
463 : | 1. Updated src/compiler/TopLevel/main/version.sml to version 110.28 | ||
464 : | |||
465 : | 2. Updated config/version to 110.28 | ||
466 : | |||
467 : | 3. Updated config/srcarchiveurl | ||
468 : | |||
469 : | 3. New boot files! | ||
470 : | ftp://ftp.research.bell-labs.com/dist/smlnj/working/110.28/ | ||
471 : | |||
472 : | ---------------------------------------------------------------------- | ||
473 : | blume | 634 | Name: Matthias Blume |
474 : | Date: 2000/05/01 19:05:00 JST | ||
475 : | Tag: blume-20000501-noweb | ||
476 : | Description: | ||
477 : | |||
478 : | A new noweb tool has been added. The existing system is entirely | ||
479 : | unaffected by this, but some CM users have asked for renewed noweb | ||
480 : | support. Everything is documented in the CM manual. | ||
481 : | |||
482 : | New (plugin) libraries: | ||
483 : | |||
484 : | noweb-tool.cm | ||
485 : | nw-ext.cm | ||
486 : | |||
487 : | ---------------------------------------------------------------------- | ||
488 : | dbm | 633 | Name: Dave MacQueen |
489 : | Date: 2000/04/30 12:40PM EDT | ||
490 : | Tag: dbm-20000430-bug_fixes | ||
491 : | Description: | ||
492 : | |||
493 : | 1. Fix for bug 1498 | ||
494 : | smlnj/src/system/Basis/Implementation/Unsafe/object.sig | ||
495 : | smlnj/src/system/Basis/Implementation/Unsafe/object.sml | ||
496 : | added toRealArray function | ||
497 : | smlnj/src/compiler/MiscUtil/print/ppobj.sml | ||
498 : | added check for tag Obj.RealArray to array printing case in ppObj | ||
499 : | |||
500 : | 2. Fix for bug 1510 | ||
501 : | smlnj/src/compiler/Semant/types/typesutil.sml | ||
502 : | fixed definition of dummyargs (used by equalTycon) so that | ||
503 : | dummy args are distinct types | ||
504 : | |||
505 : | ---------------------------------------------------------------------- | ||
506 : | blume | 629 | Name: Matthias Blume |
507 : | blume | 632 | Date: 2000/04/30 01:00:00 JST |
508 : | Tag: blume-20000430-versions | ||
509 : | Description: | ||
510 : | |||
511 : | 1. CM version numbering added. This is an implementation of Lal's | ||
512 : | proposal for adding version numbers and version checking to .cm | ||
513 : | files. Lal said that his proposal was just that -- a proposal. | ||
514 : | For the time being I went ahead and implemented it so that people | ||
515 : | can comment on it. Everything is completely backward-compatible | ||
516 : | (except for the stable library format, i.e., new bootfiles!). | ||
517 : | |||
518 : | As usual, see the CM manual for details. | ||
519 : | |||
520 : | 2. An alternative syntax for anchored paths has been implemented. | ||
521 : | Dave has recently voiced the same concerns that I had when I did | ||
522 : | this, so there should be some support. My take is that eventually | ||
523 : | I will let support for the current syntax (where anchors are | ||
524 : | "implicit") fade out in favor of the new, explicit syntax. | ||
525 : | In order to be backward-compatible, both old and new syntax are | ||
526 : | currently supported. | ||
527 : | |||
528 : | Again, see the CM manual for details. | ||
529 : | |||
530 : | 3. Parallel make is trying to be slightly smarter: When the master | ||
531 : | process finds a "bottleneck", i.e., when there is only one | ||
532 : | compilation unit that can be compiled and everybody else is | ||
533 : | waiting on it, then it will simply compile it directly instead | ||
534 : | of clumsily telling one of the slaves to do it. | ||
535 : | |||
536 : | 4. Support for "unsharing" added. This is necessary in order to be | ||
537 : | able to have two different versions of the same library running | ||
538 : | at the same time (e.g., for trying out a new MLRISC while still | ||
539 : | having the old MLRISC linked into the current compiler, etc.) | ||
540 : | See the CM manual. | ||
541 : | |||
542 : | 5. Simple "makedepend" functionality added for generating Makefile | ||
543 : | dependency information. (This is rather crude at the moment. | ||
544 : | Expect some changes here in the future.) | ||
545 : | |||
546 : | 6. ".fun" added as a recognized suffix for ML files. Also documented | ||
547 : | explicitly in the manual that the fallback behavior (unknown suffix | ||
548 : | -> ML file) is not an official feature! | ||
549 : | |||
550 : | 7. Small changes to the pickler for stable libraries. | ||
551 : | |||
552 : | 8. Several internal changes to CM (for cleanup/improvement). | ||
553 : | |||
554 : | |||
555 : | !!!! NEW BINFILES !!!! | ||
556 : | |||
557 : | ---------------------------------------------------------------------- | ||
558 : | Name: Matthias Blume | ||
559 : | blume | 631 | Date: 2000/04/28 17:30:00 JST |
560 : | Tag: blume-20000428-pathconfig | ||
561 : | Description: | ||
562 : | |||
563 : | 1. I changed config/install.sh to remove duplicate entries from the | ||
564 : | lib/pathconfig file at the end. Moreover, the final version of | ||
565 : | lib/pathconfig is sorted alphabetically. The same (sorting) is done | ||
566 : | in src/system/installml. | ||
567 : | |||
568 : | 2. The config/install.sh script now consistently uses relative | ||
569 : | pathnames in lib/pathconfig whenever the anchor is in the lib | ||
570 : | directory. (So far this was true for the libraries that come | ||
571 : | pre-compiled and bundled as part of the bootfiles but not for | ||
572 : | libraries that are compiled by the script itself.) | ||
573 : | |||
574 : | ---------------------------------------------------------------------- | ||
575 : | Name: Matthias Blume | ||
576 : | blume | 629 | Date: 2000/04/26 13:10:00 JST |
577 : | Tag: blume-20000426-fun_suffix | ||
578 : | Description: | ||
579 : | |||
580 : | Added ".fun" as a recognized file name suffix (for ML code). | ||
581 : | |||
582 : | ---------------------------------------------------------------------- | ||
583 : | leunga | 628 | Name: Allen Leung |
584 : | Date: 2000/04/25 17:00:00 EST | ||
585 : | Tag: leunga-20000425-alpha-ra | ||
586 : | Description: | ||
587 : | |||
588 : | 1. Alpha | ||
589 : | |||
590 : | PSEUDOARITH was missing in AlphaRewrite. This causes an endless loop | ||
591 : | in C--. | ||
592 : | |||
593 : | 2. RA | ||
594 : | |||
595 : | Added a flag "ra-dump-size" to print out the size of the flowgraph | ||
596 : | and the interference graph. | ||
597 : | |||
598 : | ---------------------------------------------------------------------- | ||
599 : | dbm | 627 | Name: Dave MacQueen |
600 : | Date: 2000/04/25/ | ||
601 : | Tag: dbm-20000425-mlyacc_doc_examples | ||
602 : | Description: | ||
603 : | Updated mlyacc.tex sections 5 and 7 for SML '97 and CM. | ||
604 : | Updated all three examples in src/ml-yacc/examples to run | ||
605 : | under 110.* using CM.make. | ||
606 : | |||
607 : | ---------------------------------------------------------------------- | ||
608 : | leunga | 624 | Name: Allen Leung |
609 : | Date: 2000/04/20 23:04:00 EST | ||
610 : | Tag: leunga-20000420-ssa-c---stuff | ||
611 : | Description: | ||
612 : | |||
613 : | This update synchronizes my repository with Yale's. Most of these | ||
614 : | changes, however, do not affect SML/NJ at all (the RA is an exception). | ||
615 : | |||
616 : | 1. Register Allocator | ||
617 : | |||
618 : | a. An improvement in the interference graph construction: | ||
619 : | Given a copy | ||
620 : | |||
621 : | s <- t | ||
622 : | |||
623 : | leunga | 628 | no interference edge between s and t is added for this definition of s. |
624 : | leunga | 624 | |
625 : | b. I've added two new spill heuristic modules that Fermin and I developed | ||
626 : | (in the new library RA.cm). These are unused in SML/NJ but maybe | ||
627 : | useful for others (Moby?) | ||
628 : | |||
629 : | 2. X86 | ||
630 : | |||
631 : | a. Various fixes in the backend provided by Fermin [C--] and Lal. | ||
632 : | |||
633 : | 3. Alpha | ||
634 : | |||
635 : | a. Added the BSR instruction and code generation that goes with it [C--] | ||
636 : | b. Other fixes too numerous to recount provided by Fermin [C--] | ||
637 : | |||
638 : | 4. Regmaps | ||
639 : | |||
640 : | a. The regmaps are not initialized with the identity physical bindings | ||
641 : | at creation time. This is unneeded. | ||
642 : | |||
643 : | 5. MLRISC Optimizations | ||
644 : | |||
645 : | a. The DJ-Graph module can now compute the iterated dominance frontiers | ||
646 : | intersects with liveness incrementally in linear time! Woohoo! | ||
647 : | This is now used in my new SSA construction algorithm. | ||
648 : | |||
649 : | b. THe branch reorganization module is now smarter about linear chains of | ||
650 : | basic blocks. | ||
651 : | |||
652 : | |||
653 : | ---------------------------------------------------------------------- | ||
654 : | blume | 615 | Name: Matthias Blume |
655 : | Date: 2000/04/12 13:52:00 JST | ||
656 : | Tag: blume_main_v110p27_1 | ||
657 : | Description: | ||
658 : | |||
659 : | Changed install.sh script to handle archive files without version number | ||
660 : | and to use "boot.<arch>-<os>" instead of "sml.boot.<arch>-<os>" for the | ||
661 : | name of the boot file archive. | ||
662 : | |||
663 : | ---------------------------------------------------------------------- | ||
664 : | dbm | 607 | Name: Dave MacQueen |
665 : | Date: 2000/04/09 14:00 EDT | ||
666 : | Tag: dbm-20000410-Version_110_27 | ||
667 : | Description: | ||
668 : | |||
669 : | 1. Updated src/compiler/TopLevel/main/version.sml to version 110.27 | ||
670 : | |||
671 : | 2. Updated src/config/version to 110.27 | ||
672 : | |||
673 : | 3. New boot files! | ||
674 : | |||
675 : | ---------------------------------------------------------------------- | ||
676 : | leunga | 606 | Name: Allen Leung |
677 : | Date: 2000/04/09 19:09:00 EST | ||
678 : | Tag: leunga-20000409-misc | ||
679 : | Description: | ||
680 : | |||
681 : | 1. Yet another fix for x86 assembly for idivl, imull, mull and friends. | ||
682 : | |||
683 : | 2. Miscellaneous improvements to MLRISC (unused in sml/nj) | ||
684 : | |||
685 : | ---------------------------------------------------------------------- | ||
686 : | monnier | 605 | Name: Stefan |
687 : | Date: 2000/04/07 10:00:00 EDT | ||
688 : | Tag: monnier-20000406-branch-handling | ||
689 : | Description: | ||
690 : | |||
691 : | Improved handling of branches (mostly those generated from | ||
692 : | polymorphic equality), removed switchoff and changed the | ||
693 : | default optimization settings (more cpsopt and less flintopt). | ||
694 : | |||
695 : | ---------------------------------------------------------------------- | ||
696 : | leunga | 601 | Name: Allen Leung |
697 : | leunga | 602 | Date: 2000/04/06 01:30:00 EST |
698 : | Tag: leunga-20000406-peephole-x86-SSA-2 | ||
699 : | Description: | ||
700 : | |||
701 : | Forgot a few files. | ||
702 : | |||
703 : | ---------------------------------------------------------------------- | ||
704 : | Name: Allen Leung | ||
705 : | leunga | 601 | Date: 2000/04/06 00:36:00 EST |
706 : | Tag: leunga-20000406-peephole-x86-SSA | ||
707 : | Description: | ||
708 : | |||
709 : | 1. New Peephole code | ||
710 : | |||
711 : | 2. Minor improvement to X86 instruction selection | ||
712 : | |||
713 : | 3. Various fixes to SSA and machine description -> code translator | ||
714 : | |||
715 : | ---------------------------------------------------------------------- | ||
716 : | blume | 595 | Name: Matthias Blume |
717 : | Date: 2000/04/05 12:30:00 JST | ||
718 : | Tag: blume_main_v110p26p2_3 | ||
719 : | Description: | ||
720 : | |||
721 : | This update just merges three minor cosmetic updates to CM's sources | ||
722 : | to get ready for the 110.27 code freeze on Friday. No functionality | ||
723 : | has changed. | ||
724 : | |||
725 : | ---------------------------------------------------------------------- | ||
726 : | leunga | 593 | Name: Allen Leung |
727 : | leunga | 594 | Date: 2000/04/04 19:39:00 EST |
728 : | Tag: leunga-20000404-x86-asm | ||
729 : | Description: | ||
730 : | |||
731 : | 1. Fixed a problem in X86 assembly. | ||
732 : | |||
733 : | Things like | ||
734 : | |||
735 : | jmp %eax | ||
736 : | jmp (%eax) | ||
737 : | |||
738 : | should be output as | ||
739 : | |||
740 : | jmp *%eax | ||
741 : | jmp *(%eax) | ||
742 : | |||
743 : | 2. Assembly output | ||
744 : | |||
745 : | Added a new flag | ||
746 : | |||
747 : | "asm-indent-copies" (default to false) | ||
748 : | |||
749 : | When this flag is on, parallel copies will be indented an extra level. | ||
750 : | |||
751 : | ---------------------------------------------------------------------- | ||
752 : | Name: Allen Leung | ||
753 : | leunga | 593 | Date: 2000/04/04 03:18:00 EST |
754 : | Tag: leunga-20000404-C--Moby | ||
755 : | Description: | ||
756 : | |||
757 : | All of these fixes are related to C--, Moby, and my own optimization | ||
758 : | stuff; so they shouldn't affect SML/NJ. | ||
759 : | |||
760 : | 1. X86 | ||
761 : | |||
762 : | Various fixes related floating point, and extensions. | ||
763 : | |||
764 : | 2. Alpha | ||
765 : | |||
766 : | Some extra patterns related to loads with signed/zero extension | ||
767 : | provided by Fermin. | ||
768 : | |||
769 : | 3. Assembly | ||
770 : | |||
771 : | monnier | 659 | When generating assembly, resolve the value of client defined constants, |
772 : | leunga | 593 | instead of generating symbolic values. This is controlled by the |
773 : | new flag "asm-resolve-constants", which is default to true. | ||
774 : | |||
775 : | 4. Machine Descriptions | ||
776 : | |||
777 : | a. The precedence parser was slightly broken when parsing infixr symbols. | ||
778 : | b. The type generalizing code had the bound variables reversed, resulting | ||
779 : | in a problem during arity raising. | ||
780 : | c. Various fixes in machine descriptions. | ||
781 : | |||
782 : | ---------------------------------------------------------------------- | ||
783 : | blume | 592 | Name: Matthias Blume |
784 : | Date: 2000/04/03 16:05:00 JST | ||
785 : | Tag: blume_main_v110p26p2_2 | ||
786 : | Description: | ||
787 : | |||
788 : | I eliminated coreEnv from compInfo. Access to the "Core" structure is | ||
789 : | now done via the ordinary static environment that is context to each | ||
790 : | compilation unit. | ||
791 : | |||
792 : | To this end, I arranged that instead of "structure Core" as "structure | ||
793 : | _Core" is bound in the pervasive environment. Core access is done via | ||
794 : | monnier | 659 | _Core (which can never be accidentally rebound because _Core is not a |
795 : | blume | 592 | legal surface-syntax symbol). |
796 : | |||
797 : | The current solution is much cleaner because the core environment is | ||
798 : | now simply part of the pervasive environment which is part of every | ||
799 : | compilation unit's context anyway. In particular, this eliminates all | ||
800 : | special-case handling that was necessary until now in order to deal | ||
801 : | with dynamic and symbolic parts of the core environment. | ||
802 : | |||
803 : | Remaining hackery (to bind the "magic" symbol _Core) is localized in the | ||
804 : | monnier | 659 | compilation manager's bootstrap compiler (actually: in the "init group" |
805 : | blume | 592 | handling). See the comments in src/system/smlnj/init/init.cmi for |
806 : | more details. | ||
807 : | |||
808 : | I also tried to track down all mentions of "Core" (as string argument | ||
809 : | to Symbol.strSymbol) in the compiler and replaced them with a | ||
810 : | reference to the new CoreSym.coreSym. Seems cleaner since the actual | ||
811 : | name appears in one place only. | ||
812 : | |||
813 : | Binfile and bootfile format have not changed, but the switchover from | ||
814 : | the old "init.cmi" to the new one is a bit tricky, so I supplied new | ||
815 : | bootfiles anyway. | ||
816 : | |||
817 : | ---------------------------------------------------------------------- | ||
818 : | leunga | 591 | Name: Allen Leung |
819 : | Date: 2000/04/02 21:17:00 EST | ||
820 : | Tag: leunga-20000402-mltree | ||
821 : | Description: | ||
822 : | leunga | 585 | |
823 : | leunga | 591 | 1. Renamed the constructor CALL in MLTREE by popular demand. |
824 : | 2. Added a bunch of files from my repository. These are currently | ||
825 : | used by other non-SMLNJ backends. | ||
826 : | |||
827 : | leunga | 576 | ---------------------------------------------------------------------- |
828 : | leunga | 590 | Name: Allen Leung |
829 : | Date: 2000/03/31 21:15:00 EST | ||
830 : | Tag: leunga-20000331-aliasing | ||
831 : | Description: | ||
832 : | |||
833 : | This update contains a rewritten (and hopefully more correct) module | ||
834 : | for extracting aliasing information from CPS. | ||
835 : | |||
836 : | To turn on this feature: | ||
837 : | |||
838 : | Compiler.Control.CG.memDisambiguate := true | ||
839 : | |||
840 : | To pretty print the region information with assembly | ||
841 : | |||
842 : | Compiler.Control.MLRISC.getFlag "asm-show-region" := true; | ||
843 : | |||
844 : | To control how many levels of aliasing information are printed, use: | ||
845 : | |||
846 : | Compiler.Control.MLRISC.getInt "points-to-show-level" := n | ||
847 : | |||
848 : | The default of n is 3. | ||
849 : | |||
850 : | ---------------------------------------------------------------------- | ||
851 : | dbm | 589 | Name: David MacQueen |
852 : | Date: 2000/03/31 11:15:00 EST | ||
853 : | Tag: dbm-20000331-runtime_fix | ||
854 : | Description: | ||
855 : | |||
856 : | This update contains: | ||
857 : | |||
858 : | 1. runtime/c-lib/c-libraries.c | ||
859 : | includes added in revision 1.2 caused compilation errors on hppa-hpux | ||
860 : | |||
861 : | 2. fix for bug 1556 | ||
862 : | system/Basis/Implementation/NJ/internal-signals.sml | ||
863 : | |||
864 : | ---------------------------------------------------------------------- | ||
865 : | blume | 587 | Name: Matthias Blume |
866 : | blume | 588 | Date: 2000/03/31 18:00:00 JST |
867 : | Tag: blume_main_v110p26p2_1 | ||
868 : | Description: | ||
869 : | |||
870 : | This update contains: | ||
871 : | |||
872 : | 1. A small change to CM's handling of stable libraries: | ||
873 : | CM now maintains one "global" modmap that is used for all stable | ||
874 : | libraries. The use of such a global modmap maximizes sharing and | ||
875 : | minimizes the need for re-traversing parts of environments during | ||
876 : | modmap construction. (However, this has minor impact since modmap | ||
877 : | construction seems to account for just one percent or less of total | ||
878 : | compile time.) | ||
879 : | |||
880 : | 2. I added a "genmap" phase to the statistics. This is where I got the | ||
881 : | "one percent" number (see above). | ||
882 : | |||
883 : | 3. CM's new tool parameter mechanism just became _even_ better. :) | ||
884 : | - The parser understands named parameters and recursive options. | ||
885 : | - The "make" and "shell" tools use these new features. | ||
886 : | (This makes it a lot easier to cascade these tools.) | ||
887 : | - There is a small syntax change: named parameters use a | ||
888 : | |||
889 : | <name> : ( <option> ... ) or | ||
890 : | <name> : <string> | ||
891 : | |||
892 : | syntax. Previously, named parameters were implemented in an | ||
893 : | ad-hoc fashion by each tool individually (by parsing strings) | ||
894 : | and had the form | ||
895 : | |||
896 : | <name>=<string> | ||
897 : | |||
898 : | See the CM manual for a full description of these issues. | ||
899 : | |||
900 : | ---------------------------------------------------------------------- | ||
901 : | Name: Matthias Blume | ||
902 : | blume | 587 | Date: 2000/03/30 18:00:00 JST |
903 : | Tag: blume_main_v110p26p2_0 | ||
904 : | Description: | ||
905 : | |||
906 : | !!!!! WARNING !!!!!! | ||
907 : | !! New binfiles !! | ||
908 : | !!!!!!!!!!!!!!!!!!!! | ||
909 : | |||
910 : | This update contains: | ||
911 : | |||
912 : | 1. Moderate changes to CM: | ||
913 : | |||
914 : | - Changes to CM's tools mechanism. In particular, it is now possible | ||
915 : | to have tools that accept additional "command line" parameters | ||
916 : | (specified in the .cm file at each instance where the tool's class is | ||
917 : | used). | ||
918 : | |||
919 : | monnier | 659 | This was done to accommodate the new "make" and "shell" tools which |
920 : | facilitate fairly seamless hookup to portions of code managed using | ||
921 : | blume | 587 | Makefiles or Shell scripts. |
922 : | |||
923 : | There are no classes "shared" or "private" anymore. Instead, the | ||
924 : | sharing annotation is now a parameter to the "sml" class. | ||
925 : | |||
926 : | There is a bit of generic machinery for implementing one's own | ||
927 : | tools that accept command-line parameters. However, I am not yet fully | ||
928 : | satisfied with that part, so expect changes here in the future. | ||
929 : | |||
930 : | All existing tools are described in the CM manual. | ||
931 : | |||
932 : | monnier | 659 | - Slightly better error handling. (CM now suppresses many followup |
933 : | blume | 587 | error messages that tended to be more annoying than helpful.) |
934 : | |||
935 : | 2. Major changes to the compiler's static environment data structures. | ||
936 : | |||
937 : | - no CMStaticEnv anymore. | ||
938 : | - no CMEnv, no "BareEnvironment" (actually, _only_ BareEnvironment, | ||
939 : | but it is called Environment), no conversions between different | ||
940 : | kinds of static environments | ||
941 : | |||
942 : | - There is still a notion of a "modmap", but such modmaps are generated | ||
943 : | on demand at the time when they are needed. This sounds slow, but I | ||
944 : | sped up the code that generates modmaps enough for this not to lead to | ||
945 : | a slowdown of the compiler (at least I didn't detect any). | ||
946 : | |||
947 : | - To facilitate rapid modmap generation, static environments now | ||
948 : | contain an (optional) "modtree" structure. Modtree annotations are | ||
949 : | constructed by the unpickler during unpickling. (This means that | ||
950 : | the elaborator does not have to worry about modtrees at all.) | ||
951 : | Modtrees have the advantage that they are compositional in the same | ||
952 : | way as the environment data structure itself is compositional. | ||
953 : | As a result, modtrees never hang on to parts of an environment that | ||
954 : | has already been rendered "stale" by filtering or rebinding. | ||
955 : | |||
956 : | - I went through many, many trials and errors before arriving at the | ||
957 : | current solution. (The initial idea of "linkpaths" did not work.) | ||
958 : | But the result of all this is that I have touched a lot of files that | ||
959 : | depend on the "modules" and "types" data structures (most of the | ||
960 : | elaborator). There were a lot of changes during my "linkpath" trials | ||
961 : | that could have been reverted to their original state but weren't. | ||
962 : | Please, don't be too harsh on me for messing with this code a bit more | ||
963 : | than what was strictly necessary... (I _did_ resist the tempation | ||
964 : | of doing any "global reformatting" to avoid an untimely death at | ||
965 : | Dave's hands. :) | ||
966 : | |||
967 : | - One positive aspect of the previous point: At least I made sure that | ||
968 : | all files that I touched now compile without warnings (other than | ||
969 : | "polyEqual"). | ||
970 : | |||
971 : | - compiler now tends to run "leaner" (i.e., ties up less memory in | ||
972 : | redundant modmaps) | ||
973 : | |||
974 : | ---------------------------------------------------------------------- | ||
975 : | leunga | 580 | Name: Allen Leung |
976 : | leunga | 585 | Date: 2000/03/29 18:00:00 |
977 : | Tag: leunga-20000327-mlriscGen_hppa_alpha_x86 | ||
978 : | leunga | 586 | Boot files (optional): ftp://react-ilp.cs.nyu.edu/leunga/110.26.1-sml.boot.x86-unix-20000330.tar.gz |
979 : | leunga | 585 | Description: |
980 : | |||
981 : | This update contains *MAJOR* changes to the way code is generated from CPS | ||
982 : | in the module mlriscGen, and in various backend modules. | ||
983 : | |||
984 : | CHANGES | ||
985 : | ======= | ||
986 : | |||
987 : | 1. MLRiscGen: forward propagation fix. | ||
988 : | |||
989 : | There was a bug in forward propagation introduced at about the same time | ||
990 : | as the MLRISC x86 backend, which prohibits coalescing to be | ||
991 : | performed effectively in loops. | ||
992 : | |||
993 : | Effect: speed up of loops in RISC architectures. | ||
994 : | By itself, this actually slowed down certain benchmarks on the x86. | ||
995 : | |||
996 : | 2. MLRiscGen: forward propagating addresses from consing. | ||
997 : | |||
998 : | I've changed the way consing code is generated. Basically I separated | ||
999 : | out the initialization part: | ||
1000 : | |||
1001 : | store tag, offset(allocptr) | ||
1002 : | store elem1, offset+4(allocptr) | ||
1003 : | store elem2, offset+8(allocptr) | ||
1004 : | ... | ||
1005 : | store elemn, offset+4n(allocptr) | ||
1006 : | |||
1007 : | and the address computation part: | ||
1008 : | |||
1009 : | celladdr <- offset+4+alloctpr | ||
1010 : | |||
1011 : | and move the address computation part | ||
1012 : | |||
1013 : | Effect: register pressure is generally lower as a result. This | ||
1014 : | makes compilation of certain expressions much faster, such as | ||
1015 : | long lists with non-trivial elements. | ||
1016 : | |||
1017 : | [(0,0), (0,0), .... (0,0)] | ||
1018 : | |||
1019 : | 3. MLRiscGen: base pointer elimination. | ||
1020 : | |||
1021 : | As part of the linkage mechanism, we generate the sequence: | ||
1022 : | |||
1023 : | L: ... <- start of the code fragment | ||
1024 : | |||
1025 : | L1: | ||
1026 : | base pointer <- linkreg - L1 + L | ||
1027 : | |||
1028 : | The base pointer was then used for computing relocatable addresses | ||
1029 : | in the code fragment. Frequently (such as in lots of continuations) | ||
1030 : | this is not needed. We now eliminate this sequence whenever possible. | ||
1031 : | |||
1032 : | For compile time efficiency, I'm using a very stupid local heuristic. | ||
1033 : | But in general, this should be done as a control flow analysis. | ||
1034 : | |||
1035 : | Effect: Smaller code size. Speed up of most programs. | ||
1036 : | |||
1037 : | 4. Hppa back end | ||
1038 : | |||
1039 : | Long jumps in span dependence resolution used to depend on the existence | ||
1040 : | of the base pointer. | ||
1041 : | |||
1042 : | A jump to a long label L was expanded into the following sequence: | ||
1043 : | |||
1044 : | LDIL %hi(L-8192), %r29 | ||
1045 : | LDO %lo(L-8192)(%r29), %r29 | ||
1046 : | ADD %r29, baseptr, %r29 | ||
1047 : | BV,n %r0(%r29) | ||
1048 : | |||
1049 : | In the presence of change (3) above, this will not work. I've changed | ||
1050 : | it so that the following sequence of instructions are generated, which | ||
1051 : | doesn't mention the base pointer at all: | ||
1052 : | |||
1053 : | BL,n L', %r29 /* branch and link, L' + 4 -> %r29 */ | ||
1054 : | L': ADDIL L-(L'+4), %r29 /* Compute address of L */ | ||
1055 : | BV,n %r0(%r29) /* Jump */ | ||
1056 : | |||
1057 : | 5. Alpha back end | ||
1058 : | |||
1059 : | New alpha instructions LDB/LDW have been added, as per Fermin's | ||
1060 : | suggestions. This is unrelated to all other changes. | ||
1061 : | |||
1062 : | 6. X86 back end | ||
1063 : | |||
1064 : | I've changed andl to testl in the floating point test sequence | ||
1065 : | whenever appropriate. The Intel optimization guide states that | ||
1066 : | monnier | 659 | testl is preferable to andl. |
1067 : | leunga | 585 | |
1068 : | 7. RA (x86 only) | ||
1069 : | |||
1070 : | I've improved the spill propagation algorithm, using an approximation | ||
1071 : | of maximal weighted independent sets. This seems to be necessary to | ||
1072 : | alleviate the negative effect in light of the slow down in (1). | ||
1073 : | |||
1074 : | I'll write down the algorithm one of these days. | ||
1075 : | |||
1076 : | 8. MLRiscGen: frequencies | ||
1077 : | |||
1078 : | I've added an annotation that states that all call gc blocks have zero | ||
1079 : | execution frequencies. This improves register allocation on the x86. | ||
1080 : | |||
1081 : | BENCHMARKS | ||
1082 : | ========== | ||
1083 : | |||
1084 : | I've only perform the comparison on 110.25. | ||
1085 : | |||
1086 : | The platforms are: | ||
1087 : | |||
1088 : | HPPA A four processor HP machine (E9000) with 5G of memory. | ||
1089 : | X86 A 300Hhz Pentium II with 128M of memory, and | ||
1090 : | SPARC An Ultra sparc 2 with 512M of memory. | ||
1091 : | |||
1092 : | I used the following parameters for the SML benchmarks: | ||
1093 : | |||
1094 : | @SMLalloc | ||
1095 : | HPPA 256k | ||
1096 : | SPARC 512k | ||
1097 : | X86 256k | ||
1098 : | |||
1099 : | COMPILATION TIME | ||
1100 : | ---------------- | ||
1101 : | Here are the numbers comparing the compilation times of the compilers. | ||
1102 : | I've only compared 110.25 compiling the new sources versus | ||
1103 : | a fixpoint version of the new compiler compiling the same. | ||
1104 : | |||
1105 : | 110.25 New | ||
1106 : | Total Time in RA Spill+Reload Total Time In RA Spill+Reload | ||
1107 : | HPPA 627s 116s 2684+3584 599s 95s 1003+1879 | ||
1108 : | SPARC 892s 173s 2891+3870 708s 116s 1004+1880 | ||
1109 : | X86 999s 315s 94006+130691 987s 296s 108877+141957 | ||
1110 : | |||
1111 : | 110.25 New | ||
1112 : | Code Size Code Size | ||
1113 : | HPPA 8596736 8561421 | ||
1114 : | SPARC 8974299 8785143 | ||
1115 : | X86 9029180 8716783 | ||
1116 : | |||
1117 : | So in summary, things are at least as good as before. Dramatic | ||
1118 : | reduction in compilation is obtained on the Sparc; I can't explain it, | ||
1119 : | but it is reproducible. Perhaps someone should try to reproduce this | ||
1120 : | on their own machines. | ||
1121 : | |||
1122 : | SML BENCHMARKS | ||
1123 : | -------------- | ||
1124 : | |||
1125 : | On the average, all benchmarks perform at least as well as before. | ||
1126 : | |||
1127 : | HPPA Compilation Time Spill+Reload Run Time | ||
1128 : | 110.25 New 110.25 New 110.25 New | ||
1129 : | |||
1130 : | barnesHut 3.158 3.015 4.75% 1+1 0+0 2.980 2.922 2.00% | ||
1131 : | boyer 6.152 5.708 7.77% 0+0 0+0 0.218 0.213 2.34% | ||
1132 : | count-graphs 1.168 1.120 4.32% 0+0 0+0 22.705 23.073 -1.60% | ||
1133 : | fft 0.877 0.792 10.74% 1+3 1+3 0.602 0.587 2.56% | ||
1134 : | knuthBendix 3.180 2.857 11.32% 0+0 0+0 0.675 0.662 2.02% | ||
1135 : | lexgen 6.190 5.290 17.01% 0+0 0+0 0.913 0.788 15.86% | ||
1136 : | life 0.803 0.703 14.22% 25+25 0+0 0.153 0.140 9.52% | ||
1137 : | logic 2.048 2.007 2.08% 6+6 1+1 4.133 4.008 3.12% | ||
1138 : | mandelbrot 0.077 0.080 -4.17% 0+0 0+0 0.765 0.712 7.49% | ||
1139 : | mlyacc 22.932 20.937 9.53% 154+181 32+57 0.468 0.430 8.91% | ||
1140 : | nucleic 5.183 5.060 2.44% 2+2 0+0 0.125 0.120 4.17% | ||
1141 : | ratio-regions 3.357 3.142 6.84% 0+0 0+0 116.225 113.173 2.70% | ||
1142 : | ray 1.283 1.290 -0.52% 0+0 0+0 2.887 2.855 1.11% | ||
1143 : | simple 6.307 6.032 4.56% 28+30 5+7 3.705 3.658 1.28% | ||
1144 : | tsp 0.888 0.862 3.09% 0+0 0+0 7.040 6.893 2.13% | ||
1145 : | vliw 24.378 23.455 3.94% 106+127 25+45 2.758 2.707 1.91% | ||
1146 : | -------------------------------------------------------------------------- | ||
1147 : | Average 6.12% 4.09% | ||
1148 : | |||
1149 : | SPARC Compilation Time Spill+Reload Run Time | ||
1150 : | 110.25 New 110.25 New 110.25 New | ||
1151 : | |||
1152 : | barnesHut 3.778 3.592 5.20% 2+2 0+0 3.648 3.453 5.65% | ||
1153 : | boyer 6.632 6.110 8.54% 0+0 0+0 0.258 0.242 6.90% | ||
1154 : | count-graphs 1.435 1.325 8.30% 0+0 0+0 33.672 34.737 -3.07% | ||
1155 : | fft 0.980 0.940 4.26% 3+9 2+6 0.838 0.827 1.41% | ||
1156 : | knuthBendix 3.590 3.138 14.39% 0+0 0+0 0.962 0.967 -0.52% | ||
1157 : | lexgen 6.593 6.072 8.59% 1+1 0+0 1.077 1.078 -0.15% | ||
1158 : | life 0.972 0.868 11.90% 26+26 0+0 0.143 0.140 2.38% | ||
1159 : | logic 2.525 2.387 5.80% 7+7 1+1 5.625 5.158 9.05% | ||
1160 : | mandelbrot 0.090 0.093 -3.57% 0+0 0+0 0.855 0.728 17.39% | ||
1161 : | mlyacc 26.732 23.827 12.19% 162+189 32+57 0.550 0.560 -1.79% | ||
1162 : | nucleic 6.233 6.197 0.59% 3+3 0+0 0.163 0.173 -5.77% | ||
1163 : | ratio-regions 3.780 3.507 7.79% 0+0 0+0 133.993 131.035 2.26% | ||
1164 : | ray 1.595 1.550 2.90% 1+1 0+0 3.440 3.418 0.63% | ||
1165 : | simple 6.972 6.487 7.48% 29+32 5+7 3.523 3.525 -0.05% | ||
1166 : | tsp 1.115 1.063 4.86% 0+0 0+0 7.393 7.265 1.77% | ||
1167 : | vliw 27.765 24.818 11.87% 110+135 25+45 2.265 2.135 6.09% | ||
1168 : | ---------------------------------------------------------------------------- | ||
1169 : | Average 6.94% 2.64% | ||
1170 : | |||
1171 : | X86 Compilation Time Spill+Reload Run Time | ||
1172 : | 110.25 New 110.25 New 110.25 New | ||
1173 : | |||
1174 : | barnesHut 5.530 5.420 2.03% 593+893 597+915 3.532 3.440 2.66% | ||
1175 : | boyer 8.768 7.747 13.19% 493+199 301+289 0.327 0.297 10.11% | ||
1176 : | count-graphs 2.040 2.010 1.49% 298+394 315+457 26.578 28.660 -7.26% | ||
1177 : | fft 1.327 1.302 1.92% 112+209 115+210 1.055 0.962 9.71% | ||
1178 : | knuthBendix 5.218 5.475 -4.69% 451+598 510+650 0.928 0.932 -0.36% | ||
1179 : | lexgen 9.970 9.623 3.60% 1014+841 1157+885 0.947 0.928 1.97% | ||
1180 : | life 1.183 1.183 0.00% 162+182 145+148 0.127 0.103 22.58% | ||
1181 : | logic 3.285 3.512 -6.45% 514+684 591+836 5.682 5.577 1.88% | ||
1182 : | mandelbrot 0.147 0.143 2.33% 38+41 33+54 0.703 0.690 1.93% | ||
1183 : | mlyacc 35.457 32.763 8.22% 3496+4564 3611+4860 0.552 0.550 0.30% | ||
1184 : | nucleic 7.100 6.888 3.07% 239+168 201+158 0.175 0.173 0.96% | ||
1185 : | ratio-regions 6.388 6.843 -6.65% 1182+257 981+300 120.142 120.345 -0.17% | ||
1186 : | ray 2.332 2.338 -0.29% 346+398 402+494 3.593 3.540 1.51% | ||
1187 : | simple 9.912 9.903 0.08% 1475+941 1579+1168 3.057 3.178 -3.83% | ||
1188 : | tsp 1.623 1.532 5.98% 266+200 250+211 8.045 7.878 2.12% | ||
1189 : | vliw 33.947 35.470 -4.29% 2629+2774 2877+3171 2.072 1.890 9.61% | ||
1190 : | ---------------------------------------------------------------------------- | ||
1191 : | Average 1.22% 3.36% | ||
1192 : | |||
1193 : | ---------------------------------------------------------------------- | ||
1194 : | Name: Allen Leung | ||
1195 : | leunga | 583 | Date: 2000/03/23 16:25:00 |
1196 : | Tag: leunga-20000323-fix_x86_alpha | ||
1197 : | Description: | ||
1198 : | |||
1199 : | 1. X86 fixes/changes | ||
1200 : | |||
1201 : | a. The old code generated for SETcc was completely wrong. | ||
1202 : | The Intel optimization guide is VERY misleading. | ||
1203 : | |||
1204 : | 2. ALPHA fixes/changes | ||
1205 : | |||
1206 : | a. Added the instructions LDBU, LDWU, STB, STW as per Fermin's suggestion. | ||
1207 : | b. Added a new mode byteWordLoadStores to the functor parameter to Alpha() | ||
1208 : | c. Added reassociation code for address computation. | ||
1209 : | |||
1210 : | ---------------------------------------------------------------------- | ||
1211 : | Name: Allen Leung | ||
1212 : | leunga | 580 | Date: 2000/03/22 01:23:00 |
1213 : | Tag: leunga-20000322-fix_x86_hppa_ra | ||
1214 : | Description: | ||
1215 : | |||
1216 : | 1. X86 fixes/changes | ||
1217 : | |||
1218 : | a. x86Rewrite bug with MUL3 (found by Lal) | ||
1219 : | b. Added the instructions FSTS, FSTL | ||
1220 : | |||
1221 : | 2. PA-RISC fixes/changes | ||
1222 : | |||
1223 : | a. B label should not be a delay slot candidate! Why did this work? | ||
1224 : | b. ADDT(32, REG(32, r), LI n) now generates one instruction instead of two, | ||
1225 : | as it should be. | ||
1226 : | c. The assembly syntax for fstds and fstdd was wrong. | ||
1227 : | d. Added the composite instruction COMICLR/LDO, which is the immediate | ||
1228 : | operand variant of COMCLR/LDO. | ||
1229 : | |||
1230 : | 3. Generic MLRISC | ||
1231 : | |||
1232 : | a. shuffle.sml rewritten to be slightly more efficient | ||
1233 : | b. DIV bug in mltree-simplify fixed (found by Fermin) | ||
1234 : | |||
1235 : | 4. Register Allocator | ||
1236 : | |||
1237 : | a. I now release the interference graph earlier during spilling. | ||
1238 : | May improve memory usage. | ||
1239 : | |||
1240 : | ---------------------------------------------------------------------- | ||
1241 : | blume | 577 | Name: Matthias Blume |
1242 : | blume | 578 | Date: 2000/03/14 14:15:32 |
1243 : | Tag: blume_main_v110p26p1_2 | ||
1244 : | Description: | ||
1245 : | |||
1246 : | 1. Tools.registerStdShellCmdTool (from smlnj/cm/tool.cm) takes an | ||
1247 : | additional argument called "template" which is an optional string that | ||
1248 : | monnier | 659 | specifies the layout of the tool command line. See the CM manual for |
1249 : | blume | 578 | explanation. |
1250 : | |||
1251 : | monnier | 659 | 2. A special-purpose tool can be "registered" by simply dropping the |
1252 : | blume | 578 | corresponding <...>-tool.cm (and/or <...>-ext.cm) into the same |
1253 : | directory where the .cm file lives that uses this tool. (The | ||
1254 : | behavior/misfeature until now was to look for the tool description | ||
1255 : | files in the current working directory.) As before, tool description | ||
1256 : | files could also be anchored -- in which case they can live anywhere | ||
1257 : | they like. Following the recent e-mail discussion, this change should | ||
1258 : | make it easier to have special-purpose tools that are shipped together | ||
1259 : | with the sources of the program that uses them. | ||
1260 : | |||
1261 : | ---------------------------------------------------------------------- | ||
1262 : | Name: Matthias Blume | ||
1263 : | blume | 577 | Date: 2000/03/10 07:48:34 |
1264 : | Tag: blume_main_v110p26p1_1 | ||
1265 : | Description: | ||
1266 : | |||
1267 : | I added a re-written version of Dave's fixpt script to src/system. | ||
1268 : | Changes relative to the original version: | ||
1269 : | - sh-ified (not everybody has ksh) | ||
1270 : | - automatically figures out which architecture it runs on | ||
1271 : | - uses ./makeml a bit more cleverly | ||
1272 : | - never invokes ./installml (and, thus, does not clobber your | ||
1273 : | good and working installation of sml in case something goes wrong) | ||
1274 : | - accepts max iteration count using option "-iter <n>" | ||
1275 : | - accepts a "base" name using option "-base <base>" | ||
1276 : | |||
1277 : | It does not build any extraneous heap images but directly rebuilds | ||
1278 : | bin- and boot-hierarchies using makeml's "-rebuild" switch. Finally, | ||
1279 : | it can incorporate existing bin- and boot- hierarchies. For example, | ||
1280 : | suppose the base is set to "sml" (which is the default). Then it | ||
1281 : | successively builds | ||
1282 : | |||
1283 : | sml.bin.<arch>-unix and sml.boot.<arch>-unix | ||
1284 : | then sml1.bin.<arch>-unix and sml1.boot.<arch>-unix | ||
1285 : | then sml2.bin.<arch>-unix and sml2.boot.<arch>-unix | ||
1286 : | ... | ||
1287 : | then sml<n>.bin.<arch>-unix and sml<n>.boot.<arch>-unix | ||
1288 : | |||
1289 : | and so on. If any of these already exist, it will just use what's | ||
1290 : | there. In particular, many people will have the initial set of bin | ||
1291 : | and boot files around, so this saves time for at least one full | ||
1292 : | rebuild. Having sets of the form <base><k>.{bin,boot}.<arch>-unix for | ||
1293 : | <k>=1,2,... is normally not a good idea when invoking fixpt. However, | ||
1294 : | they might be the result of an earlier partial run of fixpt (which | ||
1295 : | monnier | 659 | perhaps got accidentally killed). In this case, fixpt will quickly |
1296 : | blume | 577 | move through what exists before continuing where it left off earlier, |
1297 : | and, thus, saves a lot of time. | ||
1298 : | |||
1299 : | ---------------------------------------------------------------------- | ||
1300 : | leunga | 576 | Name: Allen Leung |
1301 : | Date: 00/03/10 02:20:00 | ||
1302 : | Tag: leunga-20000310-fix_x86_asm_ra | ||
1303 : | Description: | ||
1304 : | dbm | 570 | |
1305 : | leunga | 576 | More assembly output problems involving the indexed addressing mode |
1306 : | on the x86 have been found and corrected. Thanks to Fermin Reig for the | ||
1307 : | fix. | ||
1308 : | |||
1309 : | The interface and implementation of the register allocator have been changed | ||
1310 : | slightly to accommodate the possibility to skip the register allocation | ||
1311 : | phases completely and go directly to memory allocation. This is needed | ||
1312 : | for C-- use. | ||
1313 : | |||
1314 : | dbm | 570 | ---------------------------------------------------------------------- |
1315 : | blume | 572 | Name: Matthias Blume |
1316 : | blume | 575 | Date: 00/03/09 10:23:53 |
1317 : | Tag: blume_main_v110p26p1_0 | ||
1318 : | Description: | ||
1319 : | |||
1320 : | * Complete re-organization of library names. Many libraries have been | ||
1321 : | consolidated so that they share the same path anchor. For example, | ||
1322 : | all MLRISC-related libraries are anchored at MLRISC, most libraries that | ||
1323 : | are SML/NJ-specific are under "smlnj". Notice that names like | ||
1324 : | host-cmb.cm or host-compiler.cm no longer exist. See system/README | ||
1325 : | for a complete description of the new naming scheme. Quick reference: | ||
1326 : | |||
1327 : | host-cmb.cm -> smlnj/cmb.cm | ||
1328 : | host-compiler.cm -> smlnj/compiler.cm | ||
1329 : | full-cm.cm -> smlnj/cm.cm | ||
1330 : | <arch>-<os>.cm -> smlnj/cmb/<arch>-<os>.cm | ||
1331 : | <arch>-compiler.cm -> smlnj/compiler/<arch>.cm | ||
1332 : | |||
1333 : | * Bug fixes in CM. | ||
1334 : | - exceptions in user code are being passed through (i.e., reach top level) | ||
1335 : | - more bugs in paranoia mode fixed | ||
1336 : | - bug related to checking group owners fixed | ||
1337 : | |||
1338 : | * New install.sh script that automagically fetches archive files: | ||
1339 : | The new file config/srcarchiveurl must contain the URL of the | ||
1340 : | (remote) directory that contains bin files (or other source archives). | ||
1341 : | If install.sh does not find the archive locally, it tries to get | ||
1342 : | it from that remote directory. | ||
1343 : | This should simplify installation further: For machines that have | ||
1344 : | access to the internet, just fetch <version>-config.tgz, unpack it, | ||
1345 : | monnier | 659 | edit config/targets, and go (run config/install.sh). The script will |
1346 : | blume | 575 | fetch everything else that it might need all by itself. |
1347 : | |||
1348 : | For CVS users, this mechanism is not relevant for source archives, but | ||
1349 : | it is convenient for getting new sets of binfiles. | ||
1350 : | |||
1351 : | Archives should be tar files compressed with either gzip, compress, or | ||
1352 : | bzip2. The script recognizes .tgz, .tar, tar.gz, tz, .tar.Z, and .tar.bz2. | ||
1353 : | |||
1354 : | ---------------------------------------------------------------------- | ||
1355 : | Name: Matthias Blume | ||
1356 : | blume | 572 | Date: 2000/03/07 04:01:04 |
1357 : | Tag: blume_main_v110_26_2 | ||
1358 : | dbm | 570 | Description: |
1359 : | blume | 572 | - size info in BOOTLIST |
1360 : | * no fixed upper limits for number of bootfiles or length of | ||
1361 : | bootfile names in runtime | ||
1362 : | * falling back to old behavior if no BOOTLIST size info found | ||
1363 : | - allocation size heuristics in .run-sml | ||
1364 : | * tries to read cache size from /proc/cpuinfo (this is important for | ||
1365 : | small-cache Celeron systems!) | ||
1366 : | - install.sh robustified | ||
1367 : | - CM manual updates | ||
1368 : | - paranoid mode | ||
1369 : | * no more CMB.deliver() (i.e., all done by CMB.make()) | ||
1370 : | * can re-use existing sml.boot.* files | ||
1371 : | * init.cmi now treated as library | ||
1372 : | * library stamps for consistency checks | ||
1373 : | - sml.boot.<arch>-<os>/PIDMAP file | ||
1374 : | * This file is read by the CM startup code. This is used to minimize | ||
1375 : | the amount of dynamic state that needs to be stowed away for the | ||
1376 : | purpose of sharing between interactive system and user code. | ||
1377 : | - CM.Anchor.anchor instead of CM.Anchor.{set,cancel} | ||
1378 : | * Upon request by Elsa. Anchors now controlled by get-set-pair | ||
1379 : | like most other CM state variables. | ||
1380 : | - Compiler.CMSA eliminated | ||
1381 : | * No longer supported by CM anyway. | ||
1382 : | - fixed bugs in pickler that kept biting Stefan | ||
1383 : | * past refs to past refs (was caused by the possibility that | ||
1384 : | ad-hoc sharing is more discriminating than hash-cons sharing) | ||
1385 : | * integer overflow on LargeInt.minInt | ||
1386 : | - ml-{lex,yacc} build scripts now use new mechanism | ||
1387 : | for building standalone programs | ||
1388 : | - fixed several gcc -Wall warnings that were caused by missing header | ||
1389 : | files, missing initializations, etc., in runtime (not all warnings | ||
1390 : | eliminated, though) |
root@smlnj-gforge.cs.uchicago.edu | ViewVC Help |
Powered by ViewVC 1.0.0 |