[GHC] #8456: Control flow optimisations duplicate blocks
GHC
ghc-devs at haskell.org
Fri Oct 18 12:32:32 UTC 2013
#8456: Control flow optimisations duplicate blocks
--------------------------------------------+------------------------------
Reporter: jstolarek | Owner: jstolarek
Type: bug | Status: new
Priority: high | Milestone:
Component: Compiler | Version: 7.7
Resolution: | Keywords:
Operating System: Unknown/Multiple | Architecture:
Type of failure: Runtime performance bug | Unknown/Multiple
Test Case: | Difficulty: Unknown
Blocking: 8275 | Blocked By:
| Related Tickets:
--------------------------------------------+------------------------------
Comment (by simonpj):
About `CmmContFlowOpt`, it looks to me as if there may be other bugs.
When deciding in `shouldConcatWith` whether the destination block is
small, we look in `blocks`; but those are the original un-rewritten
blocks, and we might have already rewritten the destination block.
I think it might be better to consider this algorithm as something that
rewrites a full graph to a graph (both represented as usual as a finite
map). The algorithm takes a post-order DFS list of block-ids (not
blocks!) which is used as the list of blocks to consider, one by one.
Look up that block id to find the block, consider whether to rewrite it;
if so, rewrite it and replace it in the finite map, and move on to the
next one.
You are right that rewriting changes predecessor counts, so you'd need to
maintain that alongside the current graph. An easy approximiation would
be this: keep a set of block-ids that are referenced exactly once, and
delete things from it when necessary. (But never add anything.) That
would be an approximation, but probably a reasonable one.
I don't agree with Simon M that "not shortcut or concat backward jumps"
will give results that are at least as good. Imagine a backward goto to a
goto!
Thanks for working on this Jan
Simon
--
Ticket URL: <http://ghc.haskell.org/trac/ghc/ticket/8456#comment:3>
GHC <http://www.haskell.org/ghc/>
The Glasgow Haskell Compiler
More information about the ghc-tickets
mailing list