On 09/01/14 20:08, George Colpitts wrote:
Does LLVM have the same limitation that its register allocator does not
reuse spill slots for variables that have disjoint live ranges? If not,
could the library be compiled with llvm?

Let me reiterate: the SHA-1 library compiles just fine, provided the -fregs-graph flag is not used with GHC 7.8.1. As far as I know it compiles when using the LLVM backend too, but you don't have to use LLVM: the NCG works fine.

Cheers,
Simon



On Thu, Jan 9, 2014 at 3:17 PM, Adam Wick <[email protected]
<mailto:[email protected]>> wrote:

    On Jan 8, 2014, at 2:42 AM, Simon Marlow <[email protected]
    <mailto:[email protected]>> wrote:
    Neither of the register allocators reuse spill slots for variables
    that have disjoint live ranges, so the fact that we ran out of
    spill slots is not necessarily indicative of terrible code (but I
    agree that it's a strong hint).

    That’s the problem with SHA, then. The implementation (and the spec,
    really) is essentially a long combination of the form:

    let x_n5 = small_computation x_n1 x_n2 x_n3 x_n4
          x_n6 = small_computation x_n2 x_n3 x_n4 x_n5
          …

    Which has ~70 entries. The actual number of live variables alive at
    any time should be relatively small, but if slots aren’t getting
    reused there’s going to be some significant blowup. (To be honest, I
    had figured — and thought I had validated — that doing it this way
    would give the compiler the best chance at generating optimal code,
    but it appears I merely set myself up to hit this limitation several
    years later.)


    - Adam



    _______________________________________________
    ghc-devs mailing list
    [email protected] <mailto:[email protected]>
    http://www.haskell.org/mailman/listinfo/ghc-devs



_______________________________________________
ghc-devs mailing list
[email protected]
http://www.haskell.org/mailman/listinfo/ghc-devs

Reply via email to