Skip to content

MIR version 1.0.0

Latest
Compare
Choose a tag to compare
@vnmakarov vnmakarov released this 27 May 12:25
· 31 commits to master since this release

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 the c-benchmarks directory.
  • 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.