Home My Page Projects Code Snippets Project Openings SML/NJ
Summary Activity Forums Tracker Lists Tasks Docs Surveys News SCM Files

SCM Repository

[smlnj] Diff of /sml/trunk/HISTORY
ViewVC logotype

Diff of /sml/trunk/HISTORY

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 583, Thu Mar 23 21:52:30 2000 UTC revision 763, Sat Dec 23 09:20:02 2000 UTC
# Line 12  Line 12 
12  Tag: <post-commit CVS tag>  Tag: <post-commit CVS tag>
13  Description:  Description:
14  ----------------------------------------------------------------------  ----------------------------------------------------------------------
15    Name: Lal George
16    Date: 2000/12/22 22:22:58 EST 2000
17    Tag: Release_110_32
18    Description:
19    
20            Infinite precision used throughout MLRISC.
21            see MLRISC/mltree/machine-int.sig
22    
23    ----------------------------------------------------------------------
24    Name: Matthias Blume
25    Date: 2000/12/22 23:16:00 JST
26    Tag: blume-20001222-warn
27    Description:
28    
29    Corrected wording and formatting of some CM warning message which I
30    broke in my previous patch.
31    
32    ----------------------------------------------------------------------
33    Name: Matthias Blume
34    Date: 2000/12/22 21:20:00 JST
35    Tag: blume-20001222-anchorenv
36    Description:
37    
38    Fixed CM's handling of anchor environments in connection with CMB.make.
39    
40    ----------------------------------------------------------------------
41    Name: Matthias Blume
42    Date: 2000/12/22 13:15:00 JST
43    Tag: blume-20001222-cleanup
44    Description:
45    
46    Removed src/cm/ffi which does not (and did not) belong here.
47    
48    ----------------------------------------------------------------------
49    Name: Matthias Blume
50    Date: 2000/12/21 23:55:00 JST
51    Tag: blume-20001221-exn
52    Description:
53    
54    Probably most important: CM no longer silently swallows all exceptions
55    in the compiler.
56    Plus: some other minor CM changes.  For example, CM now reports some
57    sizes for generated binfiles (code, data, envpickle, lambdapickle).
58    
59    ----------------------------------------------------------------------
60    Name: Matthias Blume
61    Date: 2000/12/15 00:01:05 JST
62    Tag: blume-20001215-dirtool
63    Description:
64    
65    - "dir" tool added.
66    - improvements and cleanup to Tools structure
67    - documentation updates
68    
69    ----------------------------------------------------------------------
70    Name: Allen Leung
71    Date: Thu Dec 14 03:45:24 EST 2000
72    Description:
73    Tag:  leunga-20001214-int-inf
74    Description:
75    
76       In IntInf, added these standard functions, which are missing from our
77    implementation:
78    
79        andb : int * int -> int
80        xorb : int * int -> int
81        orb  : int * int -> int
82        notb : int -> int
83         <<   : int * word -> int
84        ~>>  : int * word -> int
85    
86       Not tested, I hope they are correct.
87    
88    ----------------------------------------------------------------------
89    Name: Allen Leung
90    Date: Fri Dec  8 19:23:26 EST 2000
91    Description:
92    Tag:  leunga-20001208-nowhere
93    Description:
94    
95      Slight improvements to the 'nowhere' tool to handle OR-patterns,
96    to generate better error messages etc.  Plus a brief manual.
97    
98    ----------------------------------------------------------------------
99    Name: Lal George
100    Date: 2000/12/08 09:54:02 EST 2000
101    Tag: Release_110_31
102    Description:
103    
104    - Version 110.31
105    ----------------------------------------------------------------------
106    Name: Allen Leung
107    Date: Thu Dec  7 22:01:04 EST 2000
108    Tag:  leunga-20001207-cell-monster-hack
109    Description:
110    
111    Major MLRISC internal changes.  Affect all clients.
112    Summary:
113    
114    1.  Type CELLS.cell = int is now replaced by a datatype.
115        As a result, the old regmap is now gone.  Almost all interfaces
116        in MLRISC change as a consequence.
117    
118    2.  A new brand version of machine description tool (v3.0) that generates
119        modules expecting the new interface.  The old version is removed.
120    
121    3.  The RA interface has been further abstracted into two new functors.
122        RISC_RA and X86RA.  These functors have much simpler interfaces.
123        [See also directory MLRISC/demo.]
124    
125    4.  Some other new source->source code generation tools are available:
126    
127        a. MLRISC/Tools/RewriteGen -- generate rewriters from rules.
128        b. MLRISC/Tools/WhereGen -- expands conditional pattern matching rules.
129           I use this tool to generate the peephole optimizers---with the new
130           cell type changes, peephole rules are becoming difficult to write
131           without conditional pattern matching.
132    
133    5.  More Intmap -> IntHashTable change.  Previous changes by Matthias didn't
134        cover the entire MLRISC source tree so many things broke.
135    
136    6.  CM files have been moved to the subdirectory MLRISC/cm.
137        They are moved because there are a lot of them and they clutter up the
138        root dir.
139    
140    7.  More detailed documentation to come...
141    
142        NOTE: To rebuild from 110.30 (ftp distribution), you'll have to do
143        a makeml -rebuild first.  This is because of other other
144        changes that Matthias has made (see below).
145    
146    
147    ----------------------------------------------------------------------
148    Name: Matthias Blume
149    Date: 2000/11/30 23:12:00 JST
150    Tag: blume-20001130-filereorg
151    Description:
152    
153    Some manual updates and some file reorganizations in CM.
154    
155    ----------------------------------------------------------------------
156    Name: Matthias Blume
157    Date: 2000/11/24 17:45:00 JST
158    Tag: blume-20001124-link
159    Description:
160    
161    Drastically improved link traversal code for the case that the dynamic
162    value was already loaded at bootstrap time.  As a result, CM and CMB
163    now both load blazingly fast -- even on a very slow machine.  Also,
164    memory consumption has been further reduced by this.
165    
166    Warning: The format of the PIDMAP file has changed.  THerefore, to
167    bootstrap you have to do this:
168    
169    1. Run CMB.make
170    2. Make a symbolic link for the boot directory:
171         ln -s sml.boot.ARCH-OS xxx
172    3. "Rebuild" the boot directory:
173         ./makeml -boot xxx -rebuild sml ; rm xxx
174    4. Boot normally:
175          ./makeml
176    
177    ----------------------------------------------------------------------
178    Name: Matthias Blume
179    Date: 2000/11/21 21:20:00 JST
180    Tag: blume-20001121-tools
181    Description:
182    
183    Continued hacking on autoloading problem -- with success this time.
184    Also changed tool-plugin mechanism.  See new CM manual.
185    
186    ----------------------------------------------------------------------
187    Name: Matthias Blume
188    Date: 2000/11/19 14:30:00 JST
189    Tag:  blume-20001119-autoload
190    Description:
191    
192    Some hacking to make autoloading faster.  Success for CMB, no success
193    so far for CM.  There is a reduced structure CM' that autoloads faster.
194    (This is a temporary, non-documented hack to be eliminated again when
195    the general problem is solved.)
196    
197    ----------------------------------------------------------------------
198    Name: Matthias Blume
199    Date: 2000/11/17 14:10:00 JST
200    Tag: blume-20001117-pickle-lib
201    Description:
202    
203    1. Eliminated comp-lib.cm
204    2. Made pickle-lib.cm
205    3. Eliminated all uses of intset.sml (from comp-lib.cm)
206    4. Replaced all uses of intmap.{sig,sml} (from comp-lib.cm) with
207       equivalent constructs from smlnj-lib.cm (INtHashTable).
208    5. Point 4. also goes for those uses of intmap.* in MLRISC.
209       Duplicated intmap modules thrown out.
210    6. Hunted down all duplicated SCC code and replaced it with
211       equivalent stuff (GraphSCCFn from smlnj-lib.cm).
212    7. Rewrote Feedback module.
213    8. Moved sortedlist.sml into viscomp-lib.cm.  Eventually it
214       should be thrown out and equivalent modules from smlnj-lib.cm
215       should be used (IntRedBlackSet, IntListSet, ...).
216    
217    Confirmed that compiler compiles to fixpoint.
218    
219    ----------------------------------------------------------------------
220    Name: Allen Leung
221    Date: 2000/11/10 18:00:00
222    Tag: leunga-20001110-new-x86-fp
223    
224    A new x86 floating point code generator has been added.
225    By default this is turned off.  To turn this on, do:
226    
227        CM.autoload "$smlnj/compiler.cm";
228        Compiler.Control.MLRISC.getFlag "x86-fast-fp" := true;
229    
230    Changes:
231    
232    1.  Changed FTAN to FPTAN so that the assembly output is correct.
233    2.  Changed the extension callback for FTANGENT to generate:
234    
235              fptan
236              fstp  %st(0)
237        instead of
238              fptan
239              fstpl ftempmem
240    
241    3.  Numerous assembly fixes for x86.
242    
243    5.  Cleaned up the machine code output module x86/x86MC.sml and added
244        support for a whole bunch of instructions and addressing modes:
245    
246          fadd/fsub/fsubr/fmul/fdiv/fdivr  %st, %st(n)
247          faddp/fsubp/fsubrp/fmulp/fdivp/fdivrp  %st, %st(n)
248          fadd/fsub/fsubr/fmul/fdiv/fdivr  %st(n), %st
249          fiadd/fisub/fisubr/fimul/fidiv/fidivr mem
250          fxch %st(n)
251          fld %st(n)
252          fst %st(n)
253          fst mem
254          fstp %st(n)
255          fucom %st(n)
256          fucomp %st(n)
257    
258        All these are now generated when the fast fp mode is turned on.
259    
260    6.  Removed the dedicated registers %st(0), ..., %st(7) from X86CpsRegs
261    
262    ----------------------------------------------------------------------
263    Name: Matthias Blume
264    Date: 2000/11/09 11:20:00 JST
265    Tag: blume-20001109-scc
266    Description:
267    
268    Eliminated some code duplication:
269    
270    1. Added "where" clause to GraphSCCFn in SML/NJ Library.
271       (Otherwise the functor is useless.)
272    2. Used GraphSCCFn where SCCUtilFun was used previously.
273    3. Got rid of SCCUtilFun (in comp-lib.cm).
274    
275    ----------------------------------------------------------------------
276    Name: Lal George
277    Date: 2000/11/06 09:02:21 EST 2000
278    Tag: Release_110_30
279    Description:
280    
281    - Version 110.30
282    ----------------------------------------------------------------------
283    Name: Matthias Blume
284    Date: 2000/11/04 14:45:00
285    Tag: blume-20001104-mlbuild
286    Description:
287    
288    - Made ml-build faster on startup.
289    - Documentation fixes.
290    
291    ----------------------------------------------------------------------
292    Name: Matthias Blume
293    Date: 2000/11/02 17:00:00 JST
294    Tag: blume-20001102-condcomp
295    Description:
296    
297    - Small tweaks to pickler -- new BOOTFILES!
298    - Version bumped to 110.29.2.
299    - Added conditional compilation facility to init.cmi (see comment there).
300    ----------------------------------------------------------------------
301    Name: Allen Leung
302    Date: 2000/10/23 19:31:00
303    Tag: leunga-20001023-demo-ra
304    
305    1. Minor RA changes that improves spilling on x86 (affects Moby and C-- only)
306    2. Test programs for the graph library updated
307    3. Some new MLRISC demo programs added
308    
309    ----------------------------------------------------------------------
310    Name: Matthias Blume
311    Date: 2000/08/31 22:15:00 JST
312    Tag: blume-20001017-errmsg
313    Description:
314    
315    More error message grief: Where there used to be no messages, there
316    now were some that had bogus error regions.  Fixed.
317    
318    ----------------------------------------------------------------------
319    Name: Matthias Blume
320    Date: 2000/08/31 17:30:00 JST
321    Tag: blume-20001017-v110p29p1
322    Description:
323    
324    I made a version 110.29.1 with new bootfiles.
325    
326    Changes:  Modified pickler/unpickler for faster and leaner unpickling.
327              CM documentation changes and a small bugfix in CM's error reporting.
328    
329    ----------------------------------------------------------------------
330    Name: Lal George
331    Date: 2000/09/27 14:42:35 EDT
332    Tag: george-20000927-nodestatus
333    Description:
334    
335    Changed the type of the nodestatus, so that:
336    
337            SPILLED(~1)             is now SPILLED
338            SPILLED(m) where m>=0   is now MEMREG(m)
339            SPILLED(s) where s<~1   is now SPILL_LOC(~s)
340    
341    ----------------------------------------------------------------------
342    Name: Matthias Blume
343    Date: 2000/09/07 14:45:00 JST
344    Tag: blume-20000907-cmerrmsg
345    Description:
346    
347    Small tweak to CM to avoid getting ML syntax error messages twice.
348    
349    ----------------------------------------------------------------------
350    Name: Matthias Blume
351    Date: 2000/08/31 18:00:00 JST
352    Tag: blume-20000831-cvsbootfiles
353    Description:
354    
355    New URL for boot files (because the 110.29 files on the BL server do
356    now work correctly with my updated install scripts for yacc and lex).
357    
358    ----------------------------------------------------------------------
359    Name: Matthias Blume
360    Date: 2000/08/08 12:33:00 JST
361    Tag: blume-20000808-manual
362    Description:
363    
364    Tiny update to CM manual.
365    
366    ----------------------------------------------------------------------
367    Name: Allen Leung
368    Date: 2000/08/7 19:31:00
369    Tag: leunga-20000807-a-whole-bunch-of-stuff
370    
371      Moby, C--, SSA, x86, machine descriptions etc.  Should only affect C--
372    and Mobdy.
373    
374    1.  x86
375    
376       a.  Fixes to peephole module by John and Dan.
377       b.  Assembly fix to SETcc by Allen.
378       c.  Fix to c-call by John.
379       d.  Fix to spilling by John.  (This one deals with the missing FSTPT case)
380       e.  Instruction selection optimization to SETcc as suggested by John.
381    
382           For example,
383    
384            MV(32, x, COND(32, CMP(32, LT, a, b), LI 1, LI 0))
385    
386           should generate:
387    
388            MOVL a, x
389            SUBL b, x
390            SHRL 31, x
391    
392    2.  IR stuff
393    
394         A bunch of new DJ-graph related algorithms added.  These
395         speed up SSA construction.
396    
397    3.  SSA + Scheduling
398    
399         Added code for SSA and scheduling to the repository
400    
401    ----------------------------------------------------------------------
402    Name: Lal George
403    Date: 2000/07/27 11:53:14 EDT
404    
405    Tag: lal-20000727-linux-ppc
406    Description:
407    
408     Made changes to support Linux PPC.
409     p.s. I have confirmation that the 110.29 boot files work fine.
410    
411    ----------------------------------------------------------------------
412    Name: Matthias Blume
413    Date: 2000/07/27 17:40:00 JST
414    Tag: blume-20000727-scripts
415    Description:
416    
417    !!!! WARNING !!!!
418    You must recompile the runtime system!
419    !!!! WARNING !!!!
420    
421    This is basically another round of script-enhancements:
422    
423    1. sml, ml-build, and ml-makedepend accept options -D and -U to define
424       and undefine CM preprocessor symbols.
425    
426    2. ml-build avoids generating a new heap image if it finds that the
427       existing one is still ok.  (The condition is that no ML file had to
428       be recompiled and all ML files are found to be older that the heap
429       file.)
430    
431       To make this work smoothly, I also hacked the runtime system as
432       well as SMLofNJ.SysInfo to get access to the heap image suffix
433       (.sparc-solaris, ...) that is currently being used.
434    
435       Moreover, the signature of CM.mk_standalone has changed.  See the
436       CM manual.
437    
438    3. ml-makedepend accepts additional options -n, -a, and -o.  (See the
439       CM manual for details.)
440    
441    4. More CM manual updates:
442        - all of the above has been documented.
443        - there is now a section describing the (CM-related) command line
444          arguments that are accepted by the "sml" command
445    
446    ----------------------------------------------------------------------
447    Name: Matthias Blume
448    Date: 2000/07/25 16:20:00 JST
449    Tag: blume-20000725-makedepend
450    Description:
451    
452    Added a script called ml-makedepend.  This can be used in makefiles
453    for Unix' make in a way very similar to the "makedepend" command for
454    C.
455    
456    The script internally uses function CM.sources.
457    
458    Synopsis:
459    
460        ml-makedepend [-f makefile] cmfile targetname
461    
462    The default for the makefile is "makefile" (or "Makefile" should
463    "makefile" not exist).
464    
465    ml-makedepend adds a cmfile/targetname-specific section to this
466    makefile (after removing the previous version of this section).  The
467    section contains a single dependency specification with targetname on
468    the LHS (targetname is an arbitrary name), and a list of files derived
469    from the cmfile on the RHS.  Some of the files on the RHS are
470    ARCH/OPSYS-specific.  Therefore, ml-makedepend inserts references to
471    "make" variables $(ARCH) and $(OPSYS) in place of the corresponding
472    path names.  The makefile writer is responsible for making sure that
473    these variables have correct at the time "make" is invoked.
474    
475    ----------------------------------------------------------------------
476    Name: Matthias Blume
477    Date: 2000/07/22 23:30:00 JST
478    Tag: blume-20000722-urlupdate
479    Description:
480    
481    Changed BOOT and config/srcarchiveurl to point to BL server:
482    
483        ftp://ftp.research.bell-labs.com/dist/smlnj/working/110.29/
484    
485    ----------------------------------------------------------------------
486    Name: Matthias Blume
487    Date: 2000/07/18 18:00:00 JST
488    Tag: blume-20000718-Version_110_29
489    Description:
490    
491    1. Updated src/compiler/TopLevel/main/version.sml to version 110.29
492    
493    2. Updated config/version to 110.29
494    
495    3. Updated config/srcarchiveurl
496    
497    3. New boot files!
498       ftp://ftp.cs.princeton.edu/pub/people/blume/sml/110.29-autofetch
499    
500    ----------------------------------------------------------------------
501    Name: Matthias Blume
502    Date: 2000/07/11 13:58:00 JST
503    Tag: blume-20000711-doctypo
504    Description:
505    
506    Fixed a few typos in CM manual.
507    
508    ----------------------------------------------------------------------
509    Name: Allen Leung
510    Date: 2000/06/15 00:38:00
511    Tag: leunga-20000704-sparc-x86
512    
513    1. x86 peephole improvement sp += k; sp -= k => nop  [from John]
514    2. fix to x86 RET bug [found by Dan Grossman]
515    3. sparc assembly bug fix for ticc instructions [found by Fermin]
516    
517       Affects c-- and moby only
518    
519    ----------------------------------------------------------------------
520    Name: Matthias Blume
521    Date: 2000/07/04 15:26:00
522    Tag: blume-20000704-trigger
523    Description:
524    
525    1. Improvements to CM manual.
526    2. SMLofNJ.Internals.BTrace.trigger reinstated as an alternative way
527       of getting a back-trace.  The function, when called, raises an
528       internal exception which explicitly carries the full back-trace history,
529       so it is unaffected by any intervening handle-raise pairs ("trivial"
530       or not).  The interactive loop will print that history once it arrives
531       at top level.
532       Short of having all exceptions implicitly carry the full history, the
533       recommended way of using this facility is:
534         - compile your program with instrumentation "on"
535         - run it, when it raises an exception, look at the history
536         - if the history is "cut off" because of some handler, go and modify
537           your program so that it explicitly calls BTrace.trigger
538         - recompile (still instrumented), and rerun; look at the full history
539    
540    ----------------------------------------------------------------------
541    Name: Matthias Blume
542    Date: 2000/07/03 15:36:00 JST
543    Tag: blume-20000702-manual
544    Description:
545    
546    Small corrections and updates to CM manual.
547    
548    ----------------------------------------------------------------------
549    Name: Matthias Blume
550    Date: 2000/06/29 16:04:00 JST
551    Tag: blume-20000629-yacctool
552    Description:
553    
554    Changes:
555    
556    1. Class "mlyacc" now takes separate arguments to pass options to
557       generated .sml- and .sig-files independently.
558    2. Corresponding CM manual updates.
559    3. BTrace module now also reports call sites.  (However, for loop clusters
560       it only shows from where the cluster was entered.)  There are associated
561       modifications to core.sml, internals.{sig,sml}, btrace.sml, and btimp.sml.
562    
563    ----------------------------------------------------------------------
564    Name: Matthias Blume
565    Date: 2000/06/27 16:51:00 JST
566    Tag: blume-20000627-noweb
567    Description:
568    
569    Changes:
570    
571     1. Implemented "subdir" and "witness" options for noweb tool.
572        This caused some slight internal changes in CM's tool implementation.
573     2. Fixed bug in "tool plugin" mechanism.  This is essentially cleaning
574        some remaining issues from earlier path anchor changes.
575     3. Updated CM manual accordingly.
576    
577     4. Changed implementation of back-tracing so that I now consider it
578        ready for prime-time.
579    
580        In particular, you don't have to explicitly trigger the back-trace
581        anymore.  Instead, if you are running BTrace-instrumented code and
582        there is an uncaught exception (regardless of whether or not it was
583        raised in instrumented code), the top-level evalloop will print
584        the back-trace.
585    
586        Features:
587    
588          - Instrumented and uninstrumented code work together seemlessly.
589            (Of course, uninstrumented code is never mentioned in actual
590             back-traces.)
591    
592          - Asymptotic time- and space-complexity of instrumented code is
593            equal to that of uninstrumented code.  (This means that
594            tail-recursion is preserved by the instrumentation phase.)
595    
596          - Modules whose code has been instrumented in different sessions
597            work together without problem.
598    
599          - There is no penalty whatsoever on uninstrumented code.
600    
601          - There is no penalty on "raise" expressions, even in
602            instrumented code.
603    
604        A potential bug (or perhaps it is a feature, too):
605    
606          A back-trace reaches no further than the outermost instrumented
607          non-trivial "raise".  Here, a "trivial" raise is one that is the
608          sole RHS of a "handle" rule.  Thus, back-traces reach trough
609    
610               <exp> handle e => raise e
611    
612          and even
613    
614               <exp> handle Foo => raise Bar
615    
616          and, of course, through
617    
618               <exp> handle Foo => ...
619    
620         if the exception was not Foo.
621    
622         Back-traces always reach right through any un-instrumented code
623         including any of its "handle" expressions, trivial or not.
624    
625       To try this out, do the following:
626    
627         - Erase all existing binfiles for your program.
628           (You may keep binfiles for those modules where you think you
629            definitely don't need back-tracing.)
630         - Turn on back-trace instrumentation:
631              SMLofNJ.Internals.BTrace.mode (SOME true);
632         - Recompile your program.  (I.e., run "CM.make" or "use".)
633         - You may now turn instrumentation off again (if you want):
634              SMLofNJ.Internals.BTrace.mode (SOME false);
635         - Run your program as usual.  If it raises an exception that
636           reaches the interactive toplevel, then a back-trace will
637           automatically be printed.  After that, the toplevel loop
638           will print the exception history as usual.
639    
640    ----------------------------------------------------------------------
641    Name: Matthias Blume
642    Date: 2000/06/26 09:56:46 JST
643    Tag: blume-20000626-setup
644    Description:
645    
646    CM: - setup-parameter to "sml" added; this can be used to run arbitrary
647          ML code before and after compiling a file (e.g., to set compiler
648          flags)
649    
650    Compiler: - improved btrace API (in core.sml, internals.{sig,sml})
651              - associated changes to btrace.sml (BTrace instrumentation pass)
652              - cleaner implementation of btimp.sml (BTrace tracing and report
653                module)
654    
655    CM manual: * new path encoding documented
656               * description of setup-parameter to "sml" added
657    
658    The biggest user-visible change to back-tracing is that it is no
659    longer necessary to compile all traced modules within the same
660    session.  (This was a real limitation.)
661    
662    ----------------------------------------------------------------------
663    Name: Matthias Blume
664    Date: 2000/06/24 12:40:00 JST
665    Tag: blume-20000624-startup
666    Description:
667    
668    Fixes startup slowdown problem.  (I was calling SrcPath.sync a _tad_
669    bit too often -- to put it mildly. :)
670    
671    ----------------------------------------------------------------------
672    Name: Matthias Blume
673    Date: 2000/06/23 18:20:00 JST
674    Tag: blume-20000623-btrace
675    Description:
676    
677    This updates adds a backtrace facility to aid programmers in debugging
678    their programs.  This involves the following changes:
679    
680    1. Module system/smlnj/init/core.sml (structure _Core) now has hooks for
681       keeping track of the current call stack.  When programs are compiled
682       in a special mode, the compiler will insert calls to these hooks
683       into the user program.
684       "Hook" means that it is possible for different implementations of
685       back-tracing to register themselves (at different times).
686    
687    2. compiler/MiscUtil/profile/btrace.sml implements the annotation phase
688       as an Absyn.dec->Absyn.dec rewrite.  Normally this phase is turned off.
689       It can be turned on using this call:
690         SMLofNJ.Internals.BTrace.mode (SOME true);
691       Turning it off again:
692         SMLofNJ.Internals.BTrace.mode (SOME false);
693       Querying the current status:
694         SMLofNJ.Internals.BTrace.mode NONE;
695       Annotated programs are about twice as big as normal ones, and they
696       run a factor of 2 to 4 slower with a dummy back-trace plugin (one
697       where all hooks do nothing).  The slowdown with a plugin that is
698       actually useful (such as the one supplied by default) is even greater,
699       but in the case of the default plugin it is still only an constant
700       factor (amortized).
701    
702    3. system/Basis/Implementation/NJ/internals.{sig,sml} have been augmented
703       with a sub-structure BTrace for controlling back-tracing.  In particular,
704       the above-mentioned function "mode" controls whether the annotation
705       phase is invoked by the compiler.  Another important function is
706       "trigger": when called it aborts the current execution and causes
707       the top-level loop to print a full back-trace.
708    
709    4. compiler/MiscUtil/profile/btimp.sml is the current default plugin
710       for back-tracing.  It keeps track of the dynamic call stack and in
711       addition to that it keeps a partial history at each "level" of that
712       stack.  For example, if a tail-calls b, b tail-calls c, and c tail-calls
713       d and b (at separate times, dynamically), then the report will show:
714    
715       GOTO   d
716             /c
717       GOTO  \b
718       CALL   a
719    
720       This shows that there was an initial non-tail call of a, then a
721       tail-call to b or c, looping behavior in a cluster of functions that
722       consist of b and c, and then a goto from that cluster (i.e., either from
723       b or from c) to d.
724    
725       Note that (depending on the user program) the amount of information
726       that the back-trace module has to keep track of at each level is bounded
727       by a constant.  Thus, the whole implementation has the same asymptotical
728       complexity as the original program (both in space and in time).
729    
730    5. compiler/TopLevel/interact/evalloop.sml has been modified to
731       handle the special exception SMLofNJ.Internals.BTrace.BTrace
732       which is raised by the "trigger" function mentioned above.
733    
734    Notes on usage:
735    
736    - Annotated code works well together with unannotated code:
737    Unannotated calls simply do not show up at all in the backtrace.
738    
739    - It is not a good idea to let modules that were annotated during
740    different sessions run at the same time.  This is because the compiler
741    chooses small integers to identify individual functions, and there
742    will be clashes if different modules were compiled in separate sessions.
743    (Nothing will crash, and you will even be told about the clashes, but
744    back-trace information will in general not be useful.)
745    
746    - Back-tracing can be confused by callcc and capture.
747    
748    - The only way of getting a back-trace right now is to explicitly
749    invoke the "trigger" function from your user program.  Eventually, we
750    should make every exception carry back-trace information (if
751    available).  But since this creates more overhead at "raise"-time
752    (similar to the current exnHistory overhead), I have not yet
753    implemented this.  (The implementation will be rather easy.)  With
754    exceptions carrying back-trace information, this facility will be even
755    more useful because users don't need to modify their programs...
756    
757    - While it is possible to compile the compiler with back-trace
758    annotations turned on (I did it to get some confidence in
759    correctness), you must make absolutely sure that core.sml and
760    btimp.sml are compiled WITHOUT annotation!  (core.sml cannot actually
761    be compiled with annotation because there is no core access yet, but
762    if you compile btimp.sml with annotation, then the system will go into
763    an infinite recursion and crash.)
764    Since CM currently does not know about BTrace, the only way to turn
765    annotations on and off for different modules of the compiler is to
766    interrupt CMB.make, change the settings, and re-invoke it.  Of course,
767    this is awkward and clumsy.
768    
769    Sample sessions:
770    
771    Standard ML of New Jersey v110.28.1 [FLINT v1.5], June 5, 2000
772    - SMLofNJ.Internals.BTrace.mode (SOME true);
773    [autoloading]
774    [autoloading done]
775    val it = false : bool
776    - structure X = struct
777    -     fun main n = let
778    -         fun a (x, 0) = d x
779    -           | a (x, n) = b (x, n - 1)
780    -         and b (x, n) = c (x, n)
781    -         and c (x, n) = a (x, n)
782    -         and d x = e (x, 3)
783    -         and e (x, 0) = f x
784    -           | e (x, n) = e (x, n - 1)
785    -         and f 0 = SMLofNJ.Internals.BTrace.trigger ()
786    -           | f n = n * g (n - 1)
787    -         and g n = a (n, 3)
788    -     in
789    -         f n
790    -     end
791    - end;
792    structure X : sig val main : int -> int end
793    - X.main 3;
794    *** BACK-TRACE ***
795    GOTO   stdIn:4.2-13.20: X.main[2].f
796    GOTO-( stdIn:4.2-13.20: X.main[2].e
797    GOTO   stdIn:4.2-13.20: X.main[2].d
798         / stdIn:4.2-13.20: X.main[2].a
799         | stdIn:4.2-13.20: X.main[2].b
800    GOTO-\ stdIn:4.2-13.20: X.main[2].c
801    CALL   stdIn:4.2-13.20: X.main[2].g
802    GOTO   stdIn:4.2-13.20: X.main[2].f
803    GOTO-( stdIn:4.2-13.20: X.main[2].e
804    GOTO   stdIn:4.2-13.20: X.main[2].d
805         / stdIn:4.2-13.20: X.main[2].a
806         | stdIn:4.2-13.20: X.main[2].b
807    GOTO-\ stdIn:4.2-13.20: X.main[2].c
808    CALL   stdIn:4.2-13.20: X.main[2].g
809    GOTO   stdIn:4.2-13.20: X.main[2].f
810    GOTO-( stdIn:4.2-13.20: X.main[2].e
811    GOTO   stdIn:4.2-13.20: X.main[2].d
812         / stdIn:4.2-13.20: X.main[2].a
813         | stdIn:4.2-13.20: X.main[2].b
814    GOTO-\ stdIn:4.2-13.20: X.main[2].c
815    CALL   stdIn:4.2-13.20: X.main[2].g
816    GOTO   stdIn:4.2-13.20: X.main[2].f
817    CALL   stdIn:2.15-17.4: X.main[2]
818    -
819    
820    (Note that because of a FLINt bug the above code currently does not
821    compile without BTrace turned on.)
822    
823    Here is another example, using my modified Tiger compiler:
824    
825    Standard ML of New Jersey v110.28.1 [FLINT v1.5], June 5, 2000
826    - SMLofNJ.Internals.BTrace.mode (SOME true);
827    [autoloading]
828    [autoloading done]
829    val it = false : bool
830    - CM.make "sources.cm";
831    [autoloading]
832    ...
833    [autoloading done]
834    [scanning sources.cm]
835    [parsing (sources.cm):parse.sml]
836    [creating directory CM/SKEL ...]
837    [parsing (sources.cm):tiger.lex.sml]
838    ...
839    [wrote CM/sparc-unix/semant.sml]
840    [compiling (sources.cm):main.sml]
841    [wrote CM/sparc-unix/main.sml]
842    [New bindings added.]
843    val it = true : bool
844    - Main.compile ("../testcases/merge.tig", "foo.out");
845    *** BACK-TRACE ***
846    CALL   lib/semant.sml:99.2-396.21: SemantFun[2].transExp.trvar
847    CALL   lib/semant.sml:99.2-396.21: SemantFun[2].transExp.trexp
848    CALL   lib/semant.sml:289.3-295.22: SemantFun[2].transExp.trexp.check[2]
849    GOTO   lib/semant.sml:289.3-295.22: SemantFun[2].transExp.trexp.check[2]
850    CALL   lib/semant.sml:99.2-396.21: SemantFun[2].transExp.trexp
851    CALL   lib/semant.sml:99.2-396.21: SemantFun[2].transExp.trexp
852    CALL   lib/semant.sml:488.3-505.6: SemantFun[2].transDec.trdec[2].transBody[2]
853         / lib/semant.sml:411.65-543.8: SemantFun[2].transDec
854    CALL-\ lib/semant.sml:413.2-540.9: SemantFun[2].transDec.trdec[2]
855    CALL   lib/semant.sml:99.2-396.21: SemantFun[2].transExp.trexp
856    CALL   lib/semant.sml:8.52-558.4: SemantFun[2].transProg[2]
857    CALL   main.sml:1.18-118.4: Main.compile[2]
858    -
859    
860    ----------------------------------------------------------------------
861    Name: Matthias Blumen
862    Date: 2000/06/21 18:00:00 JST
863    Tag: blume-20000621-manual
864    Description:
865    
866    CM manual update: Path environments documented.
867    
868    ----------------------------------------------------------------------
869    Name: Matthias Blume
870    Date: 2000/06/19 13:40:00
871    Tag: blume-20000619-manual
872    Description:
873    
874    CM manual and system/README update.  This only covers the fact that
875    there are no more implicit anchors.  (Path environments and the "bind"
876    option to "cm" have yet to be documented.)
877    
878    ----------------------------------------------------------------------
879    Name: Matthias Blume
880    Date: 2000/06/19 11:05:00 JST
881    Tag: blume-20000619-chdir-bugfix
882    Description:
883    
884    Fixed a bug in new SrcPath module that sometimes led to a bad chDir call.
885    
886    ----------------------------------------------------------------------
887    Name: Matthias Blume
888    Date: 2000/06/18 22:00:10 JST
889    Tag: blume-20000618-implicit-anchors-really-gone
890    Description:
891    
892    I updates the previous HISTORY entry where I forgot to mention that
893    implicit anchors are no longer with us.
894    
895    The current update also gets rid of the (now useless) controller
896    CM.Control.implicit_anchors.
897    
898    ----------------------------------------------------------------------
899    Name: Matthias Blume
900    Date: 2000/06/16 17:30:00 JST
901    Tag: blume-20000616-anchorenv
902    Description:
903    
904    This patch implements the long anticipated (just kidding :) "anchor
905    environment" mechanism.  In the course of doing this, I also
906    re-implemented CM's internal "SrcPath" module from scratch.  The new
907    one should be more robust in certain boundary cases.  In any case, it
908    is a lot cleaner than its predecessor (IMHO).
909    
910    This time, although there is yet another boot file format change, I
911    kept the unpickler backward-compatible.  As a result, no new bootfiles
912    are necessary and bootstrapping is straightforward.  (You cannot read
913    new bootfiles into an old system, but the other way around is no
914    problem.)
915    
916    Visible changes:
917    
918    ** 0. Implicit path anchors (without the leading $-symbol) are no
919    longer recognized at all. This means that such path names are not
920    illegal either.  For example, the name basis.cm simply refers to a
921    local file called "basis.cm" (i.e, the name is an ordinary path
922    relative to .cm-files directory).  Or, to put it differently, only
923    names that start with $ are anchored paths.
924    
925    ** 1. The $<singlearc> abbreviation for $/<singlearc> has finally
926    vanished.
927    
928    John (Reppy) had critizised this as soon as I originally proposed and
929    implemented it, but at that time I did not really deeply believe
930    him. :) Now I came full-circle because I need the $<singlearc> syntax
931    in another place where it cannot be seen as an abbreviation for
932    $/<singlearc>.  To avoid the confusion, $<singlearc> now means what it
933    seems to mean (i.e., it "expands" into the corresponding anchor
934    value).
935    
936    However, when paths are used as members in CM description files, it
937    continues to be true that there must be at least another arc after the
938    anchor.  This is now enforced separately during semantic analysis
939    (i.e., from a lexical/syntactical point of view, the notation is ok.)
940    
941    ** 2. The "cm" class now accepts an option "bind".  The option's value
942    is a sub-option list of precisely two items -- one labeled "anchor"
943    and the other one labeled "value".  As you might expect, "anchor" is
944    used to specify an anchor name to be bound, and "value" specifies what
945    the anchor is being bound to.
946    
947    The value must be a directory name and can be given in either standard
948    syntax (including the possibility that it is itself an anchored path)
949    or native syntax.
950    
951    Examples:
952    
953       foo.cm (bind:(anchor:bar value:$mystuff/bar))
954       lib.cm (bind:(anchor:a value:"H:\\x\\y\\z"))  (* only works under windows *)
955    
956    and so on.
957    
958    The meaning of this is that the .cm-file will be processed with an
959    augmented anchor environment where the given anchor(s) is/are bound to
960    the given values(s).
961    
962    The rationale for having this feature is this: Suppose you are trying
963    to use two different (already stable) libraries a.cm and b.cm (that
964    you perhaps didn't write yourself).  Further, suppose each of these
965    two libraries internally uses its own auxiliary library $aux/lib.cm.
966    Normally you would now have a problem because the anchor "lib" can not
967    be bound to more than one value globally.  Therefore, the project that
968    uses both a.cm and b.cm must locally redirect the anchor to some other
969    place:
970    
971       a.cm (bind:(anchor:lib value:/usr/lib/smlnj/a-stuff))
972       b.cm (bind:(anchor:lib value:/usr/lib/smlnj/b-stuff))
973    
974    This hard-wires $lib/aux.cm to /usr/lib/smlnj/a-stuff/aux.cm or
975    /usr/lib/smlnj/b-stuff/aux.cm, respectively.
976    
977    Hard-wiring path names is a bit inflexible (and CM will verbosely warn
978    you when you do so at the time of CM.stabilize).  Therefore, you can
979    also use an anchored path as the value:
980    
981      a.cm (bind:(anchor:lib value:$a-lib))
982      b.cm (bind:(anchor:lib value:$b-lib))
983    
984    Now you can globally configure (using the usual CM.Anchor.anchor or
985    pathconfig machinery) bindings for "a-lib" and "b-lib".  Since "lib"
986    itself is always locally bound, setting it globally is no longer
987    meaningful or necessary (but it does not hurt either).  In fact, "lib"
988    can still be used as a global anchor for separate purposes.  As a
989    matter of fact, one can locally define "lib" in terms of a global
990    "lib":
991    
992      a.cm (bind:(anchor:lib value:$lib/a))
993      b.cm (bind:(anchor:lib value:$lib/b))
994    
995    ** 3: The encoding of path names has changed.  This affects the way
996    path names are shown in CM's progress report and also the internal
997    protocol encoding used for parallel make.
998    
999    The encoding now uses one or more ':'-separated segments.  Each
1000    segments corresponds to a file that has been specified relative to the
1001    file given by its preceding segment.  The first segment is either
1002    relative to the CWD, absolute, or anchored.  Each segment itself is
1003    basically a Unix pathname; all segments but the first are relative.
1004    
1005    Example:
1006    
1007       $foo/bar/baz.cm:a/b/c.sml
1008    
1009    This path denotes the file bar/a/b/c.sml relative to the directory
1010    denoted by anchor "foo".  Notice that the encoding also includes
1011    baz.cm which is the .cm-file that listed a/b/c.sml.  As usual, such
1012    paths are resolved relative to the .cm-files directory, so baz.cm must
1013    be ignored to get the "real" pathname.
1014    
1015    To make this fact more obvious, CM puts the names of such "virtual
1016    arcs" into parentheses when they appear in progress reports. (No
1017    parentheses will appear in the internal protocol encoding.)  Thus,
1018    what you really see is:
1019    
1020      $foo/bar/(baz.cm):a/b/c.sml
1021    
1022    I find this notation to be much more informative than before.
1023    
1024    Another new feature of the encoding is that special characters
1025    including parentheses, colons, (back)slashes, and white space are
1026    written as \ddd (where ddd is the decimal encoding of the character).
1027    
1028    *** The CM manual still needs to be updated.
1029    
1030    ----------------------------------------------------------------------
1031    Name: Allen Leung
1032    Date: 2000/06/15 00:38:00
1033    Tag: leunga-20000615-x86-peephole
1034    
1035    x86 Peephole fix by Fermin.  Affects c-- and moby only.
1036    
1037    ----------------------------------------------------------------------
1038    Name: Matthias Blume
1039    Date: 2000/06/12 11:40:00
1040    Tag: blume-20000612-parmakefix
1041    Description:
1042    
1043    More cleanup after changing the file naming scheme: This time I
1044    repaired the parallel make mechanism for CMB.make which I broke earlier.
1045    
1046    ----------------------------------------------------------------------
1047    Name: Allen Leung
1048    Date: 2000/06/09 01:25:00
1049    Tag: leunga-20000609-various
1050    
1051    None of these things should affect normal SML/NJ operations
1052    
1053    1. Peephole improvements provided by Fermin (c--)
1054    2. New annotation DEFUSE for adding extra dependence (moby)
1055    3. New X86 LOCK instructions (moby)
1056    4. New machine description language for reservation tables (scheduling)
1057    5. Fixes to various optimization/analysis modules (branch chaining, dominator
1058       trees etc.)
1059    6. I've changed the CM files so that they can work with versions
1060       110.0.6, 110.25 and 110.28
1061    
1062    ----------------------------------------------------------------------
1063    Name: Matthias Blume
1064    Date: 2000/06/09 12:40:00
1065    Tag: blume-20000609-log
1066    Description:
1067    
1068    - Removed all(?) remaining RCS Log entries from sources.
1069    
1070    - Fixed bug in ml-yacc and ml-lex sources (use explicit anchors for
1071      anchored paths).
1072    
1073    ----------------------------------------------------------------------
1074    Name: Matthias Blume
1075    Date: 2000/06/07 17:00:00 JST
1076    Tag: blume-20000607-no-implicit-anchors
1077    Description:
1078    
1079    1. This update changes the default setting for
1080    CM.Control.implicit_anchors from true to false.  This means that
1081    implicit anchors are no longer permitted by default.  I also tried to
1082    make sure that nothing else still relies on implicit anchors.
1083    (This is the next step on the schedule towards a CM that does not even
1084    have the notion of implicit anchors anymore.)
1085    
1086    2. More CM manual updates.
1087    
1088    3. I managed to track down and fix the pickling bug I mentioned last
1089    time.  Because of the previously existing workaround, this entails no
1090    immediate practical changes.
1091    
1092    ----------------------------------------------------------------------
1093    Name: Matthias Blume
1094    Date: 2000/06/06 11:15:00 JST
1095    Tag: blume-20000606-lazierpickle
1096    Description:
1097    
1098    !!!! NEW BOOT FILES !!!!
1099    
1100    * The main purpose of this update is to make library pickles lazier in
1101    order to reduce the initial space penalty for autoloading a library.
1102    As a result, it is now possible to have $smlnj/compiler.cm
1103    pre-registered.  This should take care of the many complaints or
1104    inquiries about missing structure Compiler.  This required changes to
1105    CM's internal data structures and small tweaks to some algorithms.
1106    
1107    As a neat additional effect, it is no longer necessary (for the sake
1108    of lean heap image files) to distinguish between a "minimal" CM and a
1109    "full" CM.  Now, there is only one CM (i.e., the "full" version:
1110    $smlnj/cm.cm aka $smlnj/cm/full.cm), and it is always available at the
1111    interactive top level. ($smlnj/cm/minimal.cm is gone.)
1112    
1113    To make the life of compiler-hackers easier, "makeml" now also
1114    pre-registers $smlnj/cmb.cm (aka $smlnj/cmb/current.cm).  In other
1115    words, after you bootstrap a new sml for the first time, you will not
1116    have to autoload $smlnj/cmb.cm again afterwards.  (The first time
1117    around you will still have to do it, though.)
1118    
1119    * A second change consists of major updates to the CM manual.  There
1120    are now several appendices with summary information and also a full
1121    specification of the CM description file syntax.
1122    
1123    * In directory src/system I added the script "allcross".  This script
1124    invokes sml and cross-compiles the compiler for all supported
1125    architectures.  (Useful when providing a new set of boot files.)
1126    
1127    * There seems to be a latent bug in my "lazy pickles" mechanism.  I
1128    added a small tweak to pickle-util.sml to work around this problem,
1129    but it is not a proper fix yet.  I will investigate further.  (The
1130    effect of the bug was an inflation of library pickle size.)
1131    
1132    * Version number increased to 110.28.1 (to avoid compatibility problems).
1133    
1134    ----------------------------------------------------------------------
1135    Name: Allen Leung
1136    Date: 2000/05/25 17:28 EDT
1137    Tag: leunga-20000525-ra
1138    Description:
1139    
1140      Fixed a bug in freezing phase of the register allocator.
1141    
1142    ----------------------------------------------------------------------
1143    Name: Allen Leung
1144    Date: 2000/05/15 22:53 EDT
1145    Tag: leunga-20000515-alpha-x86-ra
1146    Description:
1147    
1148      1. Alpha
1149    
1150          Slight cleanup.  Removed the instruction SGNXL
1151    
1152      2. X86
1153    
1154          Added the following instructions to the instruction set:
1155    
1156            ROLx, RORx,
1157            BTx, BTSx, BTLx, BTRx,
1158            XCHGx, and variants with the LOCK prefix
1159    
1160      3. Register Allocation
1161    
1162          The module ra-rewrite-with-renaming has been improved.
1163    
1164      These have no effect on SML/NJ.
1165    
1166    ----------------------------------------------------------------------
1167    Name: Matthias Blume
1168    Date: 2000/05/15 16:20:00 JST
1169    Tag: blume-20000515-lightrebuild
1170    Description:
1171    
1172    1. I added an alternative to "-rebuild" to "makeml".  The difference is
1173       that prior to calling CMB.make' the CM-variable "LIGHT" will be
1174       defined.  In effect, the command will not build any cross-compiler
1175       backends and therefore finish more quickly.
1176    
1177       The "fixpt" script also takes a "-light" switch to be able to use
1178       this new facility while compiling for a fixpoint.
1179    
1180    2. I replaced all mentions of anchored paths in group owner specifications
1181       with simple relative paths (usually starting with "..").
1182       The rationale is that a library's internal workings should not be
1183       compromised by the lack of some anchor.  (An anchor is necessary
1184       for someone who wants to refer to the library by an anchored path,
1185       but it should not be necessary to build the same library in the first
1186       place.)
1187    
1188    3. I changed the way CM's tool mechanism determines the shell command
1189       string used for things like ml-yacc etc. so that it does not break
1190       when CM.Control.implicit_anchors is turned off.
1191    
1192    ----------------------------------------------------------------------
1193    Name: Matthias Blume
1194    Date: 2000/05/12 18:20:00 JST
1195    Tag: blume-20000512-ml-build
1196    Description:
1197    
1198    Fixed a bug in config/_ml-build that prevented ml-yacc and ml-lex from
1199    getting installed properly (by config/install.sh).
1200    
1201    ----------------------------------------------------------------------
1202    Name: Matthias Blume
1203    Date: 2000/05/12 17:30:00 JST
1204    Tag: blume-20000512-anchors
1205    Description:
1206    
1207    !!! NEW BOOT FILES !!!
1208    
1209    This change is in preparation of fading out support for "implicitly
1210    anchored path names".  I went through all sources and used the
1211    explicit (and relatively new) $-notation.  See system/README and the
1212    CM manual for more info on this.
1213    
1214    I also modified the anchoring scheme for some things such as "smlnj",
1215    "MLRISC", "cm", etc. to take advantage of the fact that explicit
1216    anchors are more expressive: anchor name and first arc do not have to
1217    coincide.  This entails the following user-visible change:
1218    
1219    You have to write $smlnj/foo/bar instead of smlnj/foo/bar.  In
1220    particular, when you fire up sml with a command-line argument, say,
1221    e.g.:
1222    
1223       sml '$smlnj/cmb.cm'
1224    
1225    At the ML toplevel prompt:
1226    
1227       CM.autoload "$smlnj/cmb.cm";
1228    
1229    There is also a new controller in CM.Control that can be used to turn
1230    off all remaining support for implicit anchors by saying:
1231    
1232        CM.autoload "$smlnj/
1233        #set CM.Control.implicit_anchors false;
1234    
1235    This causes CM to reject implicitly anchored paths.  This is (for the
1236    time being) less permissive than the "final" version where there will
1237    be no more such implicit anchors and relative paths will be just that:
1238    relative.
1239    
1240    The next step (version after next version?) will be to make the
1241    default for CM.Control.implicit_anchors false.  After the dust has
1242    settled, I can then produce the "final" version of this...
1243    
1244    Note: Since bootstrapping is a bit tricky, I provided new boot files.
1245    
1246    ----------------------------------------------------------------------
1247    Name: Matthias Blume
1248    Date: 2000/05/11 16:30:00 JST
1249    Tag: blume-20000511-sources
1250    Description:
1251    
1252    The main change is that I added function CM.sources as a generalized
1253    version of the earlier CM.makedepend.  This entails the following
1254    additional changes:
1255    
1256      - CM.makedepend has been dropped.
1257    
1258      - CM manual has been updated.
1259    
1260      - TOOLS signature and API have been changed.
1261    
1262    ----------------------------------------------------------------------
1263    Name: Allen Leung
1264    Date: 2000/05/10 21:17 EDT
1265    Tag: leunga-20000510-moby-c--ssa
1266    Description:
1267    
1268      Various bug fixes and new features for C--, Moby and MLRISC optimizations.
1269    None of these affect SML/NJ.
1270    
1271    1. Register Allocation
1272    
1273        a. A new ra spilling module (ra/ra-spill-with-renaming) is implemented.
1274           This module tries to remove local (i.e. basic block level) redundancies
1275           during spilling.
1276    
1277        b. A new framework for performing region based register allocation.
1278           Not yet entirely functional.
1279    
1280    2. X86
1281    
1282       a. DefUse for POP was missing the stack pointer [found by Lal]
1283       b. Reload for CALL was incorrect in X86Spill [found by John]
1284       c. Various fixes in X86Spill so that it can be used correctly for
1285          the new spilling module.
1286    
1287    3. SSA/IR
1288    
1289       a. New module ir/dj-dataflow.sml implements elimination based
1290          data flow analysis.
1291    
1292    4. MLRiscGen
1293    
1294       a. Fix for gc type annotation
1295    
1296    5. MDGen
1297    
1298       Various fixes for machine description -> ml code translation.  For ssa
1299       only.
1300    
1301    ----------------------------------------------------------------------
1302    Name: Allen Leung
1303    Date: 2000/05/08 22:17 EDT
1304    Tag: leunga-20000508-labexp
1305    Description:
1306    
1307      Fermin has found a few assembly problems with constant expressions
1308      generated in LabelExp.  Mostly, the problems involve extra parentheses,
1309      which choke on dumb assemblers.  This is his fix.
1310    
1311    ----------------------------------------------------------------------
1312    Name: Dave MacQueen
1313    Date: 2000/04/09 14:00 EDT
1314    Tag: dbm-20000502-Version_110_28
1315    Description:
1316    
1317    1. Updated src/compiler/TopLevel/main/version.sml to version 110.28
1318    
1319    2. Updated config/version to 110.28
1320    
1321    3. Updated config/srcarchiveurl
1322    
1323    3. New boot files!
1324       ftp://ftp.research.bell-labs.com/dist/smlnj/working/110.28/
1325    
1326    ----------------------------------------------------------------------
1327    Name: Matthias Blume
1328    Date: 2000/05/01 19:05:00 JST
1329    Tag: blume-20000501-noweb
1330    Description:
1331    
1332    A new noweb tool has been added.  The existing system is entirely
1333    unaffected by this, but some CM users have asked for renewed noweb
1334    support.  Everything is documented in the CM manual.
1335    
1336    New (plugin) libraries:
1337    
1338       noweb-tool.cm
1339       nw-ext.cm
1340    
1341    ----------------------------------------------------------------------
1342    Name: Dave MacQueen
1343    Date: 2000/04/30 12:40PM EDT
1344    Tag: dbm-20000430-bug_fixes
1345    Description:
1346    
1347    1. Fix for bug 1498
1348       smlnj/src/system/Basis/Implementation/Unsafe/object.sig
1349       smlnj/src/system/Basis/Implementation/Unsafe/object.sml
1350         added toRealArray function
1351       smlnj/src/compiler/MiscUtil/print/ppobj.sml
1352         added check for tag Obj.RealArray to array printing case in ppObj
1353    
1354    2. Fix for bug 1510
1355       smlnj/src/compiler/Semant/types/typesutil.sml
1356         fixed definition of dummyargs (used by equalTycon) so that
1357         dummy args are distinct types
1358    
1359    ----------------------------------------------------------------------
1360    Name: Matthias Blume
1361    Date: 2000/04/30 01:00:00 JST
1362    Tag: blume-20000430-versions
1363    Description:
1364    
1365    1. CM version numbering added.  This is an implementation of Lal's
1366       proposal for adding version numbers and version checking to .cm
1367       files.  Lal said that his proposal was just that -- a proposal.
1368       For the time being I went ahead and implemented it so that people
1369       can comment on it.  Everything is completely backward-compatible
1370       (except for the stable library format, i.e., new bootfiles!).
1371    
1372       As usual, see the CM manual for details.
1373    
1374    2. An alternative syntax for anchored paths has been implemented.
1375       Dave has recently voiced the same concerns that I had when I did
1376       this, so there should be some support.  My take is that eventually
1377       I will let support for the current syntax (where anchors are
1378       "implicit") fade out in favor of the new, explicit syntax.
1379       In order to be backward-compatible, both old and new syntax are
1380       currently supported.
1381    
1382       Again, see the CM manual for details.
1383    
1384    3. Parallel make is trying to be slightly smarter:  When the master
1385       process finds a "bottleneck", i.e., when there is only one
1386       compilation unit that can be compiled and everybody else is
1387       waiting on it, then it will simply compile it directly instead
1388       of clumsily telling one of the slaves to do it.
1389    
1390    4. Support for "unsharing" added.  This is necessary in order to be
1391       able to have two different versions of the same library running
1392       at the same time (e.g., for trying out a new MLRISC while still
1393       having the old MLRISC linked into the current compiler, etc.)
1394       See the CM manual.
1395    
1396    5. Simple "makedepend" functionality added for generating Makefile
1397       dependency information.  (This is rather crude at the moment.
1398       Expect some changes here in the future.)
1399    
1400    6. ".fun" added as a recognized suffix for ML files. Also documented
1401       explicitly in the manual that the fallback behavior (unknown suffix
1402       -> ML file) is not an official feature!
1403    
1404    7. Small changes to the pickler for stable libraries.
1405    
1406    8. Several internal changes to CM (for cleanup/improvement).
1407    
1408    
1409    !!!! NEW BINFILES !!!!
1410    
1411    ----------------------------------------------------------------------
1412    Name: Matthias Blume
1413    Date: 2000/04/28 17:30:00 JST
1414    Tag: blume-20000428-pathconfig
1415    Description:
1416    
1417    1. I changed config/install.sh to remove duplicate entries from the
1418       lib/pathconfig file at the end.  Moreover, the final version of
1419       lib/pathconfig is sorted alphabetically.  The same (sorting) is done
1420       in src/system/installml.
1421    
1422    2. The config/install.sh script now consistently uses relative
1423       pathnames in lib/pathconfig whenever the anchor is in the lib
1424       directory.  (So far this was true for the libraries that come
1425       pre-compiled and bundled as part of the bootfiles but not for
1426       libraries that are compiled by the script itself.)
1427    
1428    ----------------------------------------------------------------------
1429    Name: Matthias Blume
1430    Date: 2000/04/26 13:10:00 JST
1431    Tag: blume-20000426-fun_suffix
1432    Description:
1433    
1434    Added ".fun" as a recognized file name suffix (for ML code).
1435    
1436    ----------------------------------------------------------------------
1437    Name: Allen Leung
1438    Date: 2000/04/25 17:00:00 EST
1439    Tag: leunga-20000425-alpha-ra
1440    Description:
1441    
1442    1. Alpha
1443    
1444        PSEUDOARITH was missing in AlphaRewrite.  This causes an endless loop
1445    in C--.
1446    
1447    2. RA
1448    
1449       Added a flag "ra-dump-size" to print out the size of the flowgraph
1450       and the interference graph.
1451    
1452    ----------------------------------------------------------------------
1453    Name: Dave MacQueen
1454    Date: 2000/04/25/
1455    Tag: dbm-20000425-mlyacc_doc_examples
1456    Description:
1457      Updated mlyacc.tex sections 5 and 7 for SML '97 and CM.
1458      Updated all three examples in src/ml-yacc/examples to run
1459      under 110.* using CM.make.
1460    
1461    ----------------------------------------------------------------------
1462    Name: Allen Leung
1463    Date: 2000/04/20 23:04:00 EST
1464    Tag: leunga-20000420-ssa-c---stuff
1465    Description:
1466    
1467      This update synchronizes my repository with Yale's.  Most of these
1468    changes, however, do not affect SML/NJ at all (the RA is an exception).
1469    
1470    1. Register Allocator
1471    
1472       a. An improvement in the interference graph construction:
1473          Given a copy
1474    
1475                s <- t
1476    
1477          no interference edge between s and t is added for this definition of s.
1478    
1479       b. I've added two new spill heuristic modules that Fermin and I developed
1480          (in the new library RA.cm). These are unused in SML/NJ but maybe
1481          useful for others (Moby?)
1482    
1483    2. X86
1484    
1485       a. Various fixes in the backend provided by Fermin [C--] and Lal.
1486    
1487    3. Alpha
1488    
1489       a. Added the BSR instruction and code generation that goes with it [C--]
1490       b. Other fixes too numerous to recount provided by Fermin [C--]
1491    
1492    4. Regmaps
1493    
1494       a. The regmaps are not initialized with the identity physical bindings
1495          at creation time.  This is unneeded.
1496    
1497    5. MLRISC Optimizations
1498    
1499       a. The DJ-Graph module can now compute the iterated dominance frontiers
1500          intersects with liveness incrementally in linear time! Woohoo!
1501          This is now used in my new SSA construction algorithm.
1502    
1503       b. THe branch reorganization module is now smarter about linear chains of
1504          basic blocks.
1505    
1506    
1507    ----------------------------------------------------------------------
1508    Name: Matthias Blume
1509    Date: 2000/04/12 13:52:00 JST
1510    Tag: blume_main_v110p27_1
1511    Description:
1512    
1513    Changed install.sh script to handle archive files without version number
1514    and to use "boot.<arch>-<os>" instead of "sml.boot.<arch>-<os>" for the
1515    name of the boot file archive.
1516    
1517    ----------------------------------------------------------------------
1518    Name: Dave MacQueen
1519    Date: 2000/04/09 14:00 EDT
1520    Tag: dbm-20000410-Version_110_27
1521    Description:
1522    
1523    1. Updated src/compiler/TopLevel/main/version.sml to version 110.27
1524    
1525    2. Updated src/config/version to 110.27
1526    
1527    3. New boot files!
1528    
1529    ----------------------------------------------------------------------
1530    Name: Allen Leung
1531    Date: 2000/04/09 19:09:00 EST
1532    Tag: leunga-20000409-misc
1533    Description:
1534    
1535    1.  Yet another fix for x86 assembly for idivl, imull, mull and friends.
1536    
1537    2.  Miscellaneous improvements to MLRISC (unused in sml/nj)
1538    
1539    ----------------------------------------------------------------------
1540    Name: Stefan
1541    Date: 2000/04/07 10:00:00 EDT
1542    Tag: monnier-20000406-branch-handling
1543    Description:
1544    
1545    Improved handling of branches (mostly those generated from
1546    polymorphic equality), removed switchoff and changed the
1547    default optimization settings (more cpsopt and less flintopt).
1548    
1549    ----------------------------------------------------------------------
1550    Name: Allen Leung
1551    Date: 2000/04/06 01:30:00 EST
1552    Tag: leunga-20000406-peephole-x86-SSA-2
1553    Description:
1554    
1555       Forgot a few files.
1556    
1557    ----------------------------------------------------------------------
1558    Name: Allen Leung
1559    Date: 2000/04/06 00:36:00 EST
1560    Tag: leunga-20000406-peephole-x86-SSA
1561    Description:
1562    
1563    1.  New Peephole code
1564    
1565    2.  Minor improvement to X86 instruction selection
1566    
1567    3.  Various fixes to SSA and machine description -> code translator
1568    
1569    ----------------------------------------------------------------------
1570    Name: Matthias Blume
1571    Date: 2000/04/05 12:30:00 JST
1572    Tag: blume_main_v110p26p2_3
1573    Description:
1574    
1575    This update just merges three minor cosmetic updates to CM's sources
1576    to get ready for the 110.27 code freeze on Friday.  No functionality
1577    has changed.
1578    
1579    ----------------------------------------------------------------------
1580    Name: Allen Leung
1581    Date: 2000/04/04 19:39:00 EST
1582    Tag: leunga-20000404-x86-asm
1583    Description:
1584    
1585    1.  Fixed a problem in X86 assembly.
1586    
1587        Things like
1588    
1589           jmp %eax
1590           jmp (%eax)
1591    
1592        should be output as
1593    
1594           jmp *%eax
1595           jmp *(%eax)
1596    
1597    2.  Assembly output
1598    
1599          Added a new flag
1600    
1601              "asm-indent-copies" (default to false)
1602    
1603          When this flag is on, parallel copies will be indented an extra level.
1604    
1605    ----------------------------------------------------------------------
1606    Name: Allen Leung
1607    Date: 2000/04/04 03:18:00 EST
1608    Tag: leunga-20000404-C--Moby
1609    Description:
1610    
1611        All of these fixes are related to C--, Moby, and my own optimization
1612        stuff; so they shouldn't affect SML/NJ.
1613    
1614    1.  X86
1615    
1616        Various fixes related floating point, and extensions.
1617    
1618    2.  Alpha
1619    
1620        Some extra patterns related to loads with signed/zero extension
1621        provided by Fermin.
1622    
1623    3.  Assembly
1624    
1625        When generating assembly, resolve the value of client defined constants,
1626        instead of generating symbolic values.  This is controlled by the
1627        new flag "asm-resolve-constants", which is default to true.
1628    
1629    4.  Machine Descriptions
1630    
1631        a. The precedence parser was slightly broken when parsing infixr symbols.
1632        b. The type generalizing code had the bound variables reversed, resulting
1633           in a problem during arity raising.
1634        c. Various fixes in machine descriptions.
1635    
1636    ----------------------------------------------------------------------
1637    Name: Matthias Blume
1638    Date: 2000/04/03 16:05:00 JST
1639    Tag: blume_main_v110p26p2_2
1640    Description:
1641    
1642    I eliminated coreEnv from compInfo.  Access to the "Core" structure is
1643    now done via the ordinary static environment that is context to each
1644    compilation unit.
1645    
1646    To this end, I arranged that instead of "structure Core" as "structure
1647    _Core" is bound in the pervasive environment.  Core access is done via
1648    _Core (which can never be accidentally rebound because _Core is not a
1649    legal surface-syntax symbol).
1650    
1651    The current solution is much cleaner because the core environment is
1652    now simply part of the pervasive environment which is part of every
1653    compilation unit's context anyway.  In particular, this eliminates all
1654    special-case handling that was necessary until now in order to deal
1655    with dynamic and symbolic parts of the core environment.
1656    
1657    Remaining hackery (to bind the "magic" symbol _Core) is localized in the
1658    compilation manager's bootstrap compiler (actually: in the "init group"
1659    handling).  See the comments in src/system/smlnj/init/init.cmi for
1660    more details.
1661    
1662    I also tried to track down all mentions of "Core" (as string argument
1663    to Symbol.strSymbol) in the compiler and replaced them with a
1664    reference to the new CoreSym.coreSym.  Seems cleaner since the actual
1665    name appears in one place only.
1666    
1667    Binfile and bootfile format have not changed, but the switchover from
1668    the old "init.cmi" to the new one is a bit tricky, so I supplied new
1669    bootfiles anyway.
1670    
1671    ----------------------------------------------------------------------
1672    Name: Allen Leung
1673    Date: 2000/04/02 21:17:00 EST
1674    Tag: leunga-20000402-mltree
1675    Description:
1676    
1677       1. Renamed the constructor CALL in MLTREE by popular demand.
1678       2. Added a bunch of files from my repository.  These are currently
1679          used by other non-SMLNJ backends.
1680    
1681    ----------------------------------------------------------------------
1682    Name: Allen Leung
1683    Date: 2000/03/31 21:15:00 EST
1684    Tag: leunga-20000331-aliasing
1685    Description:
1686    
1687    This update contains a rewritten (and hopefully more correct) module
1688    for extracting aliasing information from CPS.
1689    
1690       To turn on this feature:
1691    
1692            Compiler.Control.CG.memDisambiguate := true
1693    
1694       To pretty print the region information with assembly
1695    
1696           Compiler.Control.MLRISC.getFlag "asm-show-region" := true;
1697    
1698       To control how many levels of aliasing information are printed, use:
1699    
1700           Compiler.Control.MLRISC.getInt "points-to-show-level" := n
1701    
1702       The default of n is 3.
1703    
1704    ----------------------------------------------------------------------
1705    Name: David MacQueen
1706    Date: 2000/03/31 11:15:00 EST
1707    Tag: dbm-20000331-runtime_fix
1708    Description:
1709    
1710    This update contains:
1711    
1712    1. runtime/c-lib/c-libraries.c
1713       includes added in revision 1.2 caused compilation errors on hppa-hpux
1714    
1715    2. fix for bug 1556
1716       system/Basis/Implementation/NJ/internal-signals.sml
1717    
1718    ----------------------------------------------------------------------
1719    Name: Matthias Blume
1720    Date: 2000/03/31 18:00:00 JST
1721    Tag: blume_main_v110p26p2_1
1722    Description:
1723    
1724    This update contains:
1725    
1726    1. A small change to CM's handling of stable libraries:
1727       CM now maintains one "global" modmap that is used for all stable
1728       libraries.  The use of such a global modmap maximizes sharing and
1729       minimizes the need for re-traversing parts of environments during
1730       modmap construction.  (However, this has minor impact since modmap
1731       construction seems to account for just one percent or less of total
1732       compile time.)
1733    
1734    2. I added a "genmap" phase to the statistics.  This is where I got the
1735       "one percent" number (see above).
1736    
1737    3. CM's new tool parameter mechanism just became _even_ better. :)
1738       - The parser understands named parameters and recursive options.
1739       - The "make" and "shell" tools use these new features.
1740         (This makes it a lot easier to cascade these tools.)
1741       - There is a small syntax change: named parameters use a
1742    
1743           <name> : ( <option> ... )            or
1744           <name> : <string>
1745    
1746         syntax.  Previously, named parameters were implemented in an
1747         ad-hoc fashion by each tool individually (by parsing strings)
1748         and had the form
1749    
1750           <name>=<string>
1751    
1752       See the CM manual for a full description of these issues.
1753    
1754    ----------------------------------------------------------------------
1755    Name: Matthias Blume
1756    Date: 2000/03/30 18:00:00 JST
1757    Tag: blume_main_v110p26p2_0
1758    Description:
1759    
1760    !!!!! WARNING !!!!!!
1761    !!  New binfiles  !!
1762    !!!!!!!!!!!!!!!!!!!!
1763    
1764    This update contains:
1765    
1766    1. Moderate changes to CM:
1767    
1768       - Changes to CM's tools mechanism.  In particular, it is now possible
1769       to have tools that accept additional "command line" parameters
1770       (specified in the .cm file at each instance where the tool's class is
1771       used).
1772    
1773       This was done to accommodate the new "make" and "shell" tools which
1774       facilitate fairly seamless hookup to portions of code managed using
1775       Makefiles or Shell scripts.
1776    
1777       There are no classes "shared" or "private" anymore.  Instead, the
1778       sharing annotation is now a parameter to the "sml" class.
1779    
1780       There is a bit of generic machinery for implementing one's own
1781       tools that accept command-line parameters.  However, I am not yet fully
1782       satisfied with that part, so expect changes here in the future.
1783    
1784       All existing tools are described in the CM manual.
1785    
1786       - Slightly better error handling.  (CM now suppresses many followup
1787       error messages that tended to be more annoying than helpful.)
1788    
1789    2. Major changes to the compiler's static environment data structures.
1790    
1791       - no CMStaticEnv anymore.
1792            - no CMEnv, no "BareEnvironment" (actually, _only_ BareEnvironment,
1793              but it is called Environment), no conversions between different
1794              kinds of static environments
1795    
1796       - There is still a notion of a "modmap", but such modmaps are generated
1797         on demand at the time when they are needed.  This sounds slow, but I
1798         sped up the code that generates modmaps enough for this not to lead to
1799         a slowdown of the compiler (at least I didn't detect any).
1800    
1801       - To facilitate rapid modmap generation, static environments now
1802         contain an (optional) "modtree" structure.  Modtree annotations are
1803         constructed by the unpickler during unpickling.  (This means that
1804         the elaborator does not have to worry about modtrees at all.)
1805         Modtrees have the advantage that they are compositional in the same
1806         way as the environment data structure itself is compositional.
1807         As a result, modtrees never hang on to parts of an environment that
1808         has already been rendered "stale" by filtering or rebinding.
1809    
1810       - I went through many, many trials and errors before arriving at the
1811         current solution.  (The initial idea of "linkpaths" did not work.)
1812         But the result of all this is that I have touched a lot of files that
1813         depend on the "modules" and "types" data structures (most of the
1814         elaborator). There were a lot of changes during my "linkpath" trials
1815         that could have been reverted to their original state but weren't.
1816         Please, don't be too harsh on me for messing with this code a bit more
1817         than what was strictly necessary...  (I _did_ resist the tempation
1818         of doing any "global reformatting" to avoid an untimely death at
1819         Dave's hands. :)
1820    
1821       - One positive aspect of the previous point:  At least I made sure that
1822         all files that I touched now compile without warnings (other than
1823         "polyEqual").
1824    
1825       - compiler now tends to run "leaner" (i.e., ties up less memory in
1826         redundant modmaps)
1827    
1828    ----------------------------------------------------------------------
1829    Name: Allen Leung
1830    Date: 2000/03/29 18:00:00
1831    Tag: leunga-20000327-mlriscGen_hppa_alpha_x86
1832    Boot files (optional): ftp://react-ilp.cs.nyu.edu/leunga/110.26.1-sml.boot.x86-unix-20000330.tar.gz
1833    Description:
1834    
1835       This update contains *MAJOR* changes to the way code is generated from CPS
1836    in the module mlriscGen, and in various backend modules.
1837    
1838    CHANGES
1839    =======
1840    
1841    1. MLRiscGen: forward propagation fix.
1842    
1843       There was a bug in forward propagation introduced at about the same time
1844       as the MLRISC x86 backend, which prohibits coalescing to be
1845       performed effectively in loops.
1846    
1847       Effect: speed up of loops in RISC architectures.
1848               By itself, this actually slowed down certain benchmarks on the x86.
1849    
1850    2. MLRiscGen:  forward propagating addresses from consing.
1851    
1852       I've changed the way consing code is generated.  Basically I separated
1853       out the initialization part:
1854    
1855            store tag,   offset(allocptr)
1856            store elem1, offset+4(allocptr)
1857            store elem2, offset+8(allocptr)
1858            ...
1859            store elemn, offset+4n(allocptr)
1860    
1861       and the address computation part:
1862    
1863            celladdr <- offset+4+alloctpr
1864    
1865       and move the address computation part
1866    
1867       Effect:  register pressure is generally lower as a result.  This
1868                makes compilation of certain expressions much faster, such as
1869                long lists with non-trivial elements.
1870    
1871                 [(0,0), (0,0), .... (0,0)]
1872    
1873    3. MLRiscGen: base pointer elimination.
1874    
1875        As part of the linkage mechanism, we generate the sequence:
1876    
1877         L:  ...  <- start of the code fragment
1878    
1879         L1:
1880             base pointer <- linkreg - L1 + L
1881    
1882         The base pointer was then used for computing relocatable addresses
1883       in the code fragment.  Frequently (such as in lots of continuations)
1884       this is not needed.  We now eliminate this sequence whenever possible.
1885    
1886         For compile time efficiency, I'm using a very stupid local heuristic.
1887       But in general, this should be done as a control flow analysis.
1888    
1889       Effect:  Smaller code size.  Speed up of most programs.
1890    
1891    4. Hppa back end
1892    
1893         Long jumps in span dependence resolution used to depend on the existence
1894      of the base pointer.
1895    
1896         A jump to a long label L was expanded into the following sequence:
1897    
1898          LDIL %hi(L-8192), %r29
1899          LDO  %lo(L-8192)(%r29), %r29
1900          ADD  %r29, baseptr, %r29
1901          BV,n %r0(%r29)
1902    
1903         In the presence of change (3) above, this will not work.  I've changed
1904       it so that the following sequence of instructions are generated, which
1905       doesn't mention the base pointer at all:
1906    
1907             BL,n  L', %r29           /* branch and link, L' + 4 -> %r29 */
1908        L':  ADDIL L-(L'+4), %r29     /* Compute address of L */
1909             BV,n  %r0(%r29)          /* Jump */
1910    
1911    5. Alpha back end
1912    
1913          New alpha instructions LDB/LDW have been added, as per Fermin's
1914       suggestions.   This is unrelated to all other changes.
1915    
1916    6. X86 back end
1917    
1918         I've changed andl to testl in the floating point test sequence
1919         whenever appropriate.  The Intel optimization guide states that
1920         testl is preferable to andl.
1921    
1922    7. RA (x86 only)
1923    
1924         I've improved the spill propagation algorithm, using an approximation
1925       of maximal weighted independent sets.   This seems to be necessary to
1926       alleviate the negative effect in light of the slow down in (1).
1927    
1928         I'll write down the algorithm one of these days.
1929    
1930    8. MLRiscGen: frequencies
1931    
1932         I've added an annotation that states that all call gc blocks have zero
1933       execution frequencies.  This improves register allocation on the x86.
1934    
1935    BENCHMARKS
1936    ==========
1937    
1938       I've only perform the comparison on 110.25.
1939    
1940       The platforms are:
1941    
1942        HPPA  A four processor HP machine (E9000) with 5G of memory.
1943        X86   A 300Hhz Pentium II with 128M of memory, and
1944        SPARC An Ultra sparc 2 with 512M of memory.
1945    
1946       I used the following parameters for the SML benchmarks:
1947    
1948                 @SMLalloc
1949         HPPA    256k
1950         SPARC   512k
1951         X86     256k
1952    
1953    COMPILATION TIME
1954    ----------------
1955       Here are the numbers comparing the compilation times of the compilers.
1956       I've only compared 110.25 compiling the new sources versus
1957       a fixpoint version of the new compiler compiling the same.
1958    
1959                     110.25                                  New
1960               Total  Time in RA  Spill+Reload   Total  Time In RA Spill+Reload
1961         HPPA   627s    116s        2684+3584     599s    95s       1003+1879
1962         SPARC  892s    173s        2891+3870     708s    116s      1004+1880
1963         X86    999s    315s       94006+130691   987s    296s    108877+141957
1964    
1965                   110.25         New
1966                Code Size      Code Size
1967         HPPA   8596736         8561421
1968         SPARC  8974299         8785143
1969         X86    9029180         8716783
1970    
1971       So in summary, things are at least as good as before.   Dramatic
1972       reduction in compilation is obtained on the Sparc; I can't explain it,
1973       but it is reproducible.  Perhaps someone should try to reproduce this
1974       on their own machines.
1975    
1976    SML BENCHMARKS
1977    --------------
1978    
1979        On the average, all benchmarks perform at least as well as before.
1980    
1981          HPPA         Compilation Time     Spill+Reload      Run Time
1982                     110.25  New            110.25    New   110.25  New
1983    
1984          barnesHut  3.158  3.015  4.75%    1+1       0+0   2.980  2.922   2.00%
1985              boyer  6.152  5.708  7.77%    0+0       0+0   0.218  0.213   2.34%
1986       count-graphs  1.168  1.120  4.32%    0+0       0+0  22.705 23.073  -1.60%
1987                fft  0.877  0.792 10.74%    1+3       1+3   0.602  0.587   2.56%
1988        knuthBendix  3.180  2.857 11.32%    0+0       0+0   0.675  0.662   2.02%
1989             lexgen  6.190  5.290 17.01%    0+0       0+0   0.913  0.788  15.86%
1990               life  0.803  0.703 14.22%   25+25      0+0   0.153  0.140   9.52%
1991              logic  2.048  2.007  2.08%    6+6       1+1   4.133  4.008   3.12%
1992         mandelbrot  0.077  0.080 -4.17%    0+0       0+0   0.765  0.712   7.49%
1993             mlyacc 22.932 20.937  9.53%  154+181    32+57  0.468  0.430   8.91%
1994            nucleic  5.183  5.060  2.44%    2+2       0+0   0.125  0.120   4.17%
1995      ratio-regions  3.357  3.142  6.84%    0+0       0+0  116.225 113.173 2.70%
1996                ray  1.283  1.290 -0.52%    0+0       0+0   2.887  2.855   1.11%
1997             simple  6.307  6.032  4.56%   28+30      5+7   3.705  3.658   1.28%
1998                tsp  0.888  0.862  3.09%    0+0       0+0   7.040  6.893   2.13%
1999               vliw 24.378 23.455  3.94%  106+127    25+45  2.758  2.707   1.91%
2000      --------------------------------------------------------------------------
2001       Average                     6.12%                                   4.09%
2002    
2003          SPARC        Compilation Time     Spill+Reload      Run Time
2004                     110.25  New            110.25    New   110.25  New
2005    
2006          barnesHut  3.778  3.592  5.20%    2+2       0+0   3.648  3.453    5.65%
2007              boyer  6.632  6.110  8.54%    0+0       0+0   0.258  0.242    6.90%
2008       count-graphs  1.435  1.325  8.30%    0+0       0+0  33.672 34.737   -3.07%
2009                fft  0.980  0.940  4.26%    3+9       2+6   0.838  0.827    1.41%
2010        knuthBendix  3.590  3.138 14.39%    0+0       0+0   0.962  0.967   -0.52%
2011             lexgen  6.593  6.072  8.59%    1+1       0+0   1.077  1.078   -0.15%
2012               life  0.972  0.868 11.90%   26+26      0+0   0.143  0.140    2.38%
2013              logic  2.525  2.387  5.80%    7+7       1+1   5.625  5.158    9.05%
2014         mandelbrot  0.090  0.093 -3.57%    0+0       0+0   0.855  0.728   17.39%
2015             mlyacc 26.732 23.827 12.19%  162+189    32+57  0.550  0.560   -1.79%
2016            nucleic  6.233  6.197  0.59%    3+3       0+0   0.163  0.173   -5.77%
2017      ratio-regions  3.780  3.507  7.79%    0+0       0+0 133.993 131.035   2.26%
2018                ray  1.595  1.550  2.90%    1+1       0+0   3.440  3.418    0.63%
2019             simple  6.972  6.487  7.48%   29+32      5+7   3.523  3.525   -0.05%
2020                tsp  1.115  1.063  4.86%    0+0       0+0   7.393  7.265    1.77%
2021               vliw 27.765 24.818 11.87%  110+135    25+45  2.265  2.135    6.09%
2022      ----------------------------------------------------------------------------
2023       Average                     6.94%                                    2.64%
2024    
2025          X86          Compilation Time     Spill+Reload      Run Time
2026                     110.25  New            110.25    New   110.25  New
2027    
2028          barnesHut  5.530  5.420  2.03%  593+893   597+915   3.532  3.440   2.66%
2029              boyer  8.768  7.747 13.19%  493+199   301+289   0.327  0.297  10.11%
2030       count-graphs  2.040  2.010  1.49%  298+394   315+457  26.578 28.660  -7.26%
2031                fft  1.327  1.302  1.92%  112+209   115+210   1.055  0.962   9.71%
2032        knuthBendix  5.218  5.475 -4.69%  451+598   510+650   0.928  0.932  -0.36%
2033             lexgen  9.970  9.623  3.60% 1014+841  1157+885   0.947  0.928   1.97%
2034               life  1.183  1.183  0.00%  162+182   145+148   0.127  0.103  22.58%
2035              logic  3.285  3.512 -6.45%  514+684   591+836   5.682  5.577   1.88%
2036         mandelbrot  0.147  0.143  2.33%   38+41     33+54    0.703  0.690   1.93%
2037             mlyacc 35.457 32.763  8.22% 3496+4564 3611+4860  0.552  0.550   0.30%
2038            nucleic  7.100  6.888  3.07%  239+168   201+158   0.175  0.173   0.96%
2039      ratio-regions  6.388  6.843 -6.65% 1182+257   981+300  120.142 120.345 -0.17%
2040                ray  2.332  2.338 -0.29%  346+398   402+494   3.593  3.540   1.51%
2041             simple  9.912  9.903  0.08% 1475+941  1579+1168  3.057  3.178  -3.83%
2042                tsp  1.623  1.532  5.98%  266+200   250+211   8.045  7.878   2.12%
2043               vliw 33.947 35.470 -4.29% 2629+2774 2877+3171  2.072  1.890   9.61%
2044      ----------------------------------------------------------------------------
2045       Average                     1.22%                                     3.36%
2046    
2047    ----------------------------------------------------------------------
2048  Name: Allen Leung  Name: Allen Leung
2049  Date: 2000/03/23 16:25:00  Date: 2000/03/23 16:25:00
2050  Tag: leunga-20000323-fix_x86_alpha  Tag: leunga-20000323-fix_x86_alpha
# Line 66  Line 2099 
2099    
2100  1. Tools.registerStdShellCmdTool (from smlnj/cm/tool.cm) takes an  1. Tools.registerStdShellCmdTool (from smlnj/cm/tool.cm) takes an
2101  additional argument called "template" which is an optional string that  additional argument called "template" which is an optional string that
2102  specifiel the layout of the tool command line.  See the CM manual for  specifies the layout of the tool command line.  See the CM manual for
2103  explanation.  explanation.
2104    
2105  2. A special-purpose tool can be "regisitered" by simply dropping the  2. A special-purpose tool can be "registered" by simply dropping the
2106  corresponding <...>-tool.cm (and/or <...>-ext.cm) into the same  corresponding <...>-tool.cm (and/or <...>-ext.cm) into the same
2107  directory where the .cm file lives that uses this tool.  (The  directory where the .cm file lives that uses this tool.  (The
2108  behavior/misfeature until now was to look for the tool description  behavior/misfeature until now was to look for the tool description
# Line 113  Line 2146 
2146  rebuild.  Having sets of the form <base><k>.{bin,boot}.<arch>-unix for  rebuild.  Having sets of the form <base><k>.{bin,boot}.<arch>-unix for
2147  <k>=1,2,... is normally not a good idea when invoking fixpt.  However,  <k>=1,2,... is normally not a good idea when invoking fixpt.  However,
2148  they might be the result of an earlier partial run of fixpt (which  they might be the result of an earlier partial run of fixpt (which
2149  perhaps got accidentially killed).  In this case, fixpt will quickly  perhaps got accidentally killed).  In this case, fixpt will quickly
2150  move through what exists before continuing where it left off earlier,  move through what exists before continuing where it left off earlier,
2151  and, thus, saves a lot of time.  and, thus, saves a lot of time.
2152    
# Line 163  Line 2196 
2196    it from that remote directory.    it from that remote directory.
2197    This should simplify installation further:  For machines that have    This should simplify installation further:  For machines that have
2198    access to the internet, just fetch <version>-config.tgz, unpack it,    access to the internet, just fetch <version>-config.tgz, unpack it,
2199    edit config/targets, and go (run config/install.sh).  The scipt will    edit config/targets, and go (run config/install.sh).  The script will
2200    fetch everything else that it might need all by itself.    fetch everything else that it might need all by itself.
2201    
2202    For CVS users, this mechanism is not relevant for source archives, but    For CVS users, this mechanism is not relevant for source archives, but

Legend:
Removed from v.583  
changed lines
  Added in v.763

root@smlnj-gforge.cs.uchicago.edu
ViewVC Help
Powered by ViewVC 1.0.0