Fix constant folding for simple binary expression
authorRoberto Raggi <roberto.raggi@nokia.com>
Thu, 29 Mar 2012 09:46:41 +0000 (11:46 +0200)
committerQt by Nokia <qt-info@nokia.com>
Tue, 3 Apr 2012 14:22:04 +0000 (16:22 +0200)
commit373d78837d1d5049c5b1c2790d6f4023e6ecf974
tree0b4b78c1024d886ea0cebcdce59696c9edf90c7f
parent187fe50cf5c17a6ebf73d209866364a903ca2084
Fix constant folding for simple binary expression

This change improves constant folding of numeric and
string literals.

Also, we go back generating quadruples instead of
IR-tree-expressions. This is kind of needed to reduce register
pressure in the V4 VM. That is, V4 has typed registers so before
reusing a register we need to look at the type and eventually
dispose its contents (e.g. when a QString or a QUrl is stored
in the register). Unfortunately, we can't effort to have all
these checks in the V4 instructions. So we change `binop'
to generate literals (e.g. CONST or STRING) or a TEMP (aka
a preassigned register that cannot be reused).

For exmaple, the IR code generated for

  Rectangle {
    color: "b" + "l" + ("u" + "e")
    width: 10 + 20 + 30
  }

is

====================
line: 3 column: 10
L0x811ca10:
t0 = string_to_color("blue");
return t0;

====================
line: 4 column: 10
L0x811ca50:
return 60;

Change-Id: I4d8482ddab9193d8469bda6461bfb2e5a3eeb197
Reviewed-by: Aaron Kennedy <aaron.kennedy@nokia.com>
src/qml/qml/v4/qv4compiler.cpp
src/qml/qml/v4/qv4ir.cpp
src/qml/qml/v4/qv4irbuilder.cpp