The major improvement is to the speed of register allocation. I've
fixed a couple of major performance problems so register allocation
takes 50% of compilation time even for the largest methods. Register
allocation now appears to take roughly linear time.
Installation instructions are here:
http://wiki.squeak.org/squeak/3945There's still plenty of room to improve compilation time. Every stage
copies the entire intermediate graph to produce the input to the next
stage which is redundant, most stages only change a few places. The
register allocator's liveness analyser still uses Sets to represent
which variables are live rather than bit vectors.
This release can compile cascades, the last missing core language
feature. Exupery still can only compile a handful of the core
primitives, it only compiles #at: for pointer objects. Cascades were
added because they were used more in 3.10, the choice was either
delete 2 system tests or add cascades. I delayed the release to add
cascades.
There's a few bug fixes of old bugs but this release is not noticeably
more reliable than the previous release. It should be a bit more
reliable though, especially when running the new Exupery VM. The new
Exupery VM just has a single bug fix in it.
Here's the benchmarks:
arithmaticLoopBenchmark 414 compiled 94 ratio: 4.404
bytecodeBenchmark 726 compiled 264 ratio: 2.750
sendBenchmark 707 compiled 454 ratio: 1.557
doLoopsBenchmark 388 compiled 398 ratio: 0.975
pointCreation 433 compiled 423 ratio: 1.024
largeExplorers 257 compiled 258 ratio: 0.996
compilerBenchmark 248 compiled 249 ratio: 0.996
Cumulative Time 419 compiled 275 ratio 1.519
ExuperyBenchmarks>>arithmeticLoop 105ms
SmallInteger>>benchmark 362ms
InstructionStream>>interpretExtension:in:for: 6051ms
Average 612.691
The key benchmark for this release is the last one, compiling
interpretExtension:in:for: which now only takes 6 seconds. With
previous version of the compiler it used to take over 2 minutes
to compile.
The change in times in the other benchmarks are mostly due to
me upgrading from an Athlon 64 2.2GHz to a Core 2 3.0GHz. The
register allocator should be slightly more efficient especially
when compiling send heavy code.
Reliability and compile time performance has dominated the
last few releases. Now run time performance and reliability are
the biggest issues. Exupery still can crash after about an hour's
active use depending on what's being done.
Bryce