Add comments to the inlinetoplevel transformation.
authorMatthijs Kooijman <matthijs@stdin.nl>
Tue, 1 Sep 2009 19:26:24 +0000 (21:26 +0200)
committerMatthijs Kooijman <matthijs@stdin.nl>
Tue, 1 Sep 2009 19:26:24 +0000 (21:26 +0200)
cλash/CLasH/Normalize.hs

index 8fd4bdd00f4dfff1f348224ad660f5866e63ca0d..40eab93c3787e27d9b599d939aeccd8e77264352 100644 (file)
@@ -321,6 +321,26 @@ letmergetop = everywhere ("letmerge", letmerge)
 inlinenonreptop :: Transform
 inlinenonreptop = everywhere ("inlinenonrep", inlinebind ((Monad.liftM not) . isRepr . snd))
 
+--------------------------------
+-- Top level function inlining
+--------------------------------
+-- This transformation inlines top level bindings that have been generated by
+-- the compiler and are really simple. Really simple currently means that the
+-- normalized form only contains a single binding, which catches most of the
+-- cases where a top level function is created that simply calls a type class
+-- method with a type and dictionary argument, e.g.
+--   fromInteger = GHC.Num.fromInteger (SizedWord D8) $dNum
+-- which is later called using simply
+--   fromInteger (smallInteger 10)
+-- By inlining such calls to simple, compiler generated functions, we prevent
+-- huge amounts of trivial components in the VHDL output, which the user never
+-- wanted. We never inline user-defined functions, since we want to preserve
+-- all structure defined by the user. Currently this includes all functions
+-- that were created by funextract, since we would get loops otherwise.
+--
+-- Note that "defined by the compiler" isn't completely watertight, since GHC
+-- doesn't seem to set all those names as "system names", we apply some
+-- guessing here.
 inlinetoplevel, inlinetopleveltop :: Transform
 -- Any system name is candidate for inlining. Never inline user-defined
 -- functions, to preserve structure.