This is the HISTORY file for the Yale SML/NJ CVS repository. An entry should be made for _every_ commit to the repository. The entries in this file will be used when creating the README for new versions, so keep that in mind when writing the description. The form of an entry should be: Name: Date: Tag: Description: ---------------------------------------------------------------------- Name: Matthias Blume Date: 2000/06/12 11:40:00 Tag: blume-20000612-parmakefix Description: More cleanup after changing the file naming scheme: This time I repaired the parallel make mechanism for CMB.make which I broke earlier. ---------------------------------------------------------------------- Name: Allen Leung Date: 2000/06/09 01:25:00 Tag: leunga-20000609-various None of these things should affect normal SML/NJ operations 1. Peephole improvements provided by Fermin (c--) 2. New annotation DEFUSE for adding extra dependence (moby) 3. New X86 LOCK instructions (moby) 4. New machine description language for reservation tables (scheduling) 5. Fixes to various optimization/analysis modules (branch chaining, dominator trees etc.) 6. I've changed the CM files so that they can work with versions 110.0.6, 110.25 and 110.28 ---------------------------------------------------------------------- Name: Matthias Blume Date: 2000/06/09 12:40:00 Tag: blume-20000609-log Description: - Removed all(?) remaining RCS Log entries from sources. - Fixed bug in ml-yacc and ml-lex sources (use explicit anchors for anchored paths). ---------------------------------------------------------------------- Name: Matthias Blume Date: 2000/06/07 17:00:00 JST Tag: blume-20000607-no-implicit-anchors Description: 1. This update changes the default setting for CM.Control.implicit_anchors from true to false. This means that implicit anchors are no longer permitted by default. I also tried to make sure that nothing else still relies on implicit anchors. (This is the next step on the schedule towards a CM that does not even have the notion of implicit anchors anymore.) 2. More CM manual updates. 3. I managed to track down and fix the pickling bug I mentioned last time. Because of the previously existing workaround, this entails no immediate practical changes. ---------------------------------------------------------------------- Name: Matthias Blume Date: 2000/06/06 11:15:00 JST Tag: blume-20000606-lazierpickle Description: !!!! NEW BOOT FILES !!!! * The main purpose of this update is to make library pickles lazier in order to reduce the initial space penalty for autoloading a library. As a result, it is now possible to have $smlnj/compiler.cm pre-registered. This should take care of the many complaints or inquiries about missing structure Compiler. This required changes to CM's internal data structures and small tweaks to some algorithms. As a neat additional effect, it is no longer necessary (for the sake of lean heap image files) to distinguish between a "minimal" CM and a "full" CM. Now, there is only one CM (i.e., the "full" version: $smlnj/cm.cm aka $smlnj/cm/full.cm), and it is always available at the interactive top level. ($smlnj/cm/minimal.cm is gone.) To make the life of compiler-hackers easier, "makeml" now also pre-registers $smlnj/cmb.cm (aka $smlnj/cmb/current.cm). In other words, after you bootstrap a new sml for the first time, you will not have to autoload $smlnj/cmb.cm again afterwards. (The first time around you will still have to do it, though.) * A second change consists of major updates to the CM manual. There are now several appendices with summary information and also a full specification of the CM description file syntax. * In directory src/system I added the script "allcross". This script invokes sml and cross-compiles the compiler for all supported architectures. (Useful when providing a new set of boot files.) * There seems to be a latent bug in my "lazy pickles" mechanism. I added a small tweak to pickle-util.sml to work around this problem, but it is not a proper fix yet. I will investigate further. (The effect of the bug was an inflation of library pickle size.) * Version number increased to 110.28.1 (to avoid compatibility problems). ---------------------------------------------------------------------- Name: Allen Leung Date: 2000/05/25 17:28 EDT Tag: leunga-20000525-ra Description: Fixed a bug in freezing phase of the register allocator. ---------------------------------------------------------------------- Name: Allen Leung Date: 2000/05/15 22:53 EDT Tag: leunga-20000515-alpha-x86-ra Description: 1. Alpha Slight cleanup. Removed the instruction SGNXL 2. X86 Added the following instructions to the instruction set: ROLx, RORx, BTx, BTSx, BTLx, BTRx, XCHGx, and variants with the LOCK prefix 3. Register Allocation The module ra-rewrite-with-renaming has been improved. These have no effect on SML/NJ. ---------------------------------------------------------------------- Name: Matthias Blume Date: 2000/05/15 16:20:00 JST Tag: blume-20000515-lightrebuild Description: 1. I added an alternative to "-rebuild" to "makeml". The difference is that prior to calling CMB.make' the CM-variable "LIGHT" will be defined. In effect, the command will not build any cross-compiler backends and therefore finish more quickly. The "fixpt" script also takes a "-light" switch to be able to use this new facility while compiling for a fixpoint. 2. I replaced all mentions of anchored paths in group owner specifications with simple relative paths (usually starting with ".."). The rationale is that a library's internal workings should not be compromised by the lack of some anchor. (An anchor is necessary for someone who wants to refer to the library by an anchored path, but it should not be necessary to build the same library in the first place.) 3. I changed the way CM's tool mechanism determines the shell command string used for things like ml-yacc etc. so that it does not break when CM.Control.implicit_anchors is turned off. ---------------------------------------------------------------------- Name: Matthias Blume Date: 2000/05/12 18:20:00 JST Tag: blume-20000512-ml-build Description: Fixed a bug in config/_ml-build that prevented ml-yacc and ml-lex from getting installed properly (by config/install.sh). ---------------------------------------------------------------------- Name: Matthias Blume Date: 2000/05/12 17:30:00 JST Tag: blume-20000512-anchors Description: !!! NEW BOOT FILES !!! This change is in preparation of fading out support for "implicitly anchored path names". I went through all sources and used the explicit (and relatively new) $-notation. See system/README and the CM manual for more info on this. I also modified the anchoring scheme for some things such as "smlnj", "MLRISC", "cm", etc. to take advantage of the fact that explicit anchors are more expressive: anchor name and first arc do not have to coincide. This entails the following user-visible change: You have to write $smlnj/foo/bar instead of smlnj/foo/bar. In particular, when you fire up sml with a command-line argument, say, e.g.: sml '$smlnj/cmb.cm' At the ML toplevel prompt: CM.autoload "$smlnj/cmb.cm"; There is also a new controller in CM.Control that can be used to turn off all remaining support for implicit anchors by saying: CM.autoload "$smlnj/ #set CM.Control.implicit_anchors false; This causes CM to reject implicitly anchored paths. This is (for the time being) less permissive than the "final" version where there will be no more such implicit anchors and relative paths will be just that: relative. The next step (version after next version?) will be to make the default for CM.Control.implicit_anchors false. After the dust has settled, I can then produce the "final" version of this... Note: Since bootstrapping is a bit tricky, I provided new boot files. ---------------------------------------------------------------------- Name: Matthias Blume Date: 2000/05/11 16:30:00 JST Tag: blume-20000511-sources Description: The main change is that I added function CM.sources as a generalized version of the earlier CM.makedepend. This entails the following additional changes: - CM.makedepend has been dropped. - CM manual has been updated. - TOOLS signature and API have been changed. ---------------------------------------------------------------------- Name: Allen Leung Date: 2000/05/10 21:17 EDT Tag: leunga-20000510-moby-c--ssa Description: Various bug fixes and new features for C--, Moby and MLRISC optimizations. None of these affect SML/NJ. 1. Register Allocation a. A new ra spilling module (ra/ra-spill-with-renaming) is implemented. This module tries to remove local (i.e. basic block level) redundancies during spilling. b. A new framework for performing region based register allocation. Not yet entirely functional. 2. X86 a. DefUse for POP was missing the stack pointer [found by Lal] b. Reload for CALL was incorrect in X86Spill [found by John] c. Various fixes in X86Spill so that it can be used correctly for the new spilling module. 3. SSA/IR a. New module ir/dj-dataflow.sml implements elimination based data flow analysis. 4. MLRiscGen a. Fix for gc type annotation 5. MDGen Various fixes for machine description -> ml code translation. For ssa only. ---------------------------------------------------------------------- Name: Allen Leung Date: 2000/05/08 22:17 EDT Tag: leunga-20000508-labexp Description: Fermin has found a few assembly problems with constant expressions generated in LabelExp. Mostly, the problems involve extra parentheses, which choke on dumb assemblers. This is his fix. ---------------------------------------------------------------------- Name: Dave MacQueen Date: 2000/04/09 14:00 EDT Tag: dbm-20000502-Version_110_28 Description: 1. Updated src/compiler/TopLevel/main/version.sml to version 110.28 2. Updated config/version to 110.28 3. Updated config/srcarchiveurl 3. New boot files! ftp://ftp.research.bell-labs.com/dist/smlnj/working/110.28/ ---------------------------------------------------------------------- Name: Matthias Blume Date: 2000/05/01 19:05:00 JST Tag: blume-20000501-noweb Description: A new noweb tool has been added. The existing system is entirely unaffected by this, but some CM users have asked for renewed noweb support. Everything is documented in the CM manual. New (plugin) libraries: noweb-tool.cm nw-ext.cm ---------------------------------------------------------------------- Name: Dave MacQueen Date: 2000/04/30 12:40PM EDT Tag: dbm-20000430-bug_fixes Description: 1. Fix for bug 1498 smlnj/src/system/Basis/Implementation/Unsafe/object.sig smlnj/src/system/Basis/Implementation/Unsafe/object.sml added toRealArray function smlnj/src/compiler/MiscUtil/print/ppobj.sml added check for tag Obj.RealArray to array printing case in ppObj 2. Fix for bug 1510 smlnj/src/compiler/Semant/types/typesutil.sml fixed definition of dummyargs (used by equalTycon) so that dummy args are distinct types ---------------------------------------------------------------------- Name: Matthias Blume Date: 2000/04/30 01:00:00 JST Tag: blume-20000430-versions Description: 1. CM version numbering added. This is an implementation of Lal's proposal for adding version numbers and version checking to .cm files. Lal said that his proposal was just that -- a proposal. For the time being I went ahead and implemented it so that people can comment on it. Everything is completely backward-compatible (except for the stable library format, i.e., new bootfiles!). As usual, see the CM manual for details. 2. An alternative syntax for anchored paths has been implemented. Dave has recently voiced the same concerns that I had when I did this, so there should be some support. My take is that eventually I will let support for the current syntax (where anchors are "implicit") fade out in favor of the new, explicit syntax. In order to be backward-compatible, both old and new syntax are currently supported. Again, see the CM manual for details. 3. Parallel make is trying to be slightly smarter: When the master process finds a "bottleneck", i.e., when there is only one compilation unit that can be compiled and everybody else is waiting on it, then it will simply compile it directly instead of clumsily telling one of the slaves to do it. 4. Support for "unsharing" added. This is necessary in order to be able to have two different versions of the same library running at the same time (e.g., for trying out a new MLRISC while still having the old MLRISC linked into the current compiler, etc.) See the CM manual. 5. Simple "makedepend" functionality added for generating Makefile dependency information. (This is rather crude at the moment. Expect some changes here in the future.) 6. ".fun" added as a recognized suffix for ML files. Also documented explicitly in the manual that the fallback behavior (unknown suffix -> ML file) is not an official feature! 7. Small changes to the pickler for stable libraries. 8. Several internal changes to CM (for cleanup/improvement). !!!! NEW BINFILES !!!! ---------------------------------------------------------------------- Name: Matthias Blume Date: 2000/04/28 17:30:00 JST Tag: blume-20000428-pathconfig Description: 1. I changed config/install.sh to remove duplicate entries from the lib/pathconfig file at the end. Moreover, the final version of lib/pathconfig is sorted alphabetically. The same (sorting) is done in src/system/installml. 2. The config/install.sh script now consistently uses relative pathnames in lib/pathconfig whenever the anchor is in the lib directory. (So far this was true for the libraries that come pre-compiled and bundled as part of the bootfiles but not for libraries that are compiled by the script itself.) ---------------------------------------------------------------------- Name: Matthias Blume Date: 2000/04/26 13:10:00 JST Tag: blume-20000426-fun_suffix Description: Added ".fun" as a recognized file name suffix (for ML code). ---------------------------------------------------------------------- Name: Allen Leung Date: 2000/04/25 17:00:00 EST Tag: leunga-20000425-alpha-ra Description: 1. Alpha PSEUDOARITH was missing in AlphaRewrite. This causes an endless loop in C--. 2. RA Added a flag "ra-dump-size" to print out the size of the flowgraph and the interference graph. ---------------------------------------------------------------------- Name: Dave MacQueen Date: 2000/04/25/ Tag: dbm-20000425-mlyacc_doc_examples Description: Updated mlyacc.tex sections 5 and 7 for SML '97 and CM. Updated all three examples in src/ml-yacc/examples to run under 110.* using CM.make. ---------------------------------------------------------------------- Name: Allen Leung Date: 2000/04/20 23:04:00 EST Tag: leunga-20000420-ssa-c---stuff Description: This update synchronizes my repository with Yale's. Most of these changes, however, do not affect SML/NJ at all (the RA is an exception). 1. Register Allocator a. An improvement in the interference graph construction: Given a copy s <- t no interference edge between s and t is added for this definition of s. b. I've added two new spill heuristic modules that Fermin and I developed (in the new library RA.cm). These are unused in SML/NJ but maybe useful for others (Moby?) 2. X86 a. Various fixes in the backend provided by Fermin [C--] and Lal. 3. Alpha a. Added the BSR instruction and code generation that goes with it [C--] b. Other fixes too numerous to recount provided by Fermin [C--] 4. Regmaps a. The regmaps are not initialized with the identity physical bindings at creation time. This is unneeded. 5. MLRISC Optimizations a. The DJ-Graph module can now compute the iterated dominance frontiers intersects with liveness incrementally in linear time! Woohoo! This is now used in my new SSA construction algorithm. b. THe branch reorganization module is now smarter about linear chains of basic blocks. ---------------------------------------------------------------------- Name: Matthias Blume Date: 2000/04/12 13:52:00 JST Tag: blume_main_v110p27_1 Description: Changed install.sh script to handle archive files without version number and to use "boot.-" instead of "sml.boot.-" for the name of the boot file archive. ---------------------------------------------------------------------- Name: Dave MacQueen Date: 2000/04/09 14:00 EDT Tag: dbm-20000410-Version_110_27 Description: 1. Updated src/compiler/TopLevel/main/version.sml to version 110.27 2. Updated src/config/version to 110.27 3. New boot files! ---------------------------------------------------------------------- Name: Allen Leung Date: 2000/04/09 19:09:00 EST Tag: leunga-20000409-misc Description: 1. Yet another fix for x86 assembly for idivl, imull, mull and friends. 2. Miscellaneous improvements to MLRISC (unused in sml/nj) ---------------------------------------------------------------------- Name: Stefan Date: 2000/04/07 10:00:00 EDT Tag: monnier-20000406-branch-handling Description: Improved handling of branches (mostly those generated from polymorphic equality), removed switchoff and changed the default optimization settings (more cpsopt and less flintopt). ---------------------------------------------------------------------- Name: Allen Leung Date: 2000/04/06 01:30:00 EST Tag: leunga-20000406-peephole-x86-SSA-2 Description: Forgot a few files. ---------------------------------------------------------------------- Name: Allen Leung Date: 2000/04/06 00:36:00 EST Tag: leunga-20000406-peephole-x86-SSA Description: 1. New Peephole code 2. Minor improvement to X86 instruction selection 3. Various fixes to SSA and machine description -> code translator ---------------------------------------------------------------------- Name: Matthias Blume Date: 2000/04/05 12:30:00 JST Tag: blume_main_v110p26p2_3 Description: This update just merges three minor cosmetic updates to CM's sources to get ready for the 110.27 code freeze on Friday. No functionality has changed. ---------------------------------------------------------------------- Name: Allen Leung Date: 2000/04/04 19:39:00 EST Tag: leunga-20000404-x86-asm Description: 1. Fixed a problem in X86 assembly. Things like jmp %eax jmp (%eax) should be output as jmp *%eax jmp *(%eax) 2. Assembly output Added a new flag "asm-indent-copies" (default to false) When this flag is on, parallel copies will be indented an extra level. ---------------------------------------------------------------------- Name: Allen Leung Date: 2000/04/04 03:18:00 EST Tag: leunga-20000404-C--Moby Description: All of these fixes are related to C--, Moby, and my own optimization stuff; so they shouldn't affect SML/NJ. 1. X86 Various fixes related floating point, and extensions. 2. Alpha Some extra patterns related to loads with signed/zero extension provided by Fermin. 3. Assembly When generating assembly, resolve the value of client defined constants, instead of generating symbolic values. This is controlled by the new flag "asm-resolve-constants", which is default to true. 4. Machine Descriptions a. The precedence parser was slightly broken when parsing infixr symbols. b. The type generalizing code had the bound variables reversed, resulting in a problem during arity raising. c. Various fixes in machine descriptions. ---------------------------------------------------------------------- Name: Matthias Blume Date: 2000/04/03 16:05:00 JST Tag: blume_main_v110p26p2_2 Description: I eliminated coreEnv from compInfo. Access to the "Core" structure is now done via the ordinary static environment that is context to each compilation unit. To this end, I arranged that instead of "structure Core" as "structure _Core" is bound in the pervasive environment. Core access is done via _Core (which can never be accidentally rebound because _Core is not a legal surface-syntax symbol). The current solution is much cleaner because the core environment is now simply part of the pervasive environment which is part of every compilation unit's context anyway. In particular, this eliminates all special-case handling that was necessary until now in order to deal with dynamic and symbolic parts of the core environment. Remaining hackery (to bind the "magic" symbol _Core) is localized in the compilation manager's bootstrap compiler (actually: in the "init group" handling). See the comments in src/system/smlnj/init/init.cmi for more details. I also tried to track down all mentions of "Core" (as string argument to Symbol.strSymbol) in the compiler and replaced them with a reference to the new CoreSym.coreSym. Seems cleaner since the actual name appears in one place only. Binfile and bootfile format have not changed, but the switchover from the old "init.cmi" to the new one is a bit tricky, so I supplied new bootfiles anyway. ---------------------------------------------------------------------- Name: Allen Leung Date: 2000/04/02 21:17:00 EST Tag: leunga-20000402-mltree Description: 1. Renamed the constructor CALL in MLTREE by popular demand. 2. Added a bunch of files from my repository. These are currently used by other non-SMLNJ backends. ---------------------------------------------------------------------- Name: Allen Leung Date: 2000/03/31 21:15:00 EST Tag: leunga-20000331-aliasing Description: This update contains a rewritten (and hopefully more correct) module for extracting aliasing information from CPS. To turn on this feature: Compiler.Control.CG.memDisambiguate := true To pretty print the region information with assembly Compiler.Control.MLRISC.getFlag "asm-show-region" := true; To control how many levels of aliasing information are printed, use: Compiler.Control.MLRISC.getInt "points-to-show-level" := n The default of n is 3. ---------------------------------------------------------------------- Name: David MacQueen Date: 2000/03/31 11:15:00 EST Tag: dbm-20000331-runtime_fix Description: This update contains: 1. runtime/c-lib/c-libraries.c includes added in revision 1.2 caused compilation errors on hppa-hpux 2. fix for bug 1556 system/Basis/Implementation/NJ/internal-signals.sml ---------------------------------------------------------------------- Name: Matthias Blume Date: 2000/03/31 18:00:00 JST Tag: blume_main_v110p26p2_1 Description: This update contains: 1. A small change to CM's handling of stable libraries: CM now maintains one "global" modmap that is used for all stable libraries. The use of such a global modmap maximizes sharing and minimizes the need for re-traversing parts of environments during modmap construction. (However, this has minor impact since modmap construction seems to account for just one percent or less of total compile time.) 2. I added a "genmap" phase to the statistics. This is where I got the "one percent" number (see above). 3. CM's new tool parameter mechanism just became _even_ better. :) - The parser understands named parameters and recursive options. - The "make" and "shell" tools use these new features. (This makes it a lot easier to cascade these tools.) - There is a small syntax change: named parameters use a : (