Changes between Version 28 and Version 29 of Commentary/Compiler/CodeGen
- Feb 1, 2014 6:47:55 PM (14 months ago)
v28 v29 36 36 * Shortcuting targets of branches and calls (see Note [What is shortcutting]) 37 37 38 38 If a block becomes unreachable because of shortcutting it is eliminated from the graph. However, '''it is theoretically possible that this pass will produce unreachable blocks'''. The reason is the label renaming pass performed after block concatenation has been completed. 39 39 40 40 This pass might be optionally called for the second time at the end of the pipeline. 41 41 42 42 * '''Common Block Elimination''', implemented in `CmmCommonBlockElim`, eliminates blocks that are identical (except for the label on their first node). Since this pass traverses blocks in depth-first order any unreachable blocks introduced by Control Flow Optimisations are eliminated. '''This pass is optional.''' … … 59 59 * discards dead assignments 60 60 61 61 '''This pass is optional.''' It currently does not eliminate dead code in loops (#8327) and has some other minor deficiencies (eg. #8336). 62 62 63 * '''CAF analysis''', implemented in `CmmBuildInfoTables`. Computed CAF information is returned from `cmmPipeline` and used to create Static Reference Tables (SRT). See [wiki:Commentary/Rts/Storage/GC/CAFs here] for some more detail on CAFs and SRTs. 63 * '''CAF analysis''', implemented in `CmmBuildInfoTables`. Computed CAF information is returned from `cmmPipeline` and used to create Static Reference Tables (SRT). See [wiki:Commentary/Rts/Storage/GC/CAFs here] for some more detail on CAFs and SRTs. 64 64 65 65 Here the pipeline splits into two alternative flows depending on whether we are splitting proc-points or not. Branches are essentially identical, except that one begins with splitting proc-points, while the other begins with attaching info tables. 66 67 66 68 67 69 * '''Split into multiple !CmmProcs''', implemented in `CmmProcPointZ`. At this point we build an info-table for each of the !CmmProcs, including SRTs. Done on the basis of the live local variables (by now mapped to stack slots) and live CAF statics.