These are graphs I made up to test my various block-reorder algorithms.
Simple case #1: | D / \ S C / \ | A B | \ / | M | \ / Z | Edge ME with last edge: | D / \ A S | / \ | B C \ | / \ \ / \|/ Z | Several constant disjunctive merges: ENTRY | 1 | S1 / \ 2 3 | | S2 S3 / \ / \ 4 5 6 7 \ \ / / \ 8 / \ / / 9 / \ / 10 | EXIT Some nonconstant disjunctive merges: ENTRY | 1 | D1 / \ 2 3 | | S2 S3 / \ / \ 4 5 6 7 \ \ / / \ 8 / \ / / 9 / \ / 10 | EXIT A graph with edges that cut across both left and right: | D1 / \ S1 D2 / \ /|\ A | S3 E H | |/ \| | | B F | | | | | | S2 / | \ /\___ | C / \ / \ / I G / \ / M | Lotsa disjunctive merges: | D1 / \ / \ D2 S1 / \ / \ S2 A D3 B /||\ | /\ / / || | _/ \ / D4 / | | / I /\/ | |/ | | C E F G | | \ | / / | | \ || / | / \||/ / / J / / \ / / \ / / K / \ / Z | The following loop is an example of one with multiple entries: | S __ /|\ / | A | H | | \| | | Q | \ / | D | / \ | B T | | |__| Ensure loop is stitched iff it needs to be: | S1 / \ / S2 __ . / \ / \ . | H | . | | | | S3 | | / \ | | A B | | \ / | | M1 | \ | | \ / | \/ | X1 | / \ | / S4 | / / \ | . . T | . . |__| . . Simple, straight-line, overlapping loops: | / \ H1 _|__ | / | | H2 | | | | | T1 | | /|\__| | / T2 | / /|_____| . . . . . . Loops can be much more convoluted, with multiple entries, multiple tails, and overlapping loops with heads and tails on different paths: | _ S1 _ / \ / \ / \ | H1 H2 | | | | | | \ / | | M | | | | | S2 | | / \ | | T1 T2 | \_/| |\_/ | | \ / Z | Another one: ____ | / \| | H1 ______ | | / \ | H2 | | | | | S1 | | / \ | | D1 S2 | |_/ \ / \ | D2 D3 | / \ / \_| | \/ | M1 \ / \ / M2 |