On 12/12/12 17:37, Johan Tibell wrote:
On Wed, Dec 12, 2012 at 4:35 AM, Simon Marlow <marlo...@gmail.com> wrote:
On 11/12/12 21:33, Johan Tibell wrote:
I'd definitely be interesting in understanding why as it, like you
say, makes it harder for LLVM to understand what our code does and
optimize it well.


The example that Simon gave is a good illustration:

<snip>

My question was more: why do we CPS transform? I guess it's because we
manage our own stack?

Right. In fact, LLVM does its own CPS transform (but doesn't call it that) when the code contains non-tail function calls. We give LLVM code with tail-calls only.

The choice about whether to manage our own stack is *very* deep, and has ramifications all over the system. Changing it would mean a completely new backend and replacing a lot of the RTS, that is if you could find a good scheme for tracking pointers in the stack - I'm not sure LLVM is up to the job without more work. It could probably be done, but it's a huge undertaking and it's not at all clear that you could do any better than GHC currently does. We generate very good code from idiomatic Haskell; where we fall down is in heavy numerical and loopy code, where LLVM does a much better job.

Cheers,
        Simon


_______________________________________________
Cvs-ghc mailing list
Cvs-ghc@haskell.org
http://www.haskell.org/mailman/listinfo/cvs-ghc

Reply via email to