I'm trying to figure out how to persuade GHC to generate an irreducible control-flow graph (so I can test an algorithm to convert it to structured control flow).
The attached image shows (on the left) the classic simple irreducible CFG: there is a loop between nodes A and B, but neither one dominates the other, so there is no loop header. I tried to get GHC to generate this CFG using the following source code: length'' :: Bool -> List a -> Int length'' trigger xs = if trigger then countA 0 xs else countB 0 xs where countA n Nil = case n of m -> m countA n (Cons _ as) = case n + 1 of m -> countB m as countB n Nil = case n of m -> m countB n (Cons _ as) = case n + 2 of m -> countA m as Unfortunately (for my purposes), GHC generates a perfectly lovely reducible flow graph with a single header node. It is even possible for GHC to generate an irreducible control-flow graph? If so, how can it be done? Norman
_______________________________________________ ghc-devs mailing list ghc-devs@haskell.org http://mail.haskell.org/cgi-bin/mailman/listinfo/ghc-devs