5 ms·
GHC has an llvm backend. If you read the blog post, you'll see Neil mentions " tried the LLVM backend, but it generated significantly worse assembly code https
by carterschonwald 13y ago
GHC has an llvm backend.
If you read the blog post, you'll see Neil mentions " tried the LLVM backend, but it generated significantly worse assembly code https://github.com/ndmitchell/blogs/blob/master/inner-loop/InnerLoop.s" https://github.com/ndmitchell/blogs/blob/master/inner-loop/I...
@tenslsi : theres certainly room for improving llvm, the ghc native code gen, and pretty much any compiler generally (ghc is no different). I'm actively involved in GHC dev, and i've somewhat committed to spending some volunteer time this year improving the NCG and various backend optimization tooling.
anyways, the reddit discussion of the blog post is also pretty interesting
- axman6 13y ago> ... tried the LLVM backend, but it generated significantly worse assembly code. It's worth noting the LLVM version Neil tried was 2.8, from Dec 2010. LLVM has come a long way since then and I'd be surprised to see if produce such horrible code. I'm hoping Neil will do an updated post using LLVM 3.4 released last week.
- sanxiyn 13y agoMy understanding is that the main problem is translating from Haskell to LLVM IR is a lossy process, not the difference between LLVM 2.8 and LLVM 3.4. This blog post demonstrates one such issue: http://blog.omega-prime.co.uk/?p=135 http://blog.omega-prime.co.uk/?p=135 Quote: "In particular, LLVM conservatively assumes that GHC's stack and the heap may alias". LLVM has to assume that short of Haskell-specific analysis, so updating to LLVM 3.4 won't help with such issues.
- carterschonwald 13y agonot quite, I think the issue is that llvm doesn't understand ghc's stack, so which I guess is the same issue :)