
#7574: Register allocator chokes on certain branches with literals ---------------------------------+------------------------------------------ Reporter: thoughtpolice | Owner: Type: bug | Status: new Priority: normal | Milestone: Component: Compiler (NCG) | Version: 7.7 Keywords: ncg, codegen | Os: Unknown/Multiple Architecture: Unknown/Multiple | Failure: Compile-time crash Difficulty: Unknown | Testcase: Blockedby: 7573 | Blocking: Related: #7571 | ---------------------------------+------------------------------------------ Changes (by simonmar): * difficulty: => Unknown Comment: The problem here is that the else-block becomes unreachable after `cmmStmtConFold` optimises away the conditional, and the register allocator doesn't like unreachable code. The right fix is to discard unreachable code before register allocation. It already does a strongly-connected-component analysis so this shouldn't be too hard, but IIRC when I tried to do this before it wasn't straightforward because `Digraph` doesn't expose the right bits. We need an SCC pass that starts from a particular node, not the entire set of nodes. -- Ticket URL: http://hackage.haskell.org/trac/ghc/ticket/7574#comment:5 GHC http://www.haskell.org/ghc/ The Glasgow Haskell Compiler