Using GHC API to generate STG
Mark Wassell
mwassell at bigpond.net.au
Tue Apr 15 06:27:28 EDT 2008
Hello,
I am looking at how GHC generates STG and I am finding with a very
simple piece of Haskell my usage of the API is not generating as much
STG as I see when using -dump-stg option. In particular it isn't
generating a binding for the nullary constructor LNull (I hope that's
the correct terminology)
The code is
module Ex2 where
data List a = LCon a (List a) | LNull -- deriving Show
main :: List Int
main = LCon 1 LNull
Using the API I get
[sat_s1pdQ = NO_CCS GHC.Base.I#! [1];
Ex2.main = NO_CCS Ex2.LCon! [sat_s1pdQ Ex2.LNull];
main = \u srt:SRT:[(s1pdS, Ex2.main)] [] Ex2.main;]
with -ddump-stg I get
a_r5Y = NO_CCS GHC.Base.I#! [1];
SRT(a_r5Y): []
Ex2.main = NO_CCS Ex2.LCon! [a_r5Y Ex2.LNull];
SRT(Ex2.main): []
Ex2.LCon = \r [eta_s67 eta_s68] Ex2.LCon [eta_s67 eta_s68];
SRT(Ex2.LCon): []
Ex2.LNull = NO_CCS Ex2.LNull! []; <---- This is missing
SRT(Ex2.LNull): []
(in particular the Ex2.LNull is missing from the API STG)
My thrown together API code is
session <- GHC.newSession $ Just path
(dflags,_) <- GHC.getSessionDynFlags session >>=
Packages.initPackages
GHC.setSessionDynFlags session dflags {GHC.hscTarget=GHC.HscAsm}
core <- GHC.compileToCore session fp
case core of
Just core' -> do
core'' <- corePrepPgm dflags core' []
stg <- coreToStg
(PackageConfig.stringToPackageId "Ex2") core''
putStrLn $ (show $ (ppr stg)
defaultDumpStyle)
Nothing -> return ()
Mark
More information about the Glasgow-haskell-users
mailing list