<feed xmlns='http://www.w3.org/2005/Atom'>
<title>qt/qtdeclarative.git/src/qml/compiler/qv4ssa.cpp, branch dev</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 now unused files</title>
<updated>2017-06-30T11:58:44+00:00</updated>
<author>
<name>Lars Knoll</name>
<email>lars.knoll@qt.io</email>
</author>
<published>2017-06-22T08:01:17+00:00</published>
<link rel='alternate' type='text/html' href='https://code.qt.io/cgit/qt/qtdeclarative.git/commit/?id=29e41a9ee61a05274f77f89e9ffd8875f90d3308'/>
<id>29e41a9ee61a05274f77f89e9ffd8875f90d3308</id>
<content type='text'>
Remove all files from the old compiler pipeline that are now
unused. This includes the whole IR, JIT code generation,
and the old Moth Isel.

Change-Id: I50d06abfbcf0e9755a54ed94638f8bb74f9512b1
Reviewed-by: Erik Verbruggen &lt;erik.verbruggen@qt.io&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Remove all files from the old compiler pipeline that are now
unused. This includes the whole IR, JIT code generation,
and the old Moth Isel.

Change-Id: I50d06abfbcf0e9755a54ed94638f8bb74f9512b1
Reviewed-by: Erik Verbruggen &lt;erik.verbruggen@qt.io&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>Add support for post increment/decrement</title>
<updated>2017-06-21T09:19:59+00:00</updated>
<author>
<name>Erik Verbruggen</name>
<email>erik.verbruggen@qt.io</email>
</author>
<published>2017-06-20T09:28:27+00:00</published>
<link rel='alternate' type='text/html' href='https://code.qt.io/cgit/qt/qtdeclarative.git/commit/?id=48d77ce4c83c2c1d2f3ee3d01c69550e115c3226'/>
<id>48d77ce4c83c2c1d2f3ee3d01c69550e115c3226</id>
<content type='text'>
Change-Id: Ie3f03a548105fe49d29e3d60bf823435f21b0340
Reviewed-by: Lars Knoll &lt;lars.knoll@qt.io&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Change-Id: Ie3f03a548105fe49d29e3d60bf823435f21b0340
Reviewed-by: Lars Knoll &lt;lars.knoll@qt.io&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>Change temp allocation when generating IR</title>
<updated>2017-06-09T07:55:33+00:00</updated>
<author>
<name>Lars Knoll</name>
<email>lars.knoll@qt.io</email>
</author>
<published>2017-05-11T08:09:12+00:00</published>
<link rel='alternate' type='text/html' href='https://code.qt.io/cgit/qt/qtdeclarative.git/commit/?id=5efbd7165d6867aa376f23c20edcfe49e80518c6'/>
<id>5efbd7165d6867aa376f23c20edcfe49e80518c6</id>
<content type='text'>
For functions that won't get optimized, it's useful to limit the number
of temporaries as much as possible.

Change-Id: I6e9be3129c064fdc4c01e1ec6f1617e901c05935
Reviewed-by: Erik Verbruggen &lt;erik.verbruggen@qt.io&gt;
Reviewed-by: Simon Hausmann &lt;simon.hausmann@qt.io&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
For functions that won't get optimized, it's useful to limit the number
of temporaries as much as possible.

Change-Id: I6e9be3129c064fdc4c01e1ec6f1617e901c05935
Reviewed-by: Erik Verbruggen &lt;erik.verbruggen@qt.io&gt;
Reviewed-by: Simon Hausmann &lt;simon.hausmann@qt.io&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>Disable loop peeling</title>
<updated>2017-05-12T13:26:12+00:00</updated>
<author>
<name>Lars Knoll</name>
<email>lars.knoll@qt.io</email>
</author>
<published>2017-05-09T06:58:28+00:00</published>
<link rel='alternate' type='text/html' href='https://code.qt.io/cgit/qt/qtdeclarative.git/commit/?id=defa2512a9128449e30d3b2c2fc42eaab201418b'/>
<id>defa2512a9128449e30d3b2c2fc42eaab201418b</id>
<content type='text'>
Loop peeling does in our current JIT not give us any
measurable performance benefits (no measurable diff
in any of the v8 benchmarks), and significantly
increases the size of the generated JIT code.

Change-Id: Icab7887300f9c1cd5891983cbfe5885fc2b4db91
Reviewed-by: Simon Hausmann &lt;simon.hausmann@qt.io&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Loop peeling does in our current JIT not give us any
measurable performance benefits (no measurable diff
in any of the v8 benchmarks), and significantly
increases the size of the generated JIT code.

Change-Id: Icab7887300f9c1cd5891983cbfe5885fc2b4db91
Reviewed-by: Simon Hausmann &lt;simon.hausmann@qt.io&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>Merge remote-tracking branch 'origin/5.8' into 5.9</title>
<updated>2017-04-27T13:16:00+00:00</updated>
<author>
<name>Simon Hausmann</name>
<email>simon.hausmann@qt.io</email>
</author>
<published>2017-04-23T15:36:41+00:00</published>
<link rel='alternate' type='text/html' href='https://code.qt.io/cgit/qt/qtdeclarative.git/commit/?id=c9728926a878a0e2301ee9d2bfb0ab23862d810b'/>
<id>c9728926a878a0e2301ee9d2bfb0ab23862d810b</id>
<content type='text'>
Conflicts:
	src/qtqmlglobal.h
	src/qtqmlglobal_p.h
	src/jsruntime/qv4global_p.h
	src/qml/compiler/compiler.pri
	src/qml/compiler/qv4ssa.cpp
	src/qmldevtools/qtqmldevtoolsglobal_p.h
	tests/auto/qml/qqmlecmascript/tst_qqmlecmascript.cpp

Change-Id: I55c5d015b2cb1053b83b9c61caaf004fb49ee486
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Conflicts:
	src/qtqmlglobal.h
	src/qtqmlglobal_p.h
	src/jsruntime/qv4global_p.h
	src/qml/compiler/compiler.pri
	src/qml/compiler/qv4ssa.cpp
	src/qmldevtools/qtqmldevtoolsglobal_p.h
	tests/auto/qml/qqmlecmascript/tst_qqmlecmascript.cpp

Change-Id: I55c5d015b2cb1053b83b9c61caaf004fb49ee486
</pre>
</div>
</content>
</entry>
<entry>
<title>Silence GCC 7 warnings about implicit fallthrough in Qt code</title>
<updated>2017-04-20T15:44:15+00:00</updated>
<author>
<name>Thiago Macieira</name>
<email>thiago.macieira@intel.com</email>
</author>
<published>2017-04-19T04:06:54+00:00</published>
<link rel='alternate' type='text/html' href='https://code.qt.io/cgit/qt/qtdeclarative.git/commit/?id=df66e9264debda2ec6838e69e620a54847c71b0a'/>
<id>df66e9264debda2ec6838e69e620a54847c71b0a</id>
<content type='text'>
This only deals with Qt code. MASM has a lot of those left. We should
just update from upstream instead to get the fixes.

qv4regalloc.cpp:660:52: warning: this statement may fall through [-Wimplicit-fallthrough=]
                 if (leftSource-&gt;type == DoubleType || rightSource-&gt;type == DoubleType) {
                     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
qv4regalloc.cpp:666:13: note: here
             case OpBitAnd:
             ^~~~

Change-Id: I7814054a102a407d876ffffd14b6b0e2d6b03689
Reviewed-by: Allan Sandfeld Jensen &lt;allan.jensen@qt.io&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
This only deals with Qt code. MASM has a lot of those left. We should
just update from upstream instead to get the fixes.

qv4regalloc.cpp:660:52: warning: this statement may fall through [-Wimplicit-fallthrough=]
                 if (leftSource-&gt;type == DoubleType || rightSource-&gt;type == DoubleType) {
                     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
qv4regalloc.cpp:666:13: note: here
             case OpBitAnd:
             ^~~~

Change-Id: I7814054a102a407d876ffffd14b6b0e2d6b03689
Reviewed-by: Allan Sandfeld Jensen &lt;allan.jensen@qt.io&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>V4: Fix issues with very small loops</title>
<updated>2017-04-18T07:53:48+00:00</updated>
<author>
<name>Erik Verbruggen</name>
<email>erik.verbruggen@qt.io</email>
</author>
<published>2017-04-06T13:42:51+00:00</published>
<link rel='alternate' type='text/html' href='https://code.qt.io/cgit/qt/qtdeclarative.git/commit/?id=8d0d1b11e381130dec12f46b959c3107c3f47160'/>
<id>8d0d1b11e381130dec12f46b959c3107c3f47160</id>
<content type='text'>
Loops consisting of just a single basic block (e.g. a do-while loop with
no nested loops or if statements) have a back-edge to themselves. There
were 2 problems:
- loop detection would create LoopInfo for any loop header referred to
  by blocks inside the loop (and a 1 block loop doesn't have body
  blocks), nor would it mark the loop header as such
- when splitting critical edges, the newly inserted block would not be
  marked as part of the loop

This is a problem specifically for 1 block loops: the block ends with
a CJUMP, so the back-edge is a critical edge. So the new block inserted
by edge splitting wouldn't be marked as belonging to the loop.

The end result was that the life-time intervals for temporaries that
are defined before the loop, but that are used inside the loop, and not
after the loop, would have their life-time ended before the loop ends
(instead of spanning the whole loop, *including* the back-edge). This
in turns could lead to the stack/register allocator re-using the storage
for that temporary, resulting in strange things happening.

Task-number: QTBUG-59012
Change-Id: Ic946c73913711272efea2151cb85350412ca2fde
Reviewed-by: Simon Hausmann &lt;simon.hausmann@qt.io&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Loops consisting of just a single basic block (e.g. a do-while loop with
no nested loops or if statements) have a back-edge to themselves. There
were 2 problems:
- loop detection would create LoopInfo for any loop header referred to
  by blocks inside the loop (and a 1 block loop doesn't have body
  blocks), nor would it mark the loop header as such
- when splitting critical edges, the newly inserted block would not be
  marked as part of the loop

This is a problem specifically for 1 block loops: the block ends with
a CJUMP, so the back-edge is a critical edge. So the new block inserted
by edge splitting wouldn't be marked as belonging to the loop.

The end result was that the life-time intervals for temporaries that
are defined before the loop, but that are used inside the loop, and not
after the loop, would have their life-time ended before the loop ends
(instead of spanning the whole loop, *including* the back-edge). This
in turns could lead to the stack/register allocator re-using the storage
for that temporary, resulting in strange things happening.

Task-number: QTBUG-59012
Change-Id: Ic946c73913711272efea2151cb85350412ca2fde
Reviewed-by: Simon Hausmann &lt;simon.hausmann@qt.io&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>Merge remote-tracking branch 'origin/5.8' into 5.9</title>
<updated>2017-02-24T10:48:14+00:00</updated>
<author>
<name>Liang Qi</name>
<email>liang.qi@qt.io</email>
</author>
<published>2017-02-24T09:14:57+00:00</published>
<link rel='alternate' type='text/html' href='https://code.qt.io/cgit/qt/qtdeclarative.git/commit/?id=b1fa22c1683d9f6cedb001f5ef8a0dac71868935'/>
<id>b1fa22c1683d9f6cedb001f5ef8a0dac71868935</id>
<content type='text'>
Conflicts:
	src/qml/compiler/qv4ssa.cpp
	src/quick/accessible/qaccessiblequickview_p.h
	src/quick/items/qquickmousearea.cpp
	src/quick/util/qquickanimatorjob.cpp
	tools/qmlplugindump/main.cpp

Change-Id: I84474cf39895b9b757403971d2e9196e8c9d1809
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Conflicts:
	src/qml/compiler/qv4ssa.cpp
	src/quick/accessible/qaccessiblequickview_p.h
	src/quick/items/qquickmousearea.cpp
	src/quick/util/qquickanimatorjob.cpp
	tools/qmlplugindump/main.cpp

Change-Id: I84474cf39895b9b757403971d2e9196e8c9d1809
</pre>
</div>
</content>
</entry>
<entry>
<title>Fix move ordering while resolving edges in register allocation</title>
<updated>2017-02-04T12:03:00+00:00</updated>
<author>
<name>Erik Verbruggen</name>
<email>erik.verbruggen@qt.io</email>
</author>
<published>2017-02-03T14:42:08+00:00</published>
<link rel='alternate' type='text/html' href='https://code.qt.io/cgit/qt/qtdeclarative.git/commit/?id=04c98022d934b5ba0a6492e3556416386ce5d70e'/>
<id>04c98022d934b5ba0a6492e3556416386ce5d70e</id>
<content type='text'>
When register allocation on an IR in SSA form is done, the last step is
to turn the Phi nodes into moves and swaps and put those instructions in
the predecessors. As the Phi nodes are conceptually "executed in
parallel", this can result in cycles:
  r1 &lt;- r0
  r0 &lt;- r1
These have to be turned into a swap instruction. Also, the moves have to
be ordered in order to make sure that no values are overwritten:
  r1 &lt;- r0
  r2 &lt;- r1
Here the two moves need to be switched. The comments in the code
document the algorithm.

Change-Id: I4151988681f7554b00a3eb70d224e6e2f29ebf04
Reviewed-by: Simon Hausmann &lt;simon.hausmann@qt.io&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
When register allocation on an IR in SSA form is done, the last step is
to turn the Phi nodes into moves and swaps and put those instructions in
the predecessors. As the Phi nodes are conceptually "executed in
parallel", this can result in cycles:
  r1 &lt;- r0
  r0 &lt;- r1
These have to be turned into a swap instruction. Also, the moves have to
be ordered in order to make sure that no values are overwritten:
  r1 &lt;- r0
  r2 &lt;- r1
Here the two moves need to be switched. The comments in the code
document the algorithm.

Change-Id: I4151988681f7554b00a3eb70d224e6e2f29ebf04
Reviewed-by: Simon Hausmann &lt;simon.hausmann@qt.io&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>Prevent propagating results of a phi node into another phi node</title>
<updated>2017-02-01T15:12:53+00:00</updated>
<author>
<name>Erik Verbruggen</name>
<email>erik.verbruggen@qt.io</email>
</author>
<published>2017-02-01T13:55:03+00:00</published>
<link rel='alternate' type='text/html' href='https://code.qt.io/cgit/qt/qtdeclarative.git/commit/?id=9a009ccde8bfc522578533a114396a5e762d6d8f'/>
<id>9a009ccde8bfc522578533a114396a5e762d6d8f</id>
<content type='text'>
.. of the same basic block. Phi nodes are "executed in parallel", so
such a situation will lead to interesting results.

Task-number: QTBUG-58553
Change-Id: Ibed439df91d46ea416dcb0a20457310e91dce8b4
Reviewed-by: Simon Hausmann &lt;simon.hausmann@qt.io&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
.. of the same basic block. Phi nodes are "executed in parallel", so
such a situation will lead to interesting results.

Task-number: QTBUG-58553
Change-Id: Ibed439df91d46ea416dcb0a20457310e91dce8b4
Reviewed-by: Simon Hausmann &lt;simon.hausmann@qt.io&gt;
</pre>
</div>
</content>
</entry>
</feed>
