mirror of
https://github.com/ethereum/solidity
synced 2023-10-03 13:03:40 +00:00
Add variable declaration initializer.
This commit is contained in:
@@ -23,6 +23,7 @@
|
||||
|
||||
#include <libyul/optimiser/BlockFlattener.h>
|
||||
#include <libyul/optimiser/VarDeclPropagator.h>
|
||||
#include <libyul/optimiser/VarDeclInitializer.h>
|
||||
#include <libyul/optimiser/Disambiguator.h>
|
||||
#include <libyul/optimiser/CommonSubexpressionEliminator.h>
|
||||
#include <libyul/optimiser/NameCollector.h>
|
||||
@@ -112,6 +113,8 @@ bool YulOptimizerTest::run(ostream& _stream, string const& _linePrefix, bool con
|
||||
disambiguate();
|
||||
VarDeclPropagator{}(*m_ast);
|
||||
}
|
||||
else if (m_optimizerStep == "varDeclInitializer")
|
||||
VarDeclInitializer{}(*m_ast);
|
||||
else if (m_optimizerStep == "forLoopInitRewriter")
|
||||
{
|
||||
disambiguate();
|
||||
|
||||
@@ -0,0 +1,29 @@
|
||||
{
|
||||
// This component does not need the disambiguator
|
||||
function f() -> x, y {
|
||||
let a, b
|
||||
mstore(a, b)
|
||||
let d
|
||||
d := 2
|
||||
}
|
||||
let a
|
||||
a := 4
|
||||
let b := 2
|
||||
let x, y := f()
|
||||
}
|
||||
// ----
|
||||
// varDeclInitializer
|
||||
// {
|
||||
// function f() -> x, y
|
||||
// {
|
||||
// let a := 0
|
||||
// let b := 0
|
||||
// mstore(a, b)
|
||||
// let d := 0
|
||||
// d := 2
|
||||
// }
|
||||
// let a := 0
|
||||
// a := 4
|
||||
// let b := 2
|
||||
// let x, y := f()
|
||||
// }
|
||||
@@ -0,0 +1,24 @@
|
||||
{
|
||||
function f() -> x, y {
|
||||
let a, b
|
||||
mstore(a, b)
|
||||
let d
|
||||
d := 2
|
||||
}
|
||||
let r
|
||||
r := 4
|
||||
}
|
||||
// ----
|
||||
// varDeclInitializer
|
||||
// {
|
||||
// function f() -> x, y
|
||||
// {
|
||||
// let a := 0
|
||||
// let b := 0
|
||||
// mstore(a, b)
|
||||
// let d := 0
|
||||
// d := 2
|
||||
// }
|
||||
// let r := 0
|
||||
// r := 4
|
||||
// }
|
||||
@@ -0,0 +1,14 @@
|
||||
{
|
||||
let x, y, z
|
||||
let a
|
||||
let b
|
||||
}
|
||||
// ----
|
||||
// varDeclInitializer
|
||||
// {
|
||||
// let x := 0
|
||||
// let y := 0
|
||||
// let z := 0
|
||||
// let a := 0
|
||||
// let b := 0
|
||||
// }
|
||||
@@ -0,0 +1,21 @@
|
||||
{
|
||||
function f() -> x, y {
|
||||
let a, b := f()
|
||||
let u
|
||||
}
|
||||
let r
|
||||
let s := 3
|
||||
let t
|
||||
}
|
||||
// ----
|
||||
// varDeclInitializer
|
||||
// {
|
||||
// function f() -> x, y
|
||||
// {
|
||||
// let a, b := f()
|
||||
// let u := 0
|
||||
// }
|
||||
// let r := 0
|
||||
// let s := 3
|
||||
// let t := 0
|
||||
// }
|
||||
@@ -0,0 +1,8 @@
|
||||
{
|
||||
let a
|
||||
}
|
||||
// ----
|
||||
// varDeclInitializer
|
||||
// {
|
||||
// let a := 0
|
||||
// }
|
||||
Reference in New Issue
Block a user