I am glad to announce the release of MIR version 1.0.0.
This release is based on the bbv
branch, which has been in use by
some people for some time. Branch bbv
became master
. The
previous branch master
became v0_master
.
Here are the major changes compared to the previous
version, 0.2.0:
- Major rewriting of the optimization pipeline of the MIR-generator:
- This results in better-generated code, which yields a 14% average performance improvement and
a 16% geometric mean improvement on a set of benchmarks found in thec-benchmarks
directory.
- This results in better-generated code, which yields a 14% average performance improvement and
- Introduction of experimental support for lazy basic block versioning, which can be utilized
to implement a better JIT for dynamic programming languages:- Machine code for basic blocks can now be generated lazily upon their first execution.
- Lazy basic block generation assumes lazy generation of functions.
- New features on the MIR and C level:
- MIR instructions to take and use address of MIR variables to simplify code generation of MIR code
- MIR and C variables bound to machine registers.
- Implementation of a new C builtin
__builtin_expect
- MIR instructions and corresponding builtins in C related to integer overflow.
- Indirect jumps in MIR and labels as values in C.
- MIR instructions and corresponding builtins in C to implement call ABI based on jumps.
- Properties for basic block versioning.
- Removed features:
- The PPC64BE target has been removed as the last big-endian CPU (power7) became too old.
MIR now supports only PPC64LE (little-endian). - Parallel generation of functions has been removed as it does not integrate well with lazy function
and bbv code generation. Lazy function generation and lazy basic block generation work
at practically the same speed.- Users can implement parallel generation using different contexts if desired.
- This also means that the MIR-generator API has changed slightly,
hence the change in the MIR API version was upgraded from 0 to 1. - The
c2m
driver still supports parallel parsing of different C files.
- The PPC64BE target has been removed as the last big-endian CPU (power7) became too old.