V4: optimize dominator frontier storage.
authorErik Verbruggen <erik.verbruggen@me.com>
Thu, 19 Dec 2013 09:37:34 +0000 (10:37 +0100)
committerThe Qt Project <gerrit-noreply@qt-project.org>
Wed, 8 Jan 2014 16:04:19 +0000 (17:04 +0100)
commit2f9099443d9acd6583e92785afbb38b2e4dcbfd5
treee56a31ef91f913e0f00c63b9024b769bd17ffa02
parent5657d00a92b34aa7528dd7cf7401ff7f493b68c5
V4: optimize dominator frontier storage.

Changes the dominator frontier storage from a set of basic-blocks for
every basic-block to a BasicBlockSet for every basic-block. This new
class stores a maximum of 8 nodes in a vector, and switches to a bit
vector when going beyond 8 nodes.

This is important in two cases: most basic-blocks have 2-3 nodes in the
frontier, and an array is faster than a set in these cases. The few
cases where the frontier goes beyond 8 nodes, is when a switch
statement is used with lots of cases that all fall-through.

On regress-74474-003.js this reduces peak memory usage from 1.68G
to 60M. The switch statement in this test results in 27000 basic-blocks.

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