[JS IR] Implement MoveTemporaryVariableDeclarationToAssignment optimization

This commit is contained in:
Alexander Korepanov
2023-07-06 17:24:28 +02:00
committed by Space Team
parent 25f7b81d51
commit 524c475834
23 changed files with 929 additions and 25 deletions
@@ -0,0 +1,105 @@
function getArg(x) {
return x;
}
function test1(o, k) {
if (o != k) {
var $tmp1 = getArg(k).toUpperCase();
var $tmp2 = getArg(o).toUpperCase();
var O = getArg($tmp2);
var K = getArg($tmp1);
return O + K;
}
}
function test2(o, k) {
if (o != k) {
var $tmp1 = getArg(k).toUpperCase();
var $tmp2 = getArg(o).toUpperCase();
if (o) {
var O = getArg($tmp2);
var K = getArg($tmp1);
return O + K;
}
}
}
function test3(o, k) {
if (o != k) {
var $tmp1 = getArg(k).toUpperCase();
if (o) {
var $tmp2 = getArg(o).toUpperCase();
var O = getArg($tmp2);
var K = getArg($tmp1);
return O + K;
}
}
}
function test4(o, k) {
var $tmp1;
var $tmp2;
if (o != k) {
$tmp1 = getArg(k).toUpperCase();
$tmp2 = getArg(o).toUpperCase();
}
var O = getArg($tmp2);
var K = getArg($tmp1);
return O + K;
}
function test5(ok) {
var $tmp;
if (ok) {
if (ok) {
if (ok) {
if (ok) {
$tmp = getArg(ok).toUpperCase();
}
}
var OK = getArg($tmp);
}
}
return OK
}
function test6(ok) {
if (ok) {
if (ok) {
var $tmp = 1
if (ok) {
if (ok) {
$tmp = getArg(ok).toUpperCase();
}
var OK = getArg($tmp);
}
}
}
return OK
}
function box() {
if (test1("o", "k") != "OK") {
return "Fail test1"
}
if (test2("o", "k") != "OK") {
return "Fail test2"
}
if (test3("o", "k") != "OK") {
return "Fail test3"
}
if (test4("o", "k") != "OK") {
return "Fail test4"
}
if (test5("ok") != "OK") {
return "Fail test5"
}
if (test6("ok") != "OK") {
return "Fail test6"
}
return "OK"
}
@@ -0,0 +1,112 @@
function getArg(x) {
return x;
}
function test1(o, k) {
var $tmp1;
var $tmp2;
if (o != k) {
$tmp1 = getArg(k).toUpperCase();
$tmp2 = getArg(o).toUpperCase();
var O = getArg($tmp2);
var K = getArg($tmp1);
return O + K;
}
}
function test2(o, k) {
var $tmp1;
var $tmp2;
if (o != k) {
$tmp1 = getArg(k).toUpperCase();
$tmp2 = getArg(o).toUpperCase();
if (o) {
var O = getArg($tmp2);
var K = getArg($tmp1);
return O + K;
}
}
}
function test3(o, k) {
var $tmp1;
var $tmp2;
if (o != k) {
$tmp1 = getArg(k).toUpperCase();
if (o) {
$tmp2 = getArg(o).toUpperCase();
var O = getArg($tmp2);
var K = getArg($tmp1);
return O + K;
}
}
}
function test4(o, k) {
var $tmp1;
var $tmp2;
if (o != k) {
$tmp1 = getArg(k).toUpperCase();
$tmp2 = getArg(o).toUpperCase();
}
var O = getArg($tmp2);
var K = getArg($tmp1);
return O + K;
}
function test5(ok) {
var $tmp;
if (ok) {
if (ok) {
if (ok) {
if (ok) {
$tmp = getArg(ok).toUpperCase();
}
}
var OK = getArg($tmp);
}
}
return OK
}
function test6(ok) {
var $tmp;
if (ok) {
if (ok) {
$tmp = 1
if (ok) {
if (ok) {
$tmp = getArg(ok).toUpperCase();
}
var OK = getArg($tmp);
}
}
}
return OK
}
function box() {
if (test1("o", "k") != "OK") {
return "Fail test1"
}
if (test2("o", "k") != "OK") {
return "Fail test2"
}
if (test3("o", "k") != "OK") {
return "Fail test3"
}
if (test4("o", "k") != "OK") {
return "Fail test4"
}
if (test5("ok") != "OK") {
return "Fail test5"
}
if (test6("ok") != "OK") {
return "Fail test6"
}
return "OK"
}
@@ -0,0 +1,58 @@
function getArg(x) {
return x;
}
function test1(ok) {
var $tmp
getArg($tmp)
$tmp = getArg(ok).toUpperCase();
return $tmp
}
function test2(ok) {
var $tmp
if ($tmp === undefined) {
$tmp = getArg(ok).toUpperCase();
}
return $tmp
}
function test3(ok) {
var $tmp
if (ok) {
if (ok) {
getArg($tmp)
$tmp = getArg(ok).toUpperCase();
}
}
return $tmp
}
function test4(ok) {
var $tmp
if (ok) {
if (ok) {
getArg($tmp)
}
$tmp = getArg(ok).toUpperCase();
}
return $tmp
}
function box() {
if (test1("ok") != "OK") {
return "Fail test1"
}
if (test2("ok") != "OK") {
return "Fail test2"
}
if (test3("ok") != "OK") {
return "Fail test3"
}
if (test4("ok") != "OK") {
return "Fail test4"
}
return "OK"
}
@@ -0,0 +1,58 @@
function getArg(x) {
return x;
}
function test1(ok) {
var $tmp
getArg($tmp)
$tmp = getArg(ok).toUpperCase();
return $tmp
}
function test2(ok) {
var $tmp
if ($tmp === undefined) {
$tmp = getArg(ok).toUpperCase();
}
return $tmp
}
function test3(ok) {
var $tmp
if (ok) {
if (ok) {
getArg($tmp)
$tmp = getArg(ok).toUpperCase();
}
}
return $tmp
}
function test4(ok) {
var $tmp
if (ok) {
if (ok) {
getArg($tmp)
}
$tmp = getArg(ok).toUpperCase();
}
return $tmp
}
function box() {
if (test1("ok") != "OK") {
return "Fail test1"
}
if (test2("ok") != "OK") {
return "Fail test2"
}
if (test3("ok") != "OK") {
return "Fail test3"
}
if (test4("ok") != "OK") {
return "Fail test4"
}
return "OK"
}
@@ -0,0 +1,16 @@
function getArg(x) {
return x;
}
function test(o, k) {
var $tmp1 = getArg(k).toUpperCase();
var $tmp2 = getArg(o).toUpperCase();
var O = getArg($tmp2);
var K = getArg($tmp1);
return O + K;
}
function box() {
return test("o", "k");
}
@@ -0,0 +1,18 @@
function getArg(x) {
return x;
}
function test(o, k) {
var $tmp1;
var $tmp2;
$tmp1 = getArg(k).toUpperCase();
$tmp2 = getArg(o).toUpperCase();
var O = getArg($tmp2);
var K = getArg($tmp1);
return O + K;
}
function box() {
return test("o", "k");
}
@@ -0,0 +1,109 @@
function getArg(x) {
return x;
}
function test1(o, k) {
var $tmp1;
var $tmp2;
if (o != k) {
$tmp1 = getArg(k).toUpperCase();
$tmp2 = getArg(o).toUpperCase();
} else {
$tmp1 = getArg(k)
$tmp2 = getArg(o)
}
var O = getArg($tmp2);
var K = getArg($tmp1);
return O + K;
}
function test2(o, k) {
var $tmp1;
var $tmp2;
if (o != k) {
if (o) {
$tmp1 = getArg(k).toUpperCase();
$tmp2 = getArg(o).toUpperCase();
} else {
$tmp1 = getArg(k)
$tmp2 = getArg(o)
}
var O = getArg($tmp2);
var K = getArg($tmp1);
}
return O + K;
}
function test3(o, k) {
if (o != k) {
var $tmp1 = getArg(k).toUpperCase();
var $tmp2 = getArg(k).toUpperCase();
if (o) {
$tmp1 = getArg(k).toUpperCase();
$tmp2 = getArg(o).toUpperCase();
} else {
$tmp1 = getArg(k)
$tmp2 = getArg(o)
}
var O = getArg($tmp2);
var K = getArg($tmp1);
}
return O + K;
}
function test4(ok) {
if (ok) {
var $tmp1 = getArg(ok).toUpperCase();
if (ok) {
if (ok) {
getArg($tmp1)
}
} else {
getArg($tmp1)
}
var OK = getArg($tmp1);
}
return OK;
}
function test5(ok) {
if (ok) {
var $tmp1 = 0
if (ok) {
$tmp1 = 1
if (ok) {
getArg($tmp1)
} else {
$tmp1 = 2
}
$tmp1 = getArg(ok).toUpperCase();
} else {
getArg($tmp1)
}
var OK = getArg($tmp1);
}
return OK;
}
function box() {
if (test1("o", "k") != "OK") {
return "Fail test1"
}
if (test2("o", "k") != "OK") {
return "Fail test2"
}
if (test3("o", "k") != "OK") {
return "Fail test3"
}
if (test4("OK") != "OK") {
return "Fail test4"
}
if (test5("OK") != "OK") {
return "Fail test5"
}
return "OK"
}
@@ -0,0 +1,114 @@
function getArg(x) {
return x;
}
function test1(o, k) {
var $tmp1;
var $tmp2;
if (o != k) {
$tmp1 = getArg(k).toUpperCase();
$tmp2 = getArg(o).toUpperCase();
} else {
$tmp1 = getArg(k)
$tmp2 = getArg(o)
}
var O = getArg($tmp2);
var K = getArg($tmp1);
return O + K;
}
function test2(o, k) {
var $tmp1;
var $tmp2;
if (o != k) {
if (o) {
$tmp1 = getArg(k).toUpperCase();
$tmp2 = getArg(o).toUpperCase();
} else {
$tmp1 = getArg(k)
$tmp2 = getArg(o)
}
var O = getArg($tmp2);
var K = getArg($tmp1);
}
return O + K;
}
function test3(o, k) {
var $tmp1;
var $tmp2;
if (o != k) {
$tmp1 = getArg(k).toUpperCase();
$tmp2 = getArg(k).toUpperCase();
if (o) {
$tmp1 = getArg(k).toUpperCase();
$tmp2 = getArg(o).toUpperCase();
} else {
$tmp1 = getArg(k)
$tmp2 = getArg(o)
}
var O = getArg($tmp2);
var K = getArg($tmp1);
}
return O + K;
}
function test4(ok) {
var $tmp1;
if (ok) {
$tmp1 = getArg(ok).toUpperCase();
if (ok) {
if (ok) {
getArg($tmp1)
}
} else {
getArg($tmp1)
}
var OK = getArg($tmp1);
}
return OK;
}
function test5(ok) {
var $tmp1;
if (ok) {
$tmp1 = 0
if (ok) {
$tmp1 = 1
if (ok) {
getArg($tmp1)
} else {
$tmp1 = 2
}
$tmp1 = getArg(ok).toUpperCase();
} else {
getArg($tmp1)
}
var OK = getArg($tmp1);
}
return OK;
}
function box() {
if (test1("o", "k") != "OK") {
return "Fail test1"
}
if (test2("o", "k") != "OK") {
return "Fail test2"
}
if (test3("o", "k") != "OK") {
return "Fail test3"
}
if (test4("OK") != "OK") {
return "Fail test4"
}
if (test5("OK") != "OK") {
return "Fail test5"
}
return "OK"
}
@@ -3,18 +3,18 @@ function f(x) {
}
function box() {
var result1, result2, $a, $b;
var $a, $b;
if (f(true)) {
$a = "1";
}
result1 = $a;
var result1 = $a;
if (result1 !== "1") return "fail1: " + result1;
if (f(false)) {
$b = "1";
}
result2 = $b;
var result2 = $b;
if (result2 !== void 0) return "fail2: " + result2;
return "OK";
@@ -13,32 +13,28 @@ function testIrregular() {
}
function testDoubleUse1() {
var $b;
$b = f("testDoubleUse1");
var $b = f("testDoubleUse1");
var result = $b;
f($b);
return result;
}
function testDoubleUse2() {
var $d;
$d = f("testDoubleUse2");
var $d = f("testDoubleUse2");
var result = $d;
f($d);
return result;
}
function testDoubleUse3() {
var $a;
$a = f("testDoubleUse3");
var $a = f("testDoubleUse3");
var result = $a;
f($a);
return result;
}
function testCircular() {
var $b;
$b = f("testCircular");
var $b = f("testCircular");
$b = $b;
var result = $b;
return result;
@@ -1,9 +1,8 @@
var result = "";
function box() {
var $tmp;
$tmp = result;
var $tmp = result;
result += "fail";
result = $tmp + "OK";
return result;
}
}