Changes between Version 15 and Version 16 of Status/Oct12

Nov 1, 2012 10:47:46 AM (3 years ago)



  • Status/Oct12

    v15 v16  
    3434 * dynlibs-by-default
    36  * new codegen by default
     36 * '''The new code generator.''' Several years since this project was started, the new code generator is finally working  [14], and is now switched on by default in `master`.  It will be in GHC 7.8.1.  From a user's perspective there should be very little difference, though some programs will be faster.
     38 There are three important improvements in the generated code.  One is that `let-no-escape` functions are now compiled much more efficiently: a recursive `let-no-escape` now turns into a real loop in C--.  The second improvement is that global registers (R1, R2, etc.) are now available for the register allocator to use within a function, provided they aren't in use for argument passing.  This means that there are more registers available for complex code sequences.  The third improvement is that we have a new sinking pass that replaces the old "mini-inliner" from the native code generator, and is capable of optimisations that the old pass couldn't do.
     40 Hand-written C-- code can now be written in a higher-level style with real function calls, and most of the hand-written C-- code in the RTS has been converted into the new style.  High-level C-- does not mention global registers such as R1 explicitly, nor does it manipulate the stack; all this is handled by the C-- code generator in GHC.  This is more robust and simpler, and means that we no longer need a special calling-convention for primops - they now use the same calling convention as ordinary Haskell functions.
     42 We're interested in hearing about both performance improvements and regressions due to the new code generator.
    3844 * '''Improved floating point register allocation.''' On x86-64 there are now six machine registers available for any mixture of floating-point types. Previously a maximum of four values of type Float and two values of type Double could simultaneously be kept in machine registers.
    5561[12] Matching on type nats: [] [[BR]]
    5662[13] Singletons and kinds: [] [[BR]]
     63[14] The new codegen is nearly ready to go live [] [[BR]]