<feed xmlns='http://www.w3.org/2005/Atom'>
<title>qt/qtdeclarative.git/src/qml/compiler/qv4ssa.cpp, branch v5.2.1</title>
<subtitle>Qt Declarative (Quick 2)
</subtitle>
<link rel='alternate' type='text/html' href='https://code.qt.io/cgit/qt/qtdeclarative.git/'/>
<entry>
<title>Remove static initialization of QObjects</title>
<updated>2014-01-29T18:15:15+00:00</updated>
<author>
<name>Eskil Abrahamsen Blomfeldt</name>
<email>eskil.abrahamsen-blomfeldt@digia.com</email>
</author>
<published>2014-01-29T14:11:14+00:00</published>
<link rel='alternate' type='text/html' href='https://code.qt.io/cgit/qt/qtdeclarative.git/commit/?id=b433c4b5a761cf035ccb0bfc0982e1b80d1c07b8'/>
<id>b433c4b5a761cf035ccb0bfc0982e1b80d1c07b8</id>
<content type='text'>
Statically initializing QObjects will cause e.g. the main
thread pointer in QCoreApplication to be set when the library
is loading. On Android, this is never the real main thread.
The effect was a warning about QApplication not being initialized
on main thread, and a race condition which sometimes caused
apps to hang on startup.

[ChangeLog][Android] Fixed possible hang on startup for Qt Quick
applications.

Task-number: QTBUG-36426
Change-Id: I7bd8a8f35ef1a2548949978563e3157f8dc854c7
Reviewed-by: Simon Hausmann &lt;simon.hausmann@digia.com&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Statically initializing QObjects will cause e.g. the main
thread pointer in QCoreApplication to be set when the library
is loading. On Android, this is never the real main thread.
The effect was a warning about QApplication not being initialized
on main thread, and a race condition which sometimes caused
apps to hang on startup.

[ChangeLog][Android] Fixed possible hang on startup for Qt Quick
applications.

Task-number: QTBUG-36426
Change-Id: I7bd8a8f35ef1a2548949978563e3157f8dc854c7
Reviewed-by: Simon Hausmann &lt;simon.hausmann@digia.com&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>V4 IR: do edge splitting after SSA transformation</title>
<updated>2014-01-16T18:19:44+00:00</updated>
<author>
<name>Erik Verbruggen</name>
<email>erik.verbruggen@digia.com</email>
</author>
<published>2014-01-15T09:45:28+00:00</published>
<link rel='alternate' type='text/html' href='https://code.qt.io/cgit/qt/qtdeclarative.git/commit/?id=73f4fdbef816ff623142bee6c235f06c4bdf58d3'/>
<id>73f4fdbef816ff623142bee6c235f06c4bdf58d3</id>
<content type='text'>
This reduces the work for the dominator tree/frontier calculations,
because there are less blocks to consider. All blocks inserted by
splitting the critical edges, have (by definition) no effect on the
dominator calculations. However, the immediate dominators for all new
blocks needs to be added, because this information is used by the block
scheduling.

This change reduces memory/time usage during optimization passes,
especially when processing excessively big switch statements.

Change-Id: Ia69882e9dabdddffa1c98b1079012d8d988e1e8f
Reviewed-by: Simon Hausmann &lt;simon.hausmann@digia.com&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
This reduces the work for the dominator tree/frontier calculations,
because there are less blocks to consider. All blocks inserted by
splitting the critical edges, have (by definition) no effect on the
dominator calculations. However, the immediate dominators for all new
blocks needs to be added, because this information is used by the block
scheduling.

This change reduces memory/time usage during optimization passes,
especially when processing excessively big switch statements.

Change-Id: Ia69882e9dabdddffa1c98b1079012d8d988e1e8f
Reviewed-by: Simon Hausmann &lt;simon.hausmann@digia.com&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>V4: lower memory allocator pressure.</title>
<updated>2014-01-16T18:19:31+00:00</updated>
<author>
<name>Erik Verbruggen</name>
<email>erik.verbruggen@digia.com</email>
</author>
<published>2014-01-16T13:55:41+00:00</published>
<link rel='alternate' type='text/html' href='https://code.qt.io/cgit/qt/qtdeclarative.git/commit/?id=a03a6499ab64da2003d2d8a4691ea89606af1f8b'/>
<id>a03a6499ab64da2003d2d8a4691ea89606af1f8b</id>
<content type='text'>
Changes to datastructures and more re-using of locally used temporary
vectors. For the test regress-74474-002.js this lowers the total
allocated memory from 1.98GB to 158MB. Thse peak memory usage stays at
75MB. There is no functional change.

This should give a modest performance improvement which mainly depends
on the speed of malloc()/free().

Change-Id: I1877c1903e59a33ee79ff2b801ef6f2c1cee30a6
Reviewed-by: Simon Hausmann &lt;simon.hausmann@digia.com&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Changes to datastructures and more re-using of locally used temporary
vectors. For the test regress-74474-002.js this lowers the total
allocated memory from 1.98GB to 158MB. Thse peak memory usage stays at
75MB. There is no functional change.

This should give a modest performance improvement which mainly depends
on the speed of malloc()/free().

Change-Id: I1877c1903e59a33ee79ff2b801ef6f2c1cee30a6
Reviewed-by: Simon Hausmann &lt;simon.hausmann@digia.com&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>V4 IR: update immediate dominators when purging unreachable basic-blocks</title>
<updated>2014-01-16T18:19:22+00:00</updated>
<author>
<name>Erik Verbruggen</name>
<email>erik.verbruggen@digia.com</email>
</author>
<published>2014-01-15T09:46:08+00:00</published>
<link rel='alternate' type='text/html' href='https://code.qt.io/cgit/qt/qtdeclarative.git/commit/?id=6f0f73e63182afc92cb1b8255b114fb8f8232f22'/>
<id>6f0f73e63182afc92cb1b8255b114fb8f8232f22</id>
<content type='text'>
The basic block scheduling uses this information to place loops. When
the immediate dominator information is invalid, the scheduling can be
sub-optimal, or will sometimes forget to schedule some blocks.

Change-Id: Iaeb45f2b757b676310be25a658ceadc07d5722ec
Reviewed-by: Simon Hausmann &lt;simon.hausmann@digia.com&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
The basic block scheduling uses this information to place loops. When
the immediate dominator information is invalid, the scheduling can be
sub-optimal, or will sometimes forget to schedule some blocks.

Change-Id: Iaeb45f2b757b676310be25a658ceadc07d5722ec
Reviewed-by: Simon Hausmann &lt;simon.hausmann@digia.com&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>V4: remove unnecessary spills and order them correctly.</title>
<updated>2014-01-16T08:57:42+00:00</updated>
<author>
<name>Erik Verbruggen</name>
<email>erik.verbruggen@digia.com</email>
</author>
<published>2014-01-15T13:36:37+00:00</published>
<link rel='alternate' type='text/html' href='https://code.qt.io/cgit/qt/qtdeclarative.git/commit/?id=1ac728b7601dd5fee2fee7ea714f0626055384df'/>
<id>1ac728b7601dd5fee2fee7ea714f0626055384df</id>
<content type='text'>
When doing edge resolving, too many spills were generated, and the
dependency tracking of moves was not complete. Now we only insert spills
that are caused by phi-nodes (because any other spill would be generated
at the point a variable was defined). However, there can still be
multiple dependencies between the moves generated by the edge resolving.
Instead of only checking the first dependency, all of them are tracked.

The bug report was a case where an unneccesary spill was generated, that
got tracked, but "suppressed" the other (valid!) dependent move. The
randomness was caused by the hash seeding of QHash.

Task-number: QTBUG-35840

Change-Id: Ifbc3c8fc13de53c46a8b5859721b2497189921a3
Reviewed-by: Fawzi Mohamed &lt;fawzi.mohamed@digia.com&gt;
Reviewed-by: Simon Hausmann &lt;simon.hausmann@digia.com&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
When doing edge resolving, too many spills were generated, and the
dependency tracking of moves was not complete. Now we only insert spills
that are caused by phi-nodes (because any other spill would be generated
at the point a variable was defined). However, there can still be
multiple dependencies between the moves generated by the edge resolving.
Instead of only checking the first dependency, all of them are tracked.

The bug report was a case where an unneccesary spill was generated, that
got tracked, but "suppressed" the other (valid!) dependent move. The
randomness was caused by the hash seeding of QHash.

Task-number: QTBUG-35840

Change-Id: Ifbc3c8fc13de53c46a8b5859721b2497189921a3
Reviewed-by: Fawzi Mohamed &lt;fawzi.mohamed@digia.com&gt;
Reviewed-by: Simon Hausmann &lt;simon.hausmann@digia.com&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>V4: optimize dominator frontier storage.</title>
<updated>2014-01-08T16:04:19+00:00</updated>
<author>
<name>Erik Verbruggen</name>
<email>erik.verbruggen@me.com</email>
</author>
<published>2013-12-19T09:37:34+00:00</published>
<link rel='alternate' type='text/html' href='https://code.qt.io/cgit/qt/qtdeclarative.git/commit/?id=2f9099443d9acd6583e92785afbb38b2e4dcbfd5'/>
<id>2f9099443d9acd6583e92785afbb38b2e4dcbfd5</id>
<content type='text'>
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 &lt;simon.hausmann@digia.com&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
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 &lt;simon.hausmann@digia.com&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>V4: remove class field in DominatorTree that was used only once.</title>
<updated>2014-01-02T20:48:11+00:00</updated>
<author>
<name>Erik Verbruggen</name>
<email>erik.verbruggen@me.com</email>
</author>
<published>2013-12-18T10:34:17+00:00</published>
<link rel='alternate' type='text/html' href='https://code.qt.io/cgit/qt/qtdeclarative.git/commit/?id=c988a8e450c6aea6e9588e1517c5bab1acff2a62'/>
<id>c988a8e450c6aea6e9588e1517c5bab1acff2a62</id>
<content type='text'>
Calculation of all the children of nodes in the dominator tree is now
calculated as a local variable right before computing the dominator
frontier. The effect is that they are not retained after their only use.

Change-Id: I83c962c691b78cb767708eb04cf30d3b7a760deb
Reviewed-by: Lars Knoll &lt;lars.knoll@digia.com&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Calculation of all the children of nodes in the dominator tree is now
calculated as a local variable right before computing the dominator
frontier. The effect is that they are not retained after their only use.

Change-Id: I83c962c691b78cb767708eb04cf30d3b7a760deb
Reviewed-by: Lars Knoll &lt;lars.knoll@digia.com&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>V4 IR: do not add unconditional jumps to work lists</title>
<updated>2014-01-02T20:47:25+00:00</updated>
<author>
<name>Erik Verbruggen</name>
<email>erik.verbruggen@me.com</email>
</author>
<published>2013-12-17T11:44:07+00:00</published>
<link rel='alternate' type='text/html' href='https://code.qt.io/cgit/qt/qtdeclarative.git/commit/?id=a588c1a5038cf2b4e22101d360fcae20531d905f'/>
<id>a588c1a5038cf2b4e22101d360fcae20531d905f</id>
<content type='text'>
Both type inference and the optimization pass do not do anything with
unconditional jumps. So, instead of adding them to the worklist and
later on removing them again, it’s faster to never add them in the first
place.

Change-Id: Ib81d43e9ea6df2b1a70e9dd1e9b9c29cb6d345d2
Reviewed-by: Lars Knoll &lt;lars.knoll@digia.com&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Both type inference and the optimization pass do not do anything with
unconditional jumps. So, instead of adding them to the worklist and
later on removing them again, it’s faster to never add them in the first
place.

Change-Id: Ib81d43e9ea6df2b1a70e9dd1e9b9c29cb6d345d2
Reviewed-by: Lars Knoll &lt;lars.knoll@digia.com&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>V4 IR: change datastructures for dominator calculations.</title>
<updated>2014-01-02T20:46:37+00:00</updated>
<author>
<name>Erik Verbruggen</name>
<email>erik.verbruggen@me.com</email>
</author>
<published>2013-12-16T15:45:59+00:00</published>
<link rel='alternate' type='text/html' href='https://code.qt.io/cgit/qt/qtdeclarative.git/commit/?id=2f3e7f904f9adf4125d5b7002293439da438fb15'/>
<id>2f3e7f904f9adf4125d5b7002293439da438fb15</id>
<content type='text'>
Replace hashes from basic-block to basic-block with vectors that
associate basic-block index to basic-block index.

Change-Id: I834ea3d825e4d2b02c075b1b0f080f5a65f41317
Reviewed-by: Fawzi Mohamed &lt;fawzi.mohamed@digia.com&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Replace hashes from basic-block to basic-block with vectors that
associate basic-block index to basic-block index.

Change-Id: I834ea3d825e4d2b02c075b1b0f080f5a65f41317
Reviewed-by: Fawzi Mohamed &lt;fawzi.mohamed@digia.com&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>V4 SSA: add some more literature references.</title>
<updated>2013-12-19T10:21:39+00:00</updated>
<author>
<name>Erik Verbruggen</name>
<email>erik.verbruggen@me.com</email>
</author>
<published>2013-12-16T13:38:45+00:00</published>
<link rel='alternate' type='text/html' href='https://code.qt.io/cgit/qt/qtdeclarative.git/commit/?id=61d982d601fa563fa53f527b8db4aceab5b47b2b'/>
<id>61d982d601fa563fa53f527b8db4aceab5b47b2b</id>
<content type='text'>
Also fixed some comments.

Change-Id: I4aedff84bdbf8de248025bc48805a859704bdd8a
Reviewed-by: Lars Knoll &lt;lars.knoll@digia.com&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Also fixed some comments.

Change-Id: I4aedff84bdbf8de248025bc48805a859704bdd8a
Reviewed-by: Lars Knoll &lt;lars.knoll@digia.com&gt;
</pre>
</div>
</content>
</entry>
</feed>
