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