aboutsummaryrefslogtreecommitdiffstats
path: root/test/libyul/yulOptimizerTests/ssaAndBack
diff options
context:
space:
mode:
authorDaniel Kirchner <daniel@ekpyron.org>2019-01-17 21:57:55 +0800
committerDaniel Kirchner <daniel@ekpyron.org>2019-01-18 03:37:43 +0800
commitfd1658572463a246f602ae0fe161430429daa9e0 (patch)
tree40f3c0e5adf7a424e35b1218376a9ae9f7129811 /test/libyul/yulOptimizerTests/ssaAndBack
parent6de2d92f20d48d38797a628ee35e7615170cd63f (diff)
downloaddexon-solidity-fd1658572463a246f602ae0fe161430429daa9e0.tar
dexon-solidity-fd1658572463a246f602ae0fe161430429daa9e0.tar.gz
dexon-solidity-fd1658572463a246f602ae0fe161430429daa9e0.tar.bz2
dexon-solidity-fd1658572463a246f602ae0fe161430429daa9e0.tar.lz
dexon-solidity-fd1658572463a246f602ae0fe161430429daa9e0.tar.xz
dexon-solidity-fd1658572463a246f602ae0fe161430429daa9e0.tar.zst
dexon-solidity-fd1658572463a246f602ae0fe161430429daa9e0.zip
Undo second SSA transformation and add more tests.
Diffstat (limited to 'test/libyul/yulOptimizerTests/ssaAndBack')
-rw-r--r--test/libyul/yulOptimizerTests/ssaAndBack/for_loop.yul36
-rw-r--r--test/libyul/yulOptimizerTests/ssaAndBack/multi_assign.yul18
-rw-r--r--test/libyul/yulOptimizerTests/ssaAndBack/multi_assign_if.yul22
-rw-r--r--test/libyul/yulOptimizerTests/ssaAndBack/multi_assign_multi_var_if.yul25
-rw-r--r--test/libyul/yulOptimizerTests/ssaAndBack/multi_assign_multi_var_switch.yul38
-rw-r--r--test/libyul/yulOptimizerTests/ssaAndBack/multi_assign_switch.yul32
-rw-r--r--test/libyul/yulOptimizerTests/ssaAndBack/simple.yul10
-rw-r--r--test/libyul/yulOptimizerTests/ssaAndBack/single_assign_if.yul18
-rw-r--r--test/libyul/yulOptimizerTests/ssaAndBack/single_assign_switch.yul24
-rw-r--r--test/libyul/yulOptimizerTests/ssaAndBack/two_vars.yul20
10 files changed, 235 insertions, 8 deletions
diff --git a/test/libyul/yulOptimizerTests/ssaAndBack/for_loop.yul b/test/libyul/yulOptimizerTests/ssaAndBack/for_loop.yul
new file mode 100644
index 00000000..18498e61
--- /dev/null
+++ b/test/libyul/yulOptimizerTests/ssaAndBack/for_loop.yul
@@ -0,0 +1,36 @@
+{
+ for {
+ let a := mload(0)
+ let b := mload(1)
+ }
+ lt(mload(a),mload(b))
+ {
+ a := mload(b)
+ }
+ {
+ b := mload(a)
+ a := mload(b)
+ a := mload(b)
+ a := mload(b)
+ b := mload(a)
+ }
+}
+// ----
+// ssaAndBack
+// {
+// for {
+// let a := mload(0)
+// let b := mload(1)
+// }
+// lt(mload(a), mload(b))
+// {
+// a := mload(b)
+// }
+// {
+// let b_3 := mload(a)
+// pop(mload(b_3))
+// pop(mload(b_3))
+// let a_6 := mload(b_3)
+// b := mload(a_6)
+// }
+// }
diff --git a/test/libyul/yulOptimizerTests/ssaAndBack/multi_assign.yul b/test/libyul/yulOptimizerTests/ssaAndBack/multi_assign.yul
new file mode 100644
index 00000000..23c433d1
--- /dev/null
+++ b/test/libyul/yulOptimizerTests/ssaAndBack/multi_assign.yul
@@ -0,0 +1,18 @@
+{
+ let a := mload(0)
+ a := mload(1)
+ a := mload(2)
+ a := mload(3)
+ a := mload(4)
+ mstore(a, 0)
+}
+// ----
+// ssaAndBack
+// {
+// pop(mload(0))
+// pop(mload(1))
+// pop(mload(2))
+// pop(mload(3))
+// let a_5 := mload(4)
+// mstore(a_5, 0)
+// }
diff --git a/test/libyul/yulOptimizerTests/ssaAndBack/multi_assign_if.yul b/test/libyul/yulOptimizerTests/ssaAndBack/multi_assign_if.yul
new file mode 100644
index 00000000..fd5981ef
--- /dev/null
+++ b/test/libyul/yulOptimizerTests/ssaAndBack/multi_assign_if.yul
@@ -0,0 +1,22 @@
+{
+ let a := mload(0)
+ if mload(1)
+ {
+ a := mload(1)
+ a := mload(2)
+ a := mload(3)
+ }
+ mstore(a, 0)
+}
+// ----
+// ssaAndBack
+// {
+// let a := mload(0)
+// if mload(1)
+// {
+// pop(mload(1))
+// pop(mload(2))
+// a := mload(3)
+// }
+// mstore(a, 0)
+// }
diff --git a/test/libyul/yulOptimizerTests/ssaAndBack/multi_assign_multi_var_if.yul b/test/libyul/yulOptimizerTests/ssaAndBack/multi_assign_multi_var_if.yul
new file mode 100644
index 00000000..b0b3efb5
--- /dev/null
+++ b/test/libyul/yulOptimizerTests/ssaAndBack/multi_assign_multi_var_if.yul
@@ -0,0 +1,25 @@
+{
+ let a := mload(0)
+ let b := mload(1)
+ if mload(2) {
+ a := mload(b)
+ b := mload(a)
+ a := mload(b)
+ b := mload(a)
+ }
+ mstore(a, b)
+}
+// ----
+// ssaAndBack
+// {
+// let a := mload(0)
+// let b := mload(1)
+// if mload(2)
+// {
+// let a_3 := mload(b)
+// let b_4 := mload(a_3)
+// a := mload(b_4)
+// b := mload(a)
+// }
+// mstore(a, b)
+// }
diff --git a/test/libyul/yulOptimizerTests/ssaAndBack/multi_assign_multi_var_switch.yul b/test/libyul/yulOptimizerTests/ssaAndBack/multi_assign_multi_var_switch.yul
new file mode 100644
index 00000000..50f56b87
--- /dev/null
+++ b/test/libyul/yulOptimizerTests/ssaAndBack/multi_assign_multi_var_switch.yul
@@ -0,0 +1,38 @@
+{
+ let a := mload(0)
+ let b := mload(1)
+ switch mload(2)
+ case 0 {
+ a := mload(b)
+ b := mload(a)
+ a := mload(b)
+ b := mload(a)
+ }
+ default {
+ b := mload(a)
+ a := mload(b)
+ b := mload(a)
+ a := mload(b)
+ }
+ mstore(a, b)
+}
+// ----
+// ssaAndBack
+// {
+// let a := mload(0)
+// let b := mload(1)
+// switch mload(2)
+// case 0 {
+// let a_3 := mload(b)
+// let b_4 := mload(a_3)
+// a := mload(b_4)
+// b := mload(a)
+// }
+// default {
+// let b_7 := mload(a)
+// let a_8 := mload(b_7)
+// b := mload(a_8)
+// a := mload(b)
+// }
+// mstore(a, b)
+// }
diff --git a/test/libyul/yulOptimizerTests/ssaAndBack/multi_assign_switch.yul b/test/libyul/yulOptimizerTests/ssaAndBack/multi_assign_switch.yul
new file mode 100644
index 00000000..1efbbde7
--- /dev/null
+++ b/test/libyul/yulOptimizerTests/ssaAndBack/multi_assign_switch.yul
@@ -0,0 +1,32 @@
+{
+ let a := mload(0)
+ switch mload(1)
+ case 0 {
+ a := mload(1)
+ a := mload(2)
+ a := mload(3)
+ }
+ default {
+ a := mload(4)
+ a := mload(5)
+ a := mload(6)
+ }
+ mstore(a, 0)
+}
+// ----
+// ssaAndBack
+// {
+// let a := mload(0)
+// switch mload(1)
+// case 0 {
+// pop(mload(1))
+// pop(mload(2))
+// a := mload(3)
+// }
+// default {
+// pop(mload(4))
+// pop(mload(5))
+// a := mload(6)
+// }
+// mstore(a, 0)
+// }
diff --git a/test/libyul/yulOptimizerTests/ssaAndBack/simple.yul b/test/libyul/yulOptimizerTests/ssaAndBack/simple.yul
index 23c433d1..912940c5 100644
--- a/test/libyul/yulOptimizerTests/ssaAndBack/simple.yul
+++ b/test/libyul/yulOptimizerTests/ssaAndBack/simple.yul
@@ -1,18 +1,12 @@
{
let a := mload(0)
a := mload(1)
- a := mload(2)
- a := mload(3)
- a := mload(4)
mstore(a, 0)
}
// ----
// ssaAndBack
// {
// pop(mload(0))
-// pop(mload(1))
-// pop(mload(2))
-// pop(mload(3))
-// let a_5 := mload(4)
-// mstore(a_5, 0)
+// let a_2 := mload(1)
+// mstore(a_2, 0)
// }
diff --git a/test/libyul/yulOptimizerTests/ssaAndBack/single_assign_if.yul b/test/libyul/yulOptimizerTests/ssaAndBack/single_assign_if.yul
new file mode 100644
index 00000000..5185245c
--- /dev/null
+++ b/test/libyul/yulOptimizerTests/ssaAndBack/single_assign_if.yul
@@ -0,0 +1,18 @@
+{
+ let a := mload(0)
+ if mload(1)
+ {
+ a := mload(1)
+ }
+ mstore(a, 0)
+}
+// ----
+// ssaAndBack
+// {
+// let a := mload(0)
+// if mload(1)
+// {
+// a := mload(1)
+// }
+// mstore(a, 0)
+// }
diff --git a/test/libyul/yulOptimizerTests/ssaAndBack/single_assign_switch.yul b/test/libyul/yulOptimizerTests/ssaAndBack/single_assign_switch.yul
new file mode 100644
index 00000000..e0e53b3f
--- /dev/null
+++ b/test/libyul/yulOptimizerTests/ssaAndBack/single_assign_switch.yul
@@ -0,0 +1,24 @@
+{
+ let a := mload(0)
+ switch mload(1)
+ case 0 {
+ a := mload(1)
+ }
+ default {
+ a := mload(2)
+ }
+ mstore(a, 0)
+}
+// ----
+// ssaAndBack
+// {
+// let a := mload(0)
+// switch mload(1)
+// case 0 {
+// a := mload(1)
+// }
+// default {
+// a := mload(2)
+// }
+// mstore(a, 0)
+// }
diff --git a/test/libyul/yulOptimizerTests/ssaAndBack/two_vars.yul b/test/libyul/yulOptimizerTests/ssaAndBack/two_vars.yul
new file mode 100644
index 00000000..85325fb9
--- /dev/null
+++ b/test/libyul/yulOptimizerTests/ssaAndBack/two_vars.yul
@@ -0,0 +1,20 @@
+{
+ let a := mload(0)
+ let b := mload(a)
+ a := mload(b)
+ b := mload(a)
+ a := mload(b)
+ b := mload(a)
+ mstore(a, b)
+}
+// ----
+// ssaAndBack
+// {
+// let a := mload(0)
+// let b := mload(a)
+// let a_3 := mload(b)
+// let b_4 := mload(a_3)
+// let a_5 := mload(b_4)
+// let b_6 := mload(a_5)
+// mstore(a_5, b_6)
+// }