
On 04 July 2005 12:44, Peter A Jonsson wrote:
dons@cse.unsw.edu.au (Donald Bruce Stewart) writes:
pj:
I would like to use nativeCodeGen outside of GHC to generate code from an IR. The IR would be produced by a third party program, not the GHC frontend.
Looking at CVS HEAD I can see that GHC.hs exports plenty of things (for the GHC API I presume), but I can't find anything that lets me input some sort of IR and have ASM in return. Am I missing it somewhere or is there no way to input IR and get ASM in return? If there isn't, is such a feature planned/wanted?
If such a feature isn't planned, I would appreciate any ideas on how to to accomplish the same thing. I have no problems with having a build tree of GHC laying around if that makes things easier. It would be a nice bonus if it made my maintenance burden low.
You could use External Core with GHC, couldn't you?
Thanks for the quick answer!
Maybe it's my lack of understanding of the inner workings of GHC but reading "An External Representation for the GHC Core Language" I get the impression that the dumping of Core Language is basically targeted at researchers writing their own optimization passes or backends for Haskell/GHC so they can use the existing infrastructure of GHC. My request is the other way around - I want to throw out the frontend but use* ("low-level") parts of the backend of GHC.
The Core Language seems to be translated into STG-machine code, which according to my understanding is an abstract machine desinged to support non-strict higher-order functional languages. I was hoping that the laziness was in the STG-syntax, not in Cmm. Looking at output of -ddump-cmm it resembles C-- quite closely (also implied by comments in PprCmm.hs), which makes me believe that is the "correct" level of abstraction for me.
*) The reasons are two-fold, one is that it is written in Haskell, the other is that it generates code for more than one architecture today.
If the language you want to generate code for is at the level of C--, then you could indeed use GHC's native code generator. There isn't an interface to it exposed by the GHC API, but you can use the interfaces directly: the AsmCodeGen module is the top-level of the native code generator, and basically takes Cmm (defined in module Cmm) and produces assembly code. However, if you want to do this, I wonder whether you would be better off just using the real C-- compiler. Cheers, Simon

If the language you want to generate code for is at the level of C--, then you could indeed use GHC's native code generator. There isn't an interface to it exposed by the GHC API, but you can use the interfaces directly: the AsmCodeGen module is the top-level of the native code generator, and basically takes Cmm (defined in module Cmm) and produces assembly code.
However, if you want to do this, I wonder whether you would be better off just using the real C-- compiler.
Ok, I gave it a spin, that was "interesting". Things I wrote down
while looking at it that might be of interest to others:
I tried to build with gcc 3.4.1 and it didn't work very well. Found a
mail from November 2004 (
participants (2)
-
Peter A Jonsson
-
Simon Marlow