mirror of
https://github.com/revng/revng
synced 2026-06-21 14:07:57 +00:00
26cf42eb12
Introduce the Enforce Single Exit pass, whose task is to normalize a generic `ScopeGraph`, which may have multiple exit blocks (and/or infinite loop regions), in order to have a single `sink_block` as exit block. This is done by adding a new entry block, a `sink_block`, and some `scope_closer` edges (which are visible only on the `ScopeGraph`) that enforce the property. This is done taking inspiration from how the internally the `PostDominatorTree` pass construct the temporary graph on which the post dominance information is computed on. Some unit tests are added in order to verify that the pass works as expected.