Improved block scheduling with "tuned" DFS.
authorErik Verbruggen <erik.verbruggen@me.com>
Wed, 5 Jun 2013 14:30:44 +0000 (16:30 +0200)
committerSimon Hausmann <simon.hausmann@digia.com>
Thu, 6 Jun 2013 07:25:35 +0000 (09:25 +0200)
commit4a144e64b30e34c278edd466230d625740a1e4d6
tree3a62cc33134a1270e72f564a0bc657f843aec2d1
parent28b54d1ac92bac244902d249d24da47594510a96
Improved block scheduling with "tuned" DFS.

Properties:
- all predecessors of a block are located before this block
- all blocks that are part of the same loop are contiguous, i.e., there
are no non-loop blocks between two loop blocks.

This is done by doing DFS, and preferring the "if-true" for CJUMP. Also,
any block with multiple incoming edges can only be scheduled if all
those edges have been scheduled, except for loop conditions. All loop
conditions are marked in the IR with "group containers", which in turn,
is used to schedule them contiguously.

This layout should minimise the life-ranges for variables.

Change-Id: I3c9fb4f18bb0fc89048e71905f48eb889d763ba0
Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
src/qml/qml/v4/qv4ssa.cpp