|
| 1 | +--- |
| 2 | +category: breaking |
| 3 | +--- |
| 4 | +* The Go control flow graph (CFG) implementation has been completely rewritten |
| 5 | + to use the shared CFG library. The CFG now includes additional nodes to more |
| 6 | + accurately represent certain constructs, including assignments, function |
| 7 | + parameters and results, range statements, and deferred calls. The CFG now |
| 8 | + only includes nodes that are reachable from the entry point. Basic blocks are |
| 9 | + also now constructed directly from the shared CFG. Existing code that relies |
| 10 | + on specific CFG nodes, edges, locations, textual representations, or basic |
| 11 | + block boundaries may need to be updated. Additionally, the following API |
| 12 | + changes have been made: |
| 13 | + - `BasicBlocks::Cfg` has been removed. `BasicBlock` now directly uses the |
| 14 | + basic-block implementation provided by the shared CFG library. |
| 15 | + - `ControlFlow::EntryNode` and `ControlFlow::ExitNode` have been added, and |
| 16 | + `ControlFlow::entryNode` and `ControlFlow::exitNode` now return these more |
| 17 | + specific types. |
| 18 | + - Several IR instruction classes have been removed or consolidated, including |
| 19 | + `ReadArgumentInstruction`, `InitResultInstruction`, `IncDecInstruction`, |
| 20 | + `EvalIncDecRhsInstruction`, `EvalImplicitOneInstruction`, |
| 21 | + `SelectInstruction`, and `SendInstruction`. |
| 22 | + - `EvalCompoundAssignRhsInstruction` and `EvalImplicitInitInstruction` now |
| 23 | + directly represent their associated writes. |
0 commit comments