aboutsummaryrefslogtreecommitdiffstats
path: root/test
diff options
context:
space:
mode:
authorchriseth <chris@ethereum.org>2018-01-23 07:06:55 +0800
committerchriseth <chris@ethereum.org>2018-10-17 20:11:20 +0800
commit9fb5feed0513012aed38d45ccdb421e5b8d96838 (patch)
treecc570afcb658c11c6115de2741646e9d8b04bc78 /test
parentba1588828f45b242bc09899e4f307f7fda9c5ab6 (diff)
downloaddexon-solidity-9fb5feed0513012aed38d45ccdb421e5b8d96838.tar.gz
dexon-solidity-9fb5feed0513012aed38d45ccdb421e5b8d96838.tar.zst
dexon-solidity-9fb5feed0513012aed38d45ccdb421e5b8d96838.zip
Use metrics in the full inliner.
Diffstat (limited to 'test')
-rw-r--r--test/libyul/yulOptimizerTests/fullInliner/large_function_multi_use.yul43
-rw-r--r--test/libyul/yulOptimizerTests/fullInliner/large_function_single_use.yul36
-rw-r--r--test/libyul/yulOptimizerTests/fullInliner/recursion.yul18
3 files changed, 97 insertions, 0 deletions
diff --git a/test/libyul/yulOptimizerTests/fullInliner/large_function_multi_use.yul b/test/libyul/yulOptimizerTests/fullInliner/large_function_multi_use.yul
new file mode 100644
index 00000000..0972ac56
--- /dev/null
+++ b/test/libyul/yulOptimizerTests/fullInliner/large_function_multi_use.yul
@@ -0,0 +1,43 @@
+{
+ function f(a) -> b {
+ let x := mload(a)
+ b := sload(x)
+ let c := 3
+ mstore(mul(a, b), mload(x))
+ let y := add(a, x)
+ sstore(y, 10)
+ }
+ let a := mload(2)
+ let a2 := 2
+ // This should not be inlined because it is not a constant
+ let r := f(a)
+ // This should be inlined because it is a constant
+ let t := f(a2)
+}
+// ----
+// fullInliner
+// {
+// {
+// let a_1 := mload(2)
+// let a2 := 2
+// let r := f(a_1)
+// let f_a := a2
+// let f_b
+// let f_x := mload(f_a)
+// f_b := sload(f_x)
+// let f_c := 3
+// mstore(mul(f_a, f_b), mload(f_x))
+// let f_y := add(f_a, f_x)
+// sstore(f_y, 10)
+// let t := f_b
+// }
+// function f(a) -> b
+// {
+// let x := mload(a)
+// b := sload(x)
+// let c := 3
+// mstore(mul(a, b), mload(x))
+// let y := add(a, x)
+// sstore(y, 10)
+// }
+// }
diff --git a/test/libyul/yulOptimizerTests/fullInliner/large_function_single_use.yul b/test/libyul/yulOptimizerTests/fullInliner/large_function_single_use.yul
new file mode 100644
index 00000000..3302a35c
--- /dev/null
+++ b/test/libyul/yulOptimizerTests/fullInliner/large_function_single_use.yul
@@ -0,0 +1,36 @@
+{
+ function f(a) -> b {
+ let x := mload(a)
+ b := sload(x)
+ let c := 3
+ mstore(mul(a, b), mload(x))
+ let y := add(a, x)
+ sstore(y, 10)
+ }
+ // Single-use functions are always inlined.
+ let r := f(mload(1))
+}
+// ----
+// fullInliner
+// {
+// {
+// let f_a := mload(1)
+// let f_b
+// let f_x := mload(f_a)
+// f_b := sload(f_x)
+// let f_c := 3
+// mstore(mul(f_a, f_b), mload(f_x))
+// let f_y := add(f_a, f_x)
+// sstore(f_y, 10)
+// let r := f_b
+// }
+// function f(a) -> b
+// {
+// let x := mload(a)
+// b := sload(x)
+// let c := 3
+// mstore(mul(a, b), mload(x))
+// let y := add(a, x)
+// sstore(y, 10)
+// }
+// }
diff --git a/test/libyul/yulOptimizerTests/fullInliner/recursion.yul b/test/libyul/yulOptimizerTests/fullInliner/recursion.yul
new file mode 100644
index 00000000..3e9a8021
--- /dev/null
+++ b/test/libyul/yulOptimizerTests/fullInliner/recursion.yul
@@ -0,0 +1,18 @@
+{
+ function f(a) {
+ f(1)
+ }
+ f(mload(0))
+}
+// ----
+// fullInliner
+// {
+// {
+// let f_a := mload(0)
+// f(1)
+// }
+// function f(a)
+// {
+// f(1)
+// }
+// }