Re: [GHC] #7574: Register allocator chokes on certain branches with literals
#7574: Register allocator chokes on certain branches with literals -------------------------------------+------------------------------------- Reporter: thoughtpolice | Owner: simonmar Type: bug | Status: new Priority: highest | Milestone: 7.8.1 Component: Compiler (NCG) | Version: 7.7 Resolution: | Keywords: ncg, codegen Operating System: Unknown/Multiple | Architecture: Unknown/Multiple Type of failure: Compile-time | Difficulty: Unknown crash | Blocked By: 7573 Test Case: | Related Tickets: #7571,#7534, codeGen/should_compile/T7574 | #7814 Blocking: | -------------------------------------+------------------------------------- Comment (by Simon Marlow <marlowsd@…>): In [changeset:f5879acd018494b84233f26fba828ce376d0f81d/ghc]: {{{ #!CommitTicketReference repository="ghc" revision="f5879acd018494b84233f26fba828ce376d0f81d" Discard unreachable code in the register allocator (#7574) The problem with unreachable code is that it might refer to undefined registers. This happens accidentally: a block can be orphaned by an optimisation, for example when the result of a comparsion becomes known. The register allocator panics when it finds an undefined register, because they shouldn't occur in generated code. So we need to also discard unreachable code to prevent this panic being triggered by optimisations. The register alloator already does a strongly-connected component analysis, so it ought to be easy to make it discard unreachable code as part of that traversal. It turns out that we need a different variant of the scc algorithm to do that (see Digraph), however the new variant also generates slightly better code by putting the blocks within a loop in a better order for register allocation. }}} -- Ticket URL: <http://ghc.haskell.org/trac/ghc/ticket/7574#comment:28> GHC <http://www.haskell.org/ghc/> The Glasgow Haskell Compiler
participants (1)
-
GHC