LLVM back end

Simon Marlow simonmarhaskell at gmail.com
Tue Dec 19 08:13:27 EST 2006


Michael T. Richter wrote:
> I've been eyeing LLVM[1 <http://llvm.org>] as interesting technology -- 
> brief executive summary: a virtual machine suited as the back end of 
> compiler output with optimised native code then coming from it as either 
> JIT-based execution of the LLVM bytecode or as a further compilation 
> step -- and couldn't help but immediately think of the possibility of 
> one of the Haskell compiler projects providing an LLVM code generator.  
> I think this would help in several areas:
> 
>     * it could make porting the compiler to other architectures --
>       including oddball ones that would be too small to otherwise
>       support -- easier;
>     * it could help remove the nigh-ubiquitous reliance upon GCC as a
>       back-end (while I think that GCC is a pretty good piece of
>       software, I'm not sure it's really suited to its current role as
>       the "do-everything" back end);
>     * it could leverage some of the really interesting work that's going
>       on in optimisation technology by letting one VM's optimiser do the
>       work for any number of languages;
>     * it could improve interaction between source code written in
>       multiple languages. 
> 
> Is this me opening up a Pandora's Box of ignorance here?  Or is LLVM 
> potentially interesting?  (And were someone motivated into perhaps 
> trying to make an LLVM back-end, where would one start to poke around 
> in, say, the GHC codebase to even begin to implement this?  And how 
> insane would they be driven by the process?)

Apologies for the slow reply.  Actually I think this is a pretty cool idea (with 
a disclaimer that I know very nearly nothing about LLVM).  Provided there are no 
serious gotchas, what you need to do is write a new backend for GHC that 
translates Cmm to LLVM.  This should be pretty straightforward: for example, the 
Cmm->C code generator is only 1000 lines of Haskell:

   http://darcs.haskell.org/ghc/compiler/cmm/PprC.hs

I hope LLVM lets you put data next to code, which is what GHC needs for its info 
tables.  Also I hope it lets you fix global registers.

Cheers,
	Simon


More information about the Glasgow-haskell-users mailing list