More cmm-notes
authorSimon Peyton Jones <simonpj@microsoft.com>
Mon, 22 Aug 2011 07:09:23 +0000 (08:09 +0100)
committerSimon Peyton Jones <simonpj@microsoft.com>
Mon, 22 Aug 2011 07:09:23 +0000 (08:09 +0100)
compiler/cmm/cmm-notes

index f35e72d..5cfd5f2 100644 (file)
@@ -1,3 +1,20 @@
+More notes (Aug 11)\r
+~~~~~~~~~~~~~~~~~~\r
+* CmmInfo.cmmToRawCmm expands info tables to their representations\r
+  (needed for .cmm files as well as the code generators)\r
+\r
+* Why is FCode a lazy monad?  That makes it inefficient.\r
+  We want laziness to get code out one procedure at a time,\r
+  but not at the instruction level.\r
+\r
+Things we did\r
+  * Remove CmmCvt.graphToZgraph (Conversion from old to new Cmm reps)\r
+  * Remove HscMain.optionallyConvertAndOrCPS (converted old Cmm to\r
+    new, ran pipeline, and converted back)\r
+  * Remove CmmDecl. Put its types in Cmm.  Import Cmm into OldCmm\r
+    so it can get those types.\r
+\r
+\r
 More notes (June 11)\r
 ~~~~~~~~~~~~~~~~~~~~\r
 * Possible refactoring: Nuke AGraph in favour of \r
@@ -235,15 +252,13 @@ Things to do:
 ----------------------------------------------------\r
 \r
 -------- Testing stuff ------------\r
-HscMain.optionallyConvertAndOrCPS\r
-        testCmmConversion\r
-DynFlags:  -fconvert-to-zipper-and-back, -frun-cpsz\r
+DynFlags: -frun-cpsz\r
 \r
 -------- Moribund stuff ------------\r
 OldCmm.hs      Definition of flowgraph of old representation\r
+               Imports some data types from (new) Cmm\r
 OldCmmUtil.hs  Utilites that operates mostly on on CmmStmt\r
 OldPprCmm.hs   Pretty print for CmmStmt, GenBasicBlock and ListGraph\r
-CmmCvt.hs      Conversion between old and new Cmm reps\r
 CmmOpt.hs      Hopefully-redundant optimiser\r
 \r
 -------- Stuff to keep ------------\r
@@ -264,20 +279,19 @@ CmmInfo.hs                Defn of InfoTables, and conversion to exact byte layou
 \r
 ---------- Cmm data types --------------\r
 Cmm.hs              Cmm instantiations of dataflow graph framework\r
-MkGraph.hs          Interface for building Cmm for codeGen/Stg*.hs modules\r
+  CmmExpr.hs        Type of Cmm expression\r
+  CmmType.hs        Type of Cmm types and their widths\r
+  CmmMachOp.hs      MachOp type and accompanying utilities\r
+\r
+PprCmm.hs          Pretty printer for Cmm\r
+  PprCmmExpr.hs     Pretty printer for CmmExpr\r
 \r
-CmmDecl.hs          Shared Cmm types of both representations\r
-CmmExpr.hs          Type of Cmm expression\r
-CmmType.hs          Type of Cmm types and their widths\r
-CmmMachOp.hs        MachOp type and accompanying utilities\r
+MkGraph.hs          Interface for building Cmm for codeGen/Stg*.hs modules\r
 \r
 CmmUtils.hs\r
 CmmLint.hs\r
 \r
 PprC.hs                    Pretty print Cmm in C syntax\r
-PprCmm.hs          Pretty printer for CmmGraph.\r
-PprCmmDecl.hs       Pretty printer for common Cmm types.\r
-PprCmmExpr.hs       Pretty printer for Cmm expressions.\r
 \r
 CLabel.hs           CLabel\r
 BlockId.hs          BlockId, BlockEnv, BlockSet\r
@@ -351,9 +365,17 @@ cpsTop:
        Manifest the stack pointer\r
 \r
    * Split into separate procedures\r
+\r
       - CmmProcPoint.procPointAnalysis\r
-        Given set of proc points, which blocks are reachable from each\r
-        Claim: too few proc-points => code duplication, but program still works??\r
+        Given set of proc points (computed earlier by\r
+           CmmProcPoint.minimalProcPointSet) find which blocks \r
+           are reachable from each\r
+       Each block should be reachable from *one* proc point, so \r
+         the blocks reachable from P are the internal nodes of \r
+         the final procedure P\r
+        NB: if we the earlier analysis had produced too few proc-points \r
+            we should nevertheless be fine by code duplication; but\r
+           that is not implemented\r
 \r
       - CmmProcPoint.splitAtProcPoints\r
        Using this info, split into separate procedures\r