Block deepener

This commit is contained in:
Daniel Kirchner
2019-05-13 17:30:00 +02:00
parent d01bc4039d
commit 894df0fba9
9 changed files with 212 additions and 0 deletions
+6
View File
@@ -19,6 +19,7 @@
#include <test/Options.h>
#include <libyul/optimiser/BlockDeepener.h>
#include <libyul/optimiser/BlockFlattener.h>
#include <libyul/optimiser/BlockOutliner.h>
#include <libyul/optimiser/VarDeclInitializer.h>
@@ -112,6 +113,11 @@ TestCase::TestResult YulOptimizerTest::run(ostream& _stream, string const& _line
if (m_optimizerStep == "disambiguator")
disambiguate();
else if (m_optimizerStep == "blockDeepener")
{
disambiguate();
BlockDeepener{}(*m_ast);
}
else if (m_optimizerStep == "blockFlattener")
{
disambiguate();
@@ -0,0 +1,27 @@
{
let _1 := mload(0)
let f_a := mload(1)
let f_r
f_a := mload(f_a)
f_r := add(f_a, calldatasize())
let z := mload(2)
}
// ====
// step: blockDeepener
// ----
// {
// let _1 := mload(0)
// {
// let f_a := mload(1)
// {
// let f_r
// {
// f_a := mload(f_a)
// {
// f_r := add(f_a, calldatasize())
// { let z := mload(2) }
// }
// }
// }
// }
// }
@@ -0,0 +1,14 @@
{
for { let a := 1 } iszero(eq(a, 10)) { a := add(a, 1) }
{ a := add(a, 1) a := add(a,1) }
}
// ====
// step: blockDeepener
// ----
// {
// for { let a := 1 } iszero(eq(a, 10)) { a := add(a, 1) }
// {
// a := add(a, 1)
// { a := add(a, 1) }
// }
// }
@@ -0,0 +1,19 @@
{
if add(mload(7), sload(mload(3)))
{
let y := add(mload(3), 3)
y := add(y, 7)
}
let t := add(3, 9)
}
// ====
// step: blockDeepener
// ----
// {
// if add(mload(7), sload(mload(3)))
// {
// let y := add(mload(3), 3)
// { y := add(y, 7) }
// }
// { let t := add(3, 9) }
// }
@@ -0,0 +1,35 @@
{
let a := 3
let b := 4
a := add(b, 3)
let c := 5
b := add(b, 4)
c := add(a, 5)
b := add(a, b)
a := add(a, c)
}
// ====
// step: blockDeepener
// ----
// {
// let a := 3
// {
// let b := 4
// {
// a := add(b, 3)
// {
// let c := 5
// {
// b := add(b, 4)
// {
// c := add(a, 5)
// {
// b := add(a, b)
// { a := add(a, c) }
// }
// }
// }
// }
// }
// }
// }
@@ -0,0 +1,31 @@
{
let a := 1
switch calldataload(0)
case 0 {
mstore(0, 1)
a := 8
}
default {
a := 3
a := 4
}
a := 5
}
// ====
// step: blockDeepener
// ----
// {
// let a := 1
// {
// switch calldataload(0)
// case 0 {
// mstore(0, 1)
// { a := 8 }
// }
// default {
// a := 3
// { a := 4 }
// }
// { a := 5 }
// }
// }