[Haskell-cafe] Compiler backend question
bos at serpentine.com
Tue Jan 1 15:44:23 EST 2008
Peter Verswyvelen wrote:
> Well, I don't know about the licensing, but according to
> http://en.wikipedia.org/wiki/GNU_Compiler_Collection#Front_ends, a new
> cleaner intermediate language was created in 2005 for GCC, which might be
> more "general"?
It's still very difficult to work with GCC from the perspective of an
external tool. Its current IR is still targeted towards the languages
it currently supports and the needs of its back end, so it omits a fair
bit of information that third-party tools would find useful.
> I just wanted to see if it is *possible* to feed just all the C code from
> GHC into a C compiler, and then generate a single executable from that C
> code (including the GHC runtime).
It would be a fair bit of work. My recollection is that GHC "knows"
that it is talking to GCC when you go through -fvia-c, so it uses some
gcc extensions to handle things like register reservation. A few
compilers support some of those gcc extensions, so you might have some
level of success with those. The Intel and PathScale compilers do, for
example, and LLVM's clang front end has some level of gcc compatibility
In the case of the PathScale compiler (which I used to work on), when
invoked in whole-program mode it emits files that look like regular .o
files, but are in fact just the serialised IR for a compilation unit.
It's also open source, so it would be easier to tinker with than the
> Actually this LTCG thingy was first supported by the
> Intel compiler I believe.
No, that kind of whole-program optimisation long predates its inclusion
in the Intel compiler. The earliest I saw it in deployment was in MIPS
compilers circa 1992, and I don't recall it being a new idea at the time.
Anyway, the point about GCC being an unsuitable vehicle for this sort of
thing remains. You'd do better looking at LLVM, for which I've lately
been working on nice Haskell bindings:
darcs get http://darcs.serpentine.com/llvm
More information about the Haskell-Cafe