new RPMs
Stephen Weeks
MLton@sourcelight.com
Tue, 24 Jul 2001 23:08:33 -0700
> What were the other bugs that were fixed?
Here's the latest CHANGES.
* 2000-7-21
- Added common-supexpression elimination CPS optimization.
* 2000-7-20
- Bug fix to x86 codegen. The commuteBinALMD peephole optimization would
rewrite mov 2,Y; add Y,Y as mov Y,Y; add 2,Y. Now the appropriate
interference checks are made.
- Added intraprocedural unused argument removal.
- Added intraprocedural flattener. This avoids some stupid tuple
allocations in loops. Decent speedup on a few benchmarks
(count-graphs, psdes-random, wc-scanStream) and no noticeable
slowdowns.
- Added -keep dot flag.
* 2000-7-17
- Modified grammar to properly handle val rec. There were several problems.
o MLton had accepted "val rec 'a ..." instead of "val 'a rec ..."
o MLton had not accepted "val x = 13 and rec f = fn () => ()"
o MLton had not accepted "val rec rec f = fn () => ()"
o MLton had not accepted "val rec f = fn () => () and rec g = fn () => ()"
* 2000-7-16
- Workaround for Linux kernel bug that can cause getrusage to return a wrong
system time value (low by one second). See fixedGetrusage in gc.c.
- Bug fix to x86 codegen. The register allocator could get confused when
doing comparisons of floating point numbers and use the wrong operand.
The bug seems to have never been detected because it only happens when both
of the operands are already on the floating point stack, which is rare,
since one is almost always in memory since we don't carry floating point
values in the stack across basic blocks.
- Added production to the grammar on page 58 of the Definition that had been
missing from MLton since day one.
program ::= exp ; <program>
Also updated docs to reflect change.
- Modified grammar to accept the empty program.
- Added -type-check expert flag to turn on type checking in ILs.
* 2000-7-15
- Bug fix to the algebraic simplifier. It had been rewriting
Word32.andb (w, 0wxFF) to w
instead of Word32.andb (w, 0wxFFFFFFFF) to w.
* 2000-7-13
- Improved CPS shrinker so that if-tests where the then and else branch jump
to the same label is turned into a direct jump.
- Improved CPS shrinker (Prim.apply) to handle constructors
A = A --> true
A = B --> false
A x = B y --> false
- Rewrote a lot of loops in the basis library to use inequalities instead of
equality for the loop termination test so that the (forthcoming) overflow
detection elimination will work on the loop index variable.
* 2001-7-11
- Fixed minor bugs in Array2.{array,tabulate}, Substring.{slice} that caused
the Overflow exception to be raised instead of Size or Subscript
- Fixed bug in Pack32Big.update that caused the wrong location to be updated.
- Fixed several bugs in Pack32{Big,Little}.{subArr,subVec,update} that caused
Overflow to be raised instead of Subscript. Also, improved the
implementation so that bounds checking only occurs once per call (instead of
four times, which was sometimes happening.
- Fixed bugs in Time.{toMilliseconds,toMicroseconds} that could cause
a spurious Overflow exception.
- Fixed bugs in Time.{fromMilliseconds,fromMicroseconds} that could cause
a spurious Time exception.
- Improved Pack32.sub* by reordering the orbs.
- Improved {Int,IntInf}.mod to increase chances of constant folding.
- Switched many uses of +, -, * in basis library to the non-overflow checked
versions. Modules changed were: Array, Array2, Byte, Char, Int, IntInf,
List, Pack32{Big,Little}, Util, String, StringCvt, Substring, TextIO, Time,
Vector.
- Added regression tests for Array2, Int (overflow checking), Pack32,
Substring, Time.
- Changed CPS output so that it includes a dot graph for each CPS function.
* 2001-7-9
- Change OS.Process.exit so that it raises an exception if the exit status
is not in [0, 256).
- Added MLton.Rlimit to provide access to getrlimit and setrlimit.