X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=compiler%2Fcmm%2FREADME;fp=compiler%2Fcmm%2FREADME;h=0000000000000000000000000000000000000000;hb=889c084e943779e76d19f2ef5e970ff655f511eb;hp=fd87e88748d0f88c77e6c8e2eebb220de0b2f66a;hpb=f1a90f54590e5a7a32a9c3ef2950740922b1f425;p=ghc-hetmet.git diff --git a/compiler/cmm/README b/compiler/cmm/README deleted file mode 100644 index fd87e88..0000000 --- a/compiler/cmm/README +++ /dev/null @@ -1,94 +0,0 @@ -Sketch of the new arrivals: - - MkZipCfg Constructor functions for control-flow graphs. - Not understandable in its entirety without reference - to ZipCfg, but nevertheless a worthy starting point, - as it is a good deal simpler than full ZipCfg. - MkZipCfg is polymorphic in the types of middle and last - nodes. - - ZipCfg Describes a zipper-like representation for true basic-block - control-flow graphs. A block has a single entry point, - which is a always a label, followed by zero or mode 'middle - nodes', each of which represents an uninterruptible - single-entry, single-exit computation, then finally a 'last - node', which may have zero or more successors. A special - 'exit node' is used for splicing together graphs. - - In addition to three representations of flow graphs, the - module provides a surfeit of functions for observing and - modifying graphs and related data: - - Block IDs, sets and environments thereof - - supply of fresh block IDS (as String -> UniqSM BlockId) - - myriad functions for splicing graphs - - postorder_dfs layout of blocks - - folding, mapping, and translation functions - - ZipCFG is polymorphic in the type of middle and last nodes. - - CmmExpr Code for C-- expressions, which is shared among old and new - representations of flow graphs. Of primary interest is the - type class UserOfLocalRegs and its method foldRegsUsed, - which is sufficiently overloaded to be used against - expressions, statements, formals, hinted formals, and so - on. This overloading greatly clarifies the computation of - liveness as well as some other analyses. - - ZipCfgCmm Types to instantiate ZipCfg for C--: middle and last nodes, - and a bunch of abbreviations of types in ZipCfg and Cmm. - Also provides suitable constructor functions for building - graphs from Cmm statements. - - CmmLiveZ A good example of a very simple dataflow analysis. It - computes the set of live local registers at each point. - - DFMonad Support for dataflow analysis and dataflow-based - transformation. This module needs work. Includes - DataflowLattice - for tracking dataflow facts (good) - DFM - monad for iterative dataflow analysis and rewriting (OK) - DFTx - monad to track Whalley/Davidson transactions (ugly) - type class DataflowAnalysis - operations common to DFA, DFM - Some dodgy bits are - subAnalysis, which may not be right - - ZipDataflow Iteratively solve forward and backward dataflow problems over - flow graphs. Polymorphic in the type of graph and in the - lattice of dataflow facts. Supports the incremental - rewriting technique described by Lerner, Grove, and Chambers - in POPL 2002. The code is a mess and is still being - sorted out. - - - CmmTx A simple monad for tracking when a transformation has - occurred (something has changed). - - CmmCvt Converts between Cmm and ZipCfgCmm representations. - - CmmProcPointZ One module that performs three analyses and - transformations: - - 1. Using Michael Adams's iterative algorithm, computes a - minimal set of proc points that enable code to be - generated without copying any basic blocks. - - 2. Assigns a protocol to each proc point. The assigner - is rigged to enable the 'Adams optimization' whereby - we attempt to eliminate return continuations by - making procedures return directly to join points. - Arguably this could be done by a separate rewriting - pass to perform earlier. - - 3. Insert CopyIn and CopyOut nodes where needed - according to the protocols. - - CmmSpillReload Inserts spills and reloads to establish the invariant that - at a safe call, there are no live variables in registers. - - CmmCPSZ The CPS transformation so far. - - CmmContFlowOpt Branch-chain elimination and elimination of unreachable code. - - CmmOpt Changed optimization to use 'foldRegsUsed'; eliminated - significant duplication of code. - - PprCmmZ Prettyprinting functions related to ZipCfg and ZipCfgCmm