<feed xmlns='http://www.w3.org/2005/Atom'>
<title>qt/qtdeclarative.git/src/qml/compiler/qv4regalloc.cpp, branch old/5.2</title>
<subtitle>Qt Declarative (Quick 2)
</subtitle>
<link rel='alternate' type='text/html' href='https://code.qt.io/cgit/qt/qtdeclarative.git/'/>
<entry>
<title>V4 regalloc: fix interval splitting when register pressure is high.</title>
<updated>2014-01-31T09:34:36+00:00</updated>
<author>
<name>Erik Verbruggen</name>
<email>erik.verbruggen@digia.com</email>
</author>
<published>2014-01-30T12:48:31+00:00</published>
<link rel='alternate' type='text/html' href='https://code.qt.io/cgit/qt/qtdeclarative.git/commit/?id=95809584e20df61b7ec99061162d53604f13a7ec'/>
<id>95809584e20df61b7ec99061162d53604f13a7ec</id>
<content type='text'>
When a register is needed for an interval, but none is available, one
of the used registers will be chosen and spilled to the stack (meaning
it will be split) before the current position. However, if a register
is used at the current position for an incoming parameter, its interval
has to be split after the current position. This patch adds/fixes the
latter case.

This fixes crypto.js on x86. The specific problem there was that the
result of an operation needed a register, and chose the one from one
of the incoming parameters (which then should get spilled/split).
However, this interval was already split, and started exactly at that
the current position. So splitting before the current position did
nothing, resulting in it staying alive and using the same register as
the result. So any subsequent use of would have the invalid value.

Task-number: QTBUG-36430
Change-Id: I228fc210b009aa0b16b08a374fc955fabfbb6d12
Reviewed-by: Albert Astals Cid &lt;albert.astals@canonical.com&gt;
Reviewed-by: Simon Hausmann &lt;simon.hausmann@digia.com&gt;
Reviewed-by: Fawzi Mohamed &lt;fawzi.mohamed@digia.com&gt;
Reviewed-by: Lars Knoll &lt;lars.knoll@digia.com&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
When a register is needed for an interval, but none is available, one
of the used registers will be chosen and spilled to the stack (meaning
it will be split) before the current position. However, if a register
is used at the current position for an incoming parameter, its interval
has to be split after the current position. This patch adds/fixes the
latter case.

This fixes crypto.js on x86. The specific problem there was that the
result of an operation needed a register, and chose the one from one
of the incoming parameters (which then should get spilled/split).
However, this interval was already split, and started exactly at that
the current position. So splitting before the current position did
nothing, resulting in it staying alive and using the same register as
the result. So any subsequent use of would have the invalid value.

Task-number: QTBUG-36430
Change-Id: I228fc210b009aa0b16b08a374fc955fabfbb6d12
Reviewed-by: Albert Astals Cid &lt;albert.astals@canonical.com&gt;
Reviewed-by: Simon Hausmann &lt;simon.hausmann@digia.com&gt;
Reviewed-by: Fawzi Mohamed &lt;fawzi.mohamed@digia.com&gt;
Reviewed-by: Lars Knoll &lt;lars.knoll@digia.com&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>Merge "Merge remote-tracking branch 'origin/release' into stable" into refs/staging/stable</title>
<updated>2014-01-24T09:25:46+00:00</updated>
<author>
<name>Simon Hausmann</name>
<email>simon.hausmann@digia.com</email>
</author>
<published>2014-01-24T09:21:32+00:00</published>
<link rel='alternate' type='text/html' href='https://code.qt.io/cgit/qt/qtdeclarative.git/commit/?id=f9ba7d29464eb7f13004918faa73d37f7b4ea725'/>
<id>f9ba7d29464eb7f13004918faa73d37f7b4ea725</id>
<content type='text'>
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
</pre>
</div>
</content>
</entry>
<entry>
<title>V4: fix life-time hole check.</title>
<updated>2014-01-24T09:25:46+00:00</updated>
<author>
<name>Erik Verbruggen</name>
<email>erik.verbruggen@digia.com</email>
</author>
<published>2014-01-17T15:13:08+00:00</published>
<link rel='alternate' type='text/html' href='https://code.qt.io/cgit/qt/qtdeclarative.git/commit/?id=beffe565e3511bdd01a967303066a5dce88022f4'/>
<id>beffe565e3511bdd01a967303066a5dce88022f4</id>
<content type='text'>
This check was incorrect when a jump happened from before (or after) the
life-time interval into a life-time hole.

Change-Id: Idacf304a96d39f372249a48e18b00891531d9859
Reviewed-by: Lars Knoll &lt;lars.knoll@digia.com&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
This check was incorrect when a jump happened from before (or after) the
life-time interval into a life-time hole.

Change-Id: Idacf304a96d39f372249a48e18b00891531d9859
Reviewed-by: Lars Knoll &lt;lars.knoll@digia.com&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>Merge remote-tracking branch 'origin/release' into stable</title>
<updated>2014-01-24T09:21:18+00:00</updated>
<author>
<name>Simon Hausmann</name>
<email>simon.hausmann@digia.com</email>
</author>
<published>2014-01-24T09:20:48+00:00</published>
<link rel='alternate' type='text/html' href='https://code.qt.io/cgit/qt/qtdeclarative.git/commit/?id=5225a0f570e6a5dbd9b3453123eb85031656ad19'/>
<id>5225a0f570e6a5dbd9b3453123eb85031656ad19</id>
<content type='text'>
Change-Id: I4b0f2d63aff78b50656a519c088afc4a076747f7
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Change-Id: I4b0f2d63aff78b50656a519c088afc4a076747f7
</pre>
</div>
</content>
</entry>
<entry>
<title>V4: remove more superfluous spills.</title>
<updated>2014-01-23T05:03:33+00:00</updated>
<author>
<name>Erik Verbruggen</name>
<email>erik.verbruggen@digia.com</email>
</author>
<published>2014-01-22T12:02:09+00:00</published>
<link rel='alternate' type='text/html' href='https://code.qt.io/cgit/qt/qtdeclarative.git/commit/?id=8933268baca5d1c2992c808a6399982f28babd47'/>
<id>8933268baca5d1c2992c808a6399982f28babd47</id>
<content type='text'>
Spills for targets of phi-nodes are already inserted by the renumbering,
so they don't need to be added (again) while resolving edges.

This fixes a problem with crypto.js.

Change-Id: I4b1d79fc92236b4a6b0b6d6d30ada17c8581a093
Reviewed-by: Fawzi Mohamed &lt;fawzi.mohamed@digia.com&gt;
Reviewed-by: Lars Knoll &lt;lars.knoll@digia.com&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Spills for targets of phi-nodes are already inserted by the renumbering,
so they don't need to be added (again) while resolving edges.

This fixes a problem with crypto.js.

Change-Id: I4b1d79fc92236b4a6b0b6d6d30ada17c8581a093
Reviewed-by: Fawzi Mohamed &lt;fawzi.mohamed@digia.com&gt;
Reviewed-by: Lars Knoll &lt;lars.knoll@digia.com&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>V4: fix range splitting when split is between intervals.</title>
<updated>2014-01-17T11:20:00+00:00</updated>
<author>
<name>Erik Verbruggen</name>
<email>erik.verbruggen@digia.com</email>
</author>
<published>2014-01-17T10:45:37+00:00</published>
<link rel='alternate' type='text/html' href='https://code.qt.io/cgit/qt/qtdeclarative.git/commit/?id=a0494a2092d7512a2b0d568a21058ed77b0cea11'/>
<id>a0494a2092d7512a2b0d568a21058ed77b0cea11</id>
<content type='text'>
Also added some "white-box" unit tests and sprinkled in a bit of
documentation. The case that went wrong is covered by the test
rangeSplitting_1: before the fix, the new interval would have
two ranges: [66-64],[70-71]. The first range is invalid and should not
be there at all.

Change-Id: If0742f4e6a96d98ea5d696f95126886ba66f92bb
Reviewed-by: Simon Hausmann &lt;simon.hausmann@digia.com&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Also added some "white-box" unit tests and sprinkled in a bit of
documentation. The case that went wrong is covered by the test
rangeSplitting_1: before the fix, the new interval would have
two ranges: [66-64],[70-71]. The first range is invalid and should not
be there at all.

Change-Id: If0742f4e6a96d98ea5d696f95126886ba66f92bb
Reviewed-by: Simon Hausmann &lt;simon.hausmann@digia.com&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>V4: relieve more memory allocator pressure.</title>
<updated>2014-01-16T18:21:52+00:00</updated>
<author>
<name>Erik Verbruggen</name>
<email>erik.verbruggen@digia.com</email>
</author>
<published>2014-01-16T14:39:00+00:00</published>
<link rel='alternate' type='text/html' href='https://code.qt.io/cgit/qt/qtdeclarative.git/commit/?id=6ccb9f8f04ea257520e518b25999907c6a8421e1'/>
<id>6ccb9f8f04ea257520e518b25999907c6a8421e1</id>
<content type='text'>
For _ZN13BenchmarkDemo11initPhysicsEv from the Octane testsuite, the
total allocated memory drops from 1.5GB to 51MB. Peak memory usage stays
at 29MB.

Again, slow implementations of malloc()/free() will see a performance
improvement.

Change-Id: I21bc2f0d3735de0980fc9b3745906016e2e48a61
Reviewed-by: Simon Hausmann &lt;simon.hausmann@digia.com&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
For _ZN13BenchmarkDemo11initPhysicsEv from the Octane testsuite, the
total allocated memory drops from 1.5GB to 51MB. Peak memory usage stays
at 29MB.

Again, slow implementations of malloc()/free() will see a performance
improvement.

Change-Id: I21bc2f0d3735de0980fc9b3745906016e2e48a61
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: 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 IR: reverse propagate int32 truncation.</title>
<updated>2013-12-04T15:42:46+00:00</updated>
<author>
<name>Erik Verbruggen</name>
<email>erik.verbruggen@me.com</email>
</author>
<published>2013-10-18T15:02:57+00:00</published>
<link rel='alternate' type='text/html' href='https://code.qt.io/cgit/qt/qtdeclarative.git/commit/?id=7e3578728edec27301b71f5ab5d7b43874ae35a2'/>
<id>7e3578728edec27301b71f5ab5d7b43874ae35a2</id>
<content type='text'>
Change-Id: I5cb0c7798d0e530f3137710bf0e723bd7b64dc89
Reviewed-by: Simon Hausmann &lt;simon.hausmann@digia.com&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Change-Id: I5cb0c7798d0e530f3137710bf0e723bd7b64dc89
Reviewed-by: Simon Hausmann &lt;simon.hausmann@digia.com&gt;
</pre>
</div>
</content>
</entry>
</feed>
