OCaml Forge

File Release Notes and Changelog

Release Name: HLVM beta 0.4

Release Notes

More reliable and faster.

Change Log

Sat Mar 21 17:42:31 GMT 2009 Jon Harrop <jon@ffconsultancy.com> * Memoized constant string literals. * Fixed perf bug where all bound variables were being pushed onto the shadow stack at the beginning of every function body instead of just the function's arguments. * Optimized array visit function to skip arrays that do not contain any reference types. * Implemented standalone compilation. All JIT executed functions are called from a "main" function in the output aout.bc which the ./opt.sh script compiles through LLVM's optimization passes into aoutopt. This gives us some idea of how much performance would be gained by applying LLVM's optimization passes if we had bindings for them. * Moved timing code from the compiler into the generated code so our standalone executable can be used for benchmarking. Fri Mar 13 02:42:33 GMT 2009 Jon Harrop <jon@ffconsultancy.com> * Switched from LLVM's malloc intrinsic to helper functions for alloc (using calloc in order to initialize references to NULL) and free. * Optimized the GC to use a hash table instead of linear search, improving performance by up to 100x on our benchmarks. * Avoided resetting the shadow stack at the ends of functions that do not push any roots onto it. Wed Mar 11 21:05:44 GMT 2009 Jon Harrop <jon@ffconsultancy.com> * Chose to put new LLVM bindings into the HLVM project instead of patching LLVM. We now have bindings for BuildExtractValue, BuildInsertValue and for enabling tail call optimization globally. Wed Mar 11 04:01:45 GMT 2009 Jon Harrop <jon@ffconsultancy.com> * Tidied the run-time type code to reuse HLVM's own structs. * Fixed a perf bug where reading a reference type from a bound variable was pushing it onto the shadow stack. Sieve is now 70% faster. * Fixed a bug in init_type which was invoking a fastcc function when it should have been using the C calling convention. * Added dummy arguments to all argumentless invocations to work around a bug in LLVM's OCaml bindings, which calls malloc for zero bytes (which is illegal) if there are zero arguments.