Changes between Version 9 and Version 10 of Status/Nov07


Ignore:
Timestamp:
Dec 4, 2007 2:28:02 PM (7 years ago)
Author:
simonmar
Comment:

back end

Legend:

Unmodified
Added
Removed
Modified
  • Status/Nov07

    v9 v10  
    132132== Back end stuff == 
    133133 
    134  * Ben Lippmeir spent his internship building a graph-colouring, 
    135   coalescing register allocator for GHC's native code generator. 
    136         SIMON SAY MORE 
     134GHC's back end code generator has long been known to generate poor code, particularly  
     135for tight loops of the kind that are cropping up more and more in highly optimised 
     136Haskell code.  So in typical GHC style, rather than patch the immediate problem, we're redesigning 
     137the entire back end. 
     138 
     139What we want to do: 
     140 
     141 * split the STG-to-C-- code generator (`codeGen`) into two: one pass 
     142   generating C-- with functions and calls, and a second pass ("CPS") to  
     143   manifest the stack and calling/return conventions. 
     144 
     145 * Redesign the calling and return conventions, so that we can use more 
     146   registers for parameter passing (this will entail decommissioning the 
     147   via-C code generator, but the native code generator will outperform it). 
     148 
     149 * Give the back end more opportunity to do low-level transformation and 
     150   optimisation, e.g. by exposing loops at the C-- level. 
     151 
     152 * Implement more optimisations over C--. 
     153 
     154 * Plug in a better register allocator. 
     155 
     156What we've done so far: 
    137157 
    138158 * Michael Adams came for an internship and built a CPS converter 
     
    143163  dataflow framework so that you can write new dataflow analyses in  
    144164  30 mins.   
     165 
     166 * Ben Lippmeir spent his internship building a graph-colouring, 
     167  coalescing register allocator for GHC's native code generator. 
    145168 
    146169As a result, we now have *lots* of new code.  Some of it is working;