mirror of
https://github.com/ethereum/solidity
synced 2023-10-03 13:03:40 +00:00
Merge pull request #12262 from ethereum/functionGrouper
Keep canonical form of Yul during optimization.
This commit is contained in:
commit
f42e3c0bae
@ -972,15 +972,19 @@ BlockFlattener
|
|||||||
^^^^^^^^^^^^^^
|
^^^^^^^^^^^^^^
|
||||||
|
|
||||||
This stage eliminates nested blocks by inserting the statement in the
|
This stage eliminates nested blocks by inserting the statement in the
|
||||||
inner block at the appropriate place in the outer block:
|
inner block at the appropriate place in the outer block. It depends on the
|
||||||
|
FunctionGrouper and does not flatten the outermost block to keep the form
|
||||||
|
produced by the FunctionGrouper.
|
||||||
|
|
||||||
.. code-block:: yul
|
.. code-block:: yul
|
||||||
|
|
||||||
{
|
{
|
||||||
let x := 2
|
|
||||||
{
|
{
|
||||||
let y := 3
|
let x := 2
|
||||||
mstore(x, y)
|
{
|
||||||
|
let y := 3
|
||||||
|
mstore(x, y)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -989,9 +993,11 @@ is transformed to
|
|||||||
.. code-block:: yul
|
.. code-block:: yul
|
||||||
|
|
||||||
{
|
{
|
||||||
let x := 2
|
{
|
||||||
let y := 3
|
let x := 2
|
||||||
mstore(x, y)
|
let y := 3
|
||||||
|
mstore(x, y)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
As long as the code is disambiguated, this does not cause a problem because
|
As long as the code is disambiguated, this does not cause a problem because
|
||||||
|
@ -43,3 +43,15 @@ void BlockFlattener::operator()(Block& _block)
|
|||||||
}
|
}
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void BlockFlattener::run(OptimiserStepContext&, Block& _ast)
|
||||||
|
{
|
||||||
|
BlockFlattener flattener;
|
||||||
|
for (auto& statement: _ast.statements)
|
||||||
|
if (auto* block = get_if<Block>(&statement))
|
||||||
|
flattener(*block);
|
||||||
|
else if (auto* function = get_if<FunctionDefinition>(&statement))
|
||||||
|
flattener(function->body);
|
||||||
|
else
|
||||||
|
yulAssert(false, "BlockFlattener requires the FunctionGrouper.");
|
||||||
|
}
|
||||||
|
@ -27,7 +27,7 @@ class BlockFlattener: public ASTModifier
|
|||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
static constexpr char const* name{"BlockFlattener"};
|
static constexpr char const* name{"BlockFlattener"};
|
||||||
static void run(OptimiserStepContext&, Block& _ast) { BlockFlattener{}(_ast); }
|
static void run(OptimiserStepContext&, Block& _ast);
|
||||||
|
|
||||||
using ASTModifier::operator();
|
using ASTModifier::operator();
|
||||||
void operator()(Block& _block) override;
|
void operator()(Block& _block) override;
|
||||||
|
@ -18,6 +18,7 @@
|
|||||||
#include <libyul/optimiser/CircularReferencesPruner.h>
|
#include <libyul/optimiser/CircularReferencesPruner.h>
|
||||||
|
|
||||||
#include <libyul/optimiser/CallGraphGenerator.h>
|
#include <libyul/optimiser/CallGraphGenerator.h>
|
||||||
|
#include <libyul/optimiser/FunctionGrouper.h>
|
||||||
#include <libyul/optimiser/OptimizerUtilities.h>
|
#include <libyul/optimiser/OptimizerUtilities.h>
|
||||||
#include <libyul/AST.h>
|
#include <libyul/AST.h>
|
||||||
|
|
||||||
@ -29,6 +30,7 @@ using namespace solidity::yul;
|
|||||||
void CircularReferencesPruner::run(OptimiserStepContext& _context, Block& _ast)
|
void CircularReferencesPruner::run(OptimiserStepContext& _context, Block& _ast)
|
||||||
{
|
{
|
||||||
CircularReferencesPruner{_context.reservedIdentifiers}(_ast);
|
CircularReferencesPruner{_context.reservedIdentifiers}(_ast);
|
||||||
|
FunctionGrouper::run(_context, _ast);
|
||||||
}
|
}
|
||||||
|
|
||||||
void CircularReferencesPruner::operator()(Block& _block)
|
void CircularReferencesPruner::operator()(Block& _block)
|
||||||
|
@ -22,6 +22,7 @@
|
|||||||
|
|
||||||
#include <libyul/optimiser/ExpressionJoiner.h>
|
#include <libyul/optimiser/ExpressionJoiner.h>
|
||||||
|
|
||||||
|
#include <libyul/optimiser/FunctionGrouper.h>
|
||||||
#include <libyul/optimiser/NameCollector.h>
|
#include <libyul/optimiser/NameCollector.h>
|
||||||
#include <libyul/optimiser/OptimizerUtilities.h>
|
#include <libyul/optimiser/OptimizerUtilities.h>
|
||||||
#include <libyul/Exceptions.h>
|
#include <libyul/Exceptions.h>
|
||||||
@ -37,9 +38,10 @@ using namespace std;
|
|||||||
using namespace solidity;
|
using namespace solidity;
|
||||||
using namespace solidity::yul;
|
using namespace solidity::yul;
|
||||||
|
|
||||||
void ExpressionJoiner::run(OptimiserStepContext&, Block& _ast)
|
void ExpressionJoiner::run(OptimiserStepContext& _context, Block& _ast)
|
||||||
{
|
{
|
||||||
ExpressionJoiner{_ast}(_ast);
|
ExpressionJoiner{_ast}(_ast);
|
||||||
|
FunctionGrouper::run(_context, _ast);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -34,7 +34,7 @@ struct OptimiserStepContext;
|
|||||||
* all function definitions.
|
* all function definitions.
|
||||||
*
|
*
|
||||||
* After this step, a block is of the form
|
* After this step, a block is of the form
|
||||||
* { { I...} F... }
|
* { { I... } F... }
|
||||||
* Where I are (non-function-definition) instructions and F are function definitions.
|
* Where I are (non-function-definition) instructions and F are function definitions.
|
||||||
*/
|
*/
|
||||||
class FunctionGrouper
|
class FunctionGrouper
|
||||||
|
@ -37,6 +37,8 @@ namespace solidity::yul
|
|||||||
{
|
{
|
||||||
|
|
||||||
/// Removes statements that are just empty blocks (non-recursive).
|
/// Removes statements that are just empty blocks (non-recursive).
|
||||||
|
/// If this is run on the outermost block, the FunctionGrouper should be run afterwards to keep
|
||||||
|
/// the canonical form.
|
||||||
void removeEmptyBlocks(Block& _block);
|
void removeEmptyBlocks(Block& _block);
|
||||||
|
|
||||||
/// Returns true if a given literal can not be used as an identifier.
|
/// Returns true if a given literal can not be used as an identifier.
|
||||||
|
@ -118,7 +118,7 @@ void OptimiserSuite::run(
|
|||||||
|
|
||||||
// Some steps depend on properties ensured by FunctionHoister, BlockFlattener, FunctionGrouper and
|
// Some steps depend on properties ensured by FunctionHoister, BlockFlattener, FunctionGrouper and
|
||||||
// ForLoopInitRewriter. Run them first to be able to run arbitrary sequences safely.
|
// ForLoopInitRewriter. Run them first to be able to run arbitrary sequences safely.
|
||||||
suite.runSequence("hfgo", ast);
|
suite.runSequence("hgfo", ast);
|
||||||
|
|
||||||
NameSimplifier::run(suite.m_context, ast);
|
NameSimplifier::run(suite.m_context, ast);
|
||||||
// Now the user-supplied part
|
// Now the user-supplied part
|
||||||
|
@ -21,6 +21,7 @@
|
|||||||
#include <libyul/optimiser/UnusedPruner.h>
|
#include <libyul/optimiser/UnusedPruner.h>
|
||||||
|
|
||||||
#include <libyul/optimiser/CallGraphGenerator.h>
|
#include <libyul/optimiser/CallGraphGenerator.h>
|
||||||
|
#include <libyul/optimiser/FunctionGrouper.h>
|
||||||
#include <libyul/optimiser/NameCollector.h>
|
#include <libyul/optimiser/NameCollector.h>
|
||||||
#include <libyul/optimiser/Semantics.h>
|
#include <libyul/optimiser/Semantics.h>
|
||||||
#include <libyul/optimiser/OptimizerUtilities.h>
|
#include <libyul/optimiser/OptimizerUtilities.h>
|
||||||
@ -33,6 +34,12 @@ using namespace std;
|
|||||||
using namespace solidity;
|
using namespace solidity;
|
||||||
using namespace solidity::yul;
|
using namespace solidity::yul;
|
||||||
|
|
||||||
|
void UnusedPruner::run(OptimiserStepContext& _context, Block& _ast)
|
||||||
|
{
|
||||||
|
UnusedPruner::runUntilStabilisedOnFullAST(_context.dialect, _ast, _context.reservedIdentifiers);
|
||||||
|
FunctionGrouper::run(_context, _ast);
|
||||||
|
}
|
||||||
|
|
||||||
UnusedPruner::UnusedPruner(
|
UnusedPruner::UnusedPruner(
|
||||||
Dialect const& _dialect,
|
Dialect const& _dialect,
|
||||||
Block& _ast,
|
Block& _ast,
|
||||||
|
@ -50,9 +50,7 @@ class UnusedPruner: public ASTModifier
|
|||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
static constexpr char const* name{"UnusedPruner"};
|
static constexpr char const* name{"UnusedPruner"};
|
||||||
static void run(OptimiserStepContext& _context, Block& _ast) {
|
static void run(OptimiserStepContext& _context, Block& _ast);
|
||||||
UnusedPruner::runUntilStabilisedOnFullAST(_context.dialect, _ast, _context.reservedIdentifiers);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
using ASTModifier::operator();
|
using ASTModifier::operator();
|
||||||
|
@ -1,21 +1,25 @@
|
|||||||
{
|
{
|
||||||
let _1 := mload(0)
|
|
||||||
let f_a := mload(1)
|
|
||||||
let f_r
|
|
||||||
{
|
{
|
||||||
f_a := mload(f_a)
|
let _1 := mload(0)
|
||||||
f_r := add(f_a, calldatasize())
|
let f_a := mload(1)
|
||||||
|
let f_r
|
||||||
|
{
|
||||||
|
f_a := mload(f_a)
|
||||||
|
f_r := add(f_a, calldatasize())
|
||||||
|
}
|
||||||
|
let z := mload(2)
|
||||||
}
|
}
|
||||||
let z := mload(2)
|
|
||||||
}
|
}
|
||||||
// ----
|
// ----
|
||||||
// step: blockFlattener
|
// step: blockFlattener
|
||||||
//
|
//
|
||||||
// {
|
// {
|
||||||
// let _1 := mload(0)
|
// {
|
||||||
// let f_a := mload(1)
|
// let _1 := mload(0)
|
||||||
// let f_r
|
// let f_a := mload(1)
|
||||||
// f_a := mload(f_a)
|
// let f_r
|
||||||
// f_r := add(f_a, calldatasize())
|
// f_a := mload(f_a)
|
||||||
// let z := mload(2)
|
// f_r := add(f_a, calldatasize())
|
||||||
|
// let z := mload(2)
|
||||||
|
// }
|
||||||
// }
|
// }
|
||||||
|
@ -1,12 +1,16 @@
|
|||||||
{
|
{
|
||||||
for { let a := 1 } iszero(eq(a, 10)) { a := add(a, 1) } {
|
{
|
||||||
a := add(a, 1)
|
for { let a := 1 } iszero(eq(a, 10)) { a := add(a, 1) } {
|
||||||
|
a := add(a, 1)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// ----
|
// ----
|
||||||
// step: blockFlattener
|
// step: blockFlattener
|
||||||
//
|
//
|
||||||
// {
|
// {
|
||||||
// for { let a := 1 } iszero(eq(a, 10)) { a := add(a, 1) }
|
// {
|
||||||
// { a := add(a, 1) }
|
// for { let a := 1 } iszero(eq(a, 10)) { a := add(a, 1) }
|
||||||
|
// { a := add(a, 1) }
|
||||||
|
// }
|
||||||
// }
|
// }
|
||||||
|
@ -1,21 +1,25 @@
|
|||||||
{
|
{
|
||||||
if add(mload(7), sload(mload(3)))
|
|
||||||
{
|
{
|
||||||
let y := add(mload(3), 3)
|
if add(mload(7), sload(mload(3)))
|
||||||
{
|
{
|
||||||
y := add(y, 7)
|
let y := add(mload(3), 3)
|
||||||
}
|
{
|
||||||
|
y := add(y, 7)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
let t := add(3, 9)
|
||||||
}
|
}
|
||||||
let t := add(3, 9)
|
|
||||||
}
|
}
|
||||||
// ----
|
// ----
|
||||||
// step: blockFlattener
|
// step: blockFlattener
|
||||||
//
|
//
|
||||||
// {
|
// {
|
||||||
// if add(mload(7), sload(mload(3)))
|
|
||||||
// {
|
// {
|
||||||
// let y := add(mload(3), 3)
|
// if add(mload(7), sload(mload(3)))
|
||||||
// y := add(y, 7)
|
// {
|
||||||
|
// let y := add(mload(3), 3)
|
||||||
|
// y := add(y, 7)
|
||||||
|
// }
|
||||||
|
// let t := add(3, 9)
|
||||||
// }
|
// }
|
||||||
// let t := add(3, 9)
|
|
||||||
// }
|
// }
|
||||||
|
@ -1,29 +1,33 @@
|
|||||||
{
|
{
|
||||||
let a := 3
|
|
||||||
let b := 4
|
|
||||||
{
|
{
|
||||||
a := add(b, 3)
|
let a := 3
|
||||||
let c := 5
|
let b := 4
|
||||||
{
|
{
|
||||||
b := add(b, 4)
|
a := add(b, 3)
|
||||||
|
let c := 5
|
||||||
{
|
{
|
||||||
c := add(a, 5)
|
b := add(b, 4)
|
||||||
}
|
{
|
||||||
b := add(a, b)
|
c := add(a, 5)
|
||||||
|
}
|
||||||
|
b := add(a, b)
|
||||||
|
}
|
||||||
|
a := add(a, c)
|
||||||
}
|
}
|
||||||
a := add(a, c)
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// ----
|
// ----
|
||||||
// step: blockFlattener
|
// step: blockFlattener
|
||||||
//
|
//
|
||||||
// {
|
// {
|
||||||
// let a := 3
|
// {
|
||||||
// let b := 4
|
// let a := 3
|
||||||
// a := add(b, 3)
|
// let b := 4
|
||||||
// let c := 5
|
// a := add(b, 3)
|
||||||
// b := add(b, 4)
|
// let c := 5
|
||||||
// c := add(a, 5)
|
// b := add(b, 4)
|
||||||
// b := add(a, b)
|
// c := add(a, 5)
|
||||||
// a := add(a, c)
|
// b := add(a, b)
|
||||||
|
// a := add(a, c)
|
||||||
|
// }
|
||||||
// }
|
// }
|
||||||
|
@ -1,23 +1,27 @@
|
|||||||
{
|
{
|
||||||
|
{
|
||||||
let a := 1
|
let a := 1
|
||||||
switch calldataload(0)
|
switch calldataload(0)
|
||||||
case 0 { { { mstore(0, 1) } } a := 8 }
|
case 0 { { { mstore(0, 1) } } a := 8 }
|
||||||
default { a := 3 { a := 4 } }
|
default { a := 3 { a := 4 } }
|
||||||
a := 5
|
a := 5
|
||||||
|
}
|
||||||
}
|
}
|
||||||
// ----
|
// ----
|
||||||
// step: blockFlattener
|
// step: blockFlattener
|
||||||
//
|
//
|
||||||
// {
|
// {
|
||||||
// let a := 1
|
// {
|
||||||
// switch calldataload(0)
|
// let a := 1
|
||||||
// case 0 {
|
// switch calldataload(0)
|
||||||
// mstore(0, 1)
|
// case 0 {
|
||||||
// a := 8
|
// mstore(0, 1)
|
||||||
|
// a := 8
|
||||||
|
// }
|
||||||
|
// default {
|
||||||
|
// a := 3
|
||||||
|
// a := 4
|
||||||
|
// }
|
||||||
|
// a := 5
|
||||||
// }
|
// }
|
||||||
// default {
|
|
||||||
// a := 3
|
|
||||||
// a := 4
|
|
||||||
// }
|
|
||||||
// a := 5
|
|
||||||
// }
|
// }
|
||||||
|
@ -9,8 +9,10 @@
|
|||||||
// step: circularReferencesPruner
|
// step: circularReferencesPruner
|
||||||
//
|
//
|
||||||
// {
|
// {
|
||||||
// let a
|
// {
|
||||||
// a := h()
|
// let a
|
||||||
|
// a := h()
|
||||||
|
// }
|
||||||
// function f() -> x
|
// function f() -> x
|
||||||
// { x := g() }
|
// { x := g() }
|
||||||
// function g() -> y
|
// function g() -> y
|
||||||
|
@ -11,4 +11,4 @@
|
|||||||
// ----
|
// ----
|
||||||
// step: circularReferencesPruner
|
// step: circularReferencesPruner
|
||||||
//
|
//
|
||||||
// { }
|
// { { } }
|
||||||
|
@ -11,4 +11,4 @@
|
|||||||
// ----
|
// ----
|
||||||
// step: circularReferencesPruner
|
// step: circularReferencesPruner
|
||||||
//
|
//
|
||||||
// { }
|
// { { } }
|
||||||
|
@ -5,4 +5,4 @@
|
|||||||
// ----
|
// ----
|
||||||
// step: circularReferencesPruner
|
// step: circularReferencesPruner
|
||||||
//
|
//
|
||||||
// { }
|
// { { } }
|
||||||
|
@ -14,6 +14,8 @@
|
|||||||
// step: expressionJoiner
|
// step: expressionJoiner
|
||||||
//
|
//
|
||||||
// {
|
// {
|
||||||
// if add(mload(7), sload(mload(3))) { let y := add(mload(3), 3) }
|
// {
|
||||||
// let t := add(3, 9)
|
// if add(mload(7), sload(mload(3))) { let y := add(mload(3), 3) }
|
||||||
|
// let t := add(3, 9)
|
||||||
|
// }
|
||||||
// }
|
// }
|
||||||
|
@ -8,7 +8,9 @@
|
|||||||
// step: expressionJoiner
|
// step: expressionJoiner
|
||||||
//
|
//
|
||||||
// {
|
// {
|
||||||
// let a := mload(3)
|
// {
|
||||||
// let b := mload(6)
|
// let a := mload(3)
|
||||||
// sstore(mul(add(b, a), mload(2)), 3)
|
// let b := mload(6)
|
||||||
|
// sstore(mul(add(b, a), mload(2)), 3)
|
||||||
|
// }
|
||||||
// }
|
// }
|
||||||
|
@ -8,5 +8,7 @@
|
|||||||
// step: expressionJoiner
|
// step: expressionJoiner
|
||||||
//
|
//
|
||||||
// {
|
// {
|
||||||
// sstore(mul(add(mload(6), mload(2)), 2), 3)
|
// {
|
||||||
|
// sstore(mul(add(mload(6), mload(2)), 2), 3)
|
||||||
|
// }
|
||||||
// }
|
// }
|
||||||
|
@ -7,6 +7,8 @@
|
|||||||
// step: expressionJoiner
|
// step: expressionJoiner
|
||||||
//
|
//
|
||||||
// {
|
// {
|
||||||
// let a := mload(2)
|
// {
|
||||||
// let b := add(a, a)
|
// let a := mload(2)
|
||||||
|
// let b := add(a, a)
|
||||||
|
// }
|
||||||
// }
|
// }
|
||||||
|
@ -11,6 +11,8 @@
|
|||||||
// step: expressionJoiner
|
// step: expressionJoiner
|
||||||
//
|
//
|
||||||
// {
|
// {
|
||||||
// let a := mload(2)
|
// {
|
||||||
// sstore(mul(a, add(2, mload(6))), 3)
|
// let a := mload(2)
|
||||||
|
// sstore(mul(a, add(2, mload(6))), 3)
|
||||||
|
// }
|
||||||
// }
|
// }
|
||||||
|
@ -8,6 +8,8 @@
|
|||||||
// step: expressionJoiner
|
// step: expressionJoiner
|
||||||
//
|
//
|
||||||
// {
|
// {
|
||||||
// let a := mload(2)
|
// {
|
||||||
// sstore(mul(add(a, mload(6)), 2), 3)
|
// let a := mload(2)
|
||||||
|
// sstore(mul(add(a, mload(6)), 2), 3)
|
||||||
|
// }
|
||||||
// }
|
// }
|
||||||
|
@ -15,6 +15,8 @@
|
|||||||
// step: expressionJoiner
|
// step: expressionJoiner
|
||||||
//
|
//
|
||||||
// {
|
// {
|
||||||
// let x := calldataload(mload(2))
|
// {
|
||||||
// sstore(x, 3)
|
// let x := calldataload(mload(2))
|
||||||
|
// sstore(x, 3)
|
||||||
|
// }
|
||||||
// }
|
// }
|
||||||
|
@ -5,6 +5,8 @@
|
|||||||
// step: expressionJoiner
|
// step: expressionJoiner
|
||||||
//
|
//
|
||||||
// {
|
// {
|
||||||
// for { let b := mload(1) } b { }
|
// {
|
||||||
// { }
|
// for { let b := mload(1) } b { }
|
||||||
|
// { }
|
||||||
|
// }
|
||||||
// }
|
// }
|
||||||
|
@ -6,7 +6,9 @@
|
|||||||
// step: expressionJoiner
|
// step: expressionJoiner
|
||||||
//
|
//
|
||||||
// {
|
// {
|
||||||
// let a := mload(0)
|
// {
|
||||||
// for { } a { }
|
// let a := mload(0)
|
||||||
// { }
|
// for { } a { }
|
||||||
|
// { }
|
||||||
|
// }
|
||||||
// }
|
// }
|
||||||
|
@ -9,6 +9,7 @@
|
|||||||
// step: expressionJoiner
|
// step: expressionJoiner
|
||||||
//
|
//
|
||||||
// {
|
// {
|
||||||
|
// { }
|
||||||
// function f(a) -> x
|
// function f(a) -> x
|
||||||
// {
|
// {
|
||||||
// a := mload(2)
|
// a := mload(2)
|
||||||
|
@ -8,7 +8,9 @@
|
|||||||
// step: expressionJoiner
|
// step: expressionJoiner
|
||||||
//
|
//
|
||||||
// {
|
// {
|
||||||
// let a := mload(2)
|
// {
|
||||||
// let b := mload(a)
|
// let a := mload(2)
|
||||||
// a := 4
|
// let b := mload(a)
|
||||||
|
// a := 4
|
||||||
|
// }
|
||||||
// }
|
// }
|
||||||
|
@ -7,5 +7,7 @@
|
|||||||
// step: expressionJoiner
|
// step: expressionJoiner
|
||||||
//
|
//
|
||||||
// {
|
// {
|
||||||
// sstore(calldataload(mload(2)), 3)
|
// {
|
||||||
|
// sstore(calldataload(mload(2)), 3)
|
||||||
|
// }
|
||||||
// }
|
// }
|
||||||
|
@ -9,6 +9,8 @@
|
|||||||
// step: expressionJoiner
|
// step: expressionJoiner
|
||||||
//
|
//
|
||||||
// {
|
// {
|
||||||
// let b := sload(mload(3))
|
// {
|
||||||
// sstore(add(b, mload(7)), 0)
|
// let b := sload(mload(3))
|
||||||
|
// sstore(add(b, mload(7)), 0)
|
||||||
|
// }
|
||||||
// }
|
// }
|
||||||
|
@ -2,4 +2,4 @@
|
|||||||
// ----
|
// ----
|
||||||
// step: expressionJoiner
|
// step: expressionJoiner
|
||||||
//
|
//
|
||||||
// { }
|
// { { } }
|
||||||
|
@ -18,8 +18,10 @@
|
|||||||
// step: expressionJoiner
|
// step: expressionJoiner
|
||||||
//
|
//
|
||||||
// {
|
// {
|
||||||
// switch add(mload(7), sload(mload(3)))
|
// {
|
||||||
// case 3 { let y := add(mload(3), 3) }
|
// switch add(mload(7), sload(mload(3)))
|
||||||
// default { sstore(1, 0) }
|
// case 3 { let y := add(mload(3), 3) }
|
||||||
// let t := add(3, 9)
|
// default { sstore(1, 0) }
|
||||||
|
// let t := add(3, 9)
|
||||||
|
// }
|
||||||
// }
|
// }
|
||||||
|
@ -9,5 +9,7 @@
|
|||||||
// step: expressionJoiner
|
// step: expressionJoiner
|
||||||
//
|
//
|
||||||
// {
|
// {
|
||||||
// sstore(mul(add(mload(7), mload(6)), mload(2)), 3)
|
// {
|
||||||
|
// sstore(mul(add(mload(7), mload(6)), mload(2)), 3)
|
||||||
|
// }
|
||||||
// }
|
// }
|
||||||
|
@ -8,8 +8,10 @@
|
|||||||
// step: expressionSimplifier
|
// step: expressionSimplifier
|
||||||
//
|
//
|
||||||
// {
|
// {
|
||||||
// let c, d := f()
|
// {
|
||||||
// sstore(add(add(d, c), 7), 20)
|
// let c, d := f()
|
||||||
|
// sstore(add(add(d, c), 7), 20)
|
||||||
|
// }
|
||||||
// function f() -> x, z
|
// function f() -> x, z
|
||||||
// { }
|
// { }
|
||||||
// }
|
// }
|
||||||
|
@ -6,4 +6,4 @@
|
|||||||
// ----
|
// ----
|
||||||
// step: expressionSimplifier
|
// step: expressionSimplifier
|
||||||
//
|
//
|
||||||
// { sstore(0, 0) }
|
// { { sstore(0, 0) } }
|
||||||
|
@ -13,7 +13,9 @@
|
|||||||
// step: expressionSimplifier
|
// step: expressionSimplifier
|
||||||
//
|
//
|
||||||
// {
|
// {
|
||||||
// let x := calldataload(0)
|
// {
|
||||||
// let a := and(0xff, and(shr(248, x), 255))
|
// let x := calldataload(0)
|
||||||
// sstore(a, shr(12, and(shl(8, x), 15790080)))
|
// let a := and(0xff, and(shr(248, x), 255))
|
||||||
|
// sstore(a, shr(12, and(shl(8, x), 15790080)))
|
||||||
|
// }
|
||||||
// }
|
// }
|
||||||
|
@ -24,25 +24,27 @@
|
|||||||
// step: expressionSimplifier
|
// step: expressionSimplifier
|
||||||
//
|
//
|
||||||
// {
|
// {
|
||||||
// let x := calldataload(0)
|
// {
|
||||||
// let _2 := 0xf
|
// let x := calldataload(0)
|
||||||
// let _5 := and(shr(248, x), 0)
|
// let _2 := 0xf
|
||||||
// let _10 := 0xff
|
// let _5 := and(shr(248, x), 0)
|
||||||
// let a := and(_5, 255)
|
// let _10 := 0xff
|
||||||
// let _14 := and(shr(4, x), 3855)
|
// let a := and(_5, 255)
|
||||||
// let _15 := 12
|
// let _14 := and(shr(4, x), 3855)
|
||||||
// let b := shl(_15, _14)
|
// let _15 := 12
|
||||||
// let _19 := and(shr(4, x), 3855)
|
// let b := shl(_15, _14)
|
||||||
// let c := shl(_15, _19)
|
// let _19 := and(shr(4, x), 3855)
|
||||||
// let d := shl(_15, and(shr(255, x), 0))
|
// let c := shl(_15, _19)
|
||||||
// let e := shl(_10, _19)
|
// let d := shl(_15, and(shr(255, x), 0))
|
||||||
// let f := 0
|
// let e := shl(_10, _19)
|
||||||
// let g := 0
|
// let f := 0
|
||||||
// sstore(10, a)
|
// let g := 0
|
||||||
// sstore(11, b)
|
// sstore(10, a)
|
||||||
// sstore(_15, c)
|
// sstore(11, b)
|
||||||
// sstore(13, d)
|
// sstore(_15, c)
|
||||||
// sstore(14, e)
|
// sstore(13, d)
|
||||||
// sstore(_2, f)
|
// sstore(14, e)
|
||||||
// sstore(16, g)
|
// sstore(_2, f)
|
||||||
|
// sstore(16, g)
|
||||||
|
// }
|
||||||
// }
|
// }
|
||||||
|
@ -21,17 +21,19 @@
|
|||||||
// step: expressionSimplifier
|
// step: expressionSimplifier
|
||||||
//
|
//
|
||||||
// {
|
// {
|
||||||
// let x := calldataload(0)
|
// {
|
||||||
// let a := and(shl(8, x), 0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000)
|
// let x := calldataload(0)
|
||||||
// let b := and(shr(8, x), 0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0)
|
// let a := and(shl(8, x), 0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000)
|
||||||
// let c := and(shr(8, x), 0x0fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff)
|
// let b := and(shr(8, x), 0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0)
|
||||||
// let d := and(shl(8, x), 0x0fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00)
|
// let c := and(shr(8, x), 0x0fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff)
|
||||||
// let _14 := 150
|
// let d := and(shl(8, x), 0x0fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00)
|
||||||
// let e := shl(_14, and(shl(148, x), 0x3ffffffffffffffffffffffffff0000000000000000000000000000000000000))
|
// let _14 := 150
|
||||||
// sstore(15, x)
|
// let e := shl(_14, and(shl(148, x), 0x3ffffffffffffffffffffffffff0000000000000000000000000000000000000))
|
||||||
// sstore(16, a)
|
// sstore(15, x)
|
||||||
// sstore(17, b)
|
// sstore(16, a)
|
||||||
// sstore(18, c)
|
// sstore(17, b)
|
||||||
// sstore(19, d)
|
// sstore(18, c)
|
||||||
// sstore(20, e)
|
// sstore(19, d)
|
||||||
|
// sstore(20, e)
|
||||||
|
// }
|
||||||
// }
|
// }
|
||||||
|
@ -5,4 +5,4 @@
|
|||||||
// ----
|
// ----
|
||||||
// step: expressionSimplifier
|
// step: expressionSimplifier
|
||||||
//
|
//
|
||||||
// { mstore(20, mload(0)) }
|
// { { mstore(20, mload(0)) } }
|
||||||
|
@ -5,4 +5,4 @@
|
|||||||
// ----
|
// ----
|
||||||
// step: expressionSimplifier
|
// step: expressionSimplifier
|
||||||
//
|
//
|
||||||
// { sstore(7, 13) }
|
// { { sstore(7, 13) } }
|
||||||
|
@ -12,9 +12,11 @@
|
|||||||
// step: expressionSimplifier
|
// step: expressionSimplifier
|
||||||
//
|
//
|
||||||
// {
|
// {
|
||||||
// let _1 := 0xffffffffffffffffffffffffffffffffffffffff
|
// {
|
||||||
// let _2 := 0
|
// let _1 := 0xffffffffffffffffffffffffffffffffffffffff
|
||||||
// let _3 := 0x20
|
// let _2 := 0
|
||||||
// let a := and(create2(_2, _2, _3, _2), _1)
|
// let _3 := 0x20
|
||||||
// sstore(a, and(_1, create2(_2, _2, _3, _2)))
|
// let a := and(create2(_2, _2, _3, _2), _1)
|
||||||
|
// sstore(a, and(_1, create2(_2, _2, _3, _2)))
|
||||||
|
// }
|
||||||
// }
|
// }
|
||||||
|
@ -11,10 +11,12 @@
|
|||||||
// step: expressionSimplifier
|
// step: expressionSimplifier
|
||||||
//
|
//
|
||||||
// {
|
// {
|
||||||
// let _1 := 0x20
|
// {
|
||||||
// let _2 := 0
|
// let _1 := 0x20
|
||||||
// let c := create(_2, _2, _1)
|
// let _2 := 0
|
||||||
// let _4 := 0xffffffffffffffffffffffffffffffffffffffff
|
// let c := create(_2, _2, _1)
|
||||||
// let a := and(c, _4)
|
// let _4 := 0xffffffffffffffffffffffffffffffffffffffff
|
||||||
// sstore(a, and(_4, create(_2, _2, _1)))
|
// let a := and(c, _4)
|
||||||
|
// sstore(a, and(_4, create(_2, _2, _1)))
|
||||||
|
// }
|
||||||
// }
|
// }
|
||||||
|
@ -13,12 +13,14 @@
|
|||||||
// step: expressionSimplifier
|
// step: expressionSimplifier
|
||||||
//
|
//
|
||||||
// {
|
// {
|
||||||
// let _1 := 0
|
// {
|
||||||
// let t := calldataload(_1)
|
// let _1 := 0
|
||||||
// sstore(_1, iszero(t))
|
// let t := calldataload(_1)
|
||||||
// sstore(1, 1)
|
// sstore(_1, iszero(t))
|
||||||
// let _8 := 2
|
// sstore(1, 1)
|
||||||
// sstore(_8, shl(t, 1))
|
// let _8 := 2
|
||||||
// sstore(3, exp(8, t))
|
// sstore(_8, shl(t, 1))
|
||||||
// sstore(4, sub(iszero(and(t, 1)), and(t, 1)))
|
// sstore(3, exp(8, t))
|
||||||
|
// sstore(4, sub(iszero(and(t, 1)), and(t, 1)))
|
||||||
|
// }
|
||||||
// }
|
// }
|
||||||
|
@ -9,8 +9,10 @@
|
|||||||
// step: expressionSimplifier
|
// step: expressionSimplifier
|
||||||
//
|
//
|
||||||
// {
|
// {
|
||||||
// let x := calldataload(0)
|
// {
|
||||||
// let z := calldataload(1)
|
// let x := calldataload(0)
|
||||||
// let t := and(x, z)
|
// let z := calldataload(1)
|
||||||
// sstore(t, or(x, z))
|
// let t := and(x, z)
|
||||||
|
// sstore(t, or(x, z))
|
||||||
|
// }
|
||||||
// }
|
// }
|
||||||
|
@ -5,4 +5,4 @@
|
|||||||
// ----
|
// ----
|
||||||
// step: expressionSimplifier
|
// step: expressionSimplifier
|
||||||
//
|
//
|
||||||
// { sstore(0, 0) }
|
// { { sstore(0, 0) } }
|
||||||
|
@ -6,6 +6,8 @@
|
|||||||
// step: expressionSimplifier
|
// step: expressionSimplifier
|
||||||
//
|
//
|
||||||
// {
|
// {
|
||||||
// let _1 := 0
|
// {
|
||||||
// sstore(_1, sub(calldataload(1), calldataload(_1)))
|
// let _1 := 0
|
||||||
|
// sstore(_1, sub(calldataload(1), calldataload(_1)))
|
||||||
|
// }
|
||||||
// }
|
// }
|
||||||
|
@ -6,4 +6,4 @@
|
|||||||
// ----
|
// ----
|
||||||
// step: expressionSimplifier
|
// step: expressionSimplifier
|
||||||
//
|
//
|
||||||
// { sstore(0, 0) }
|
// { { sstore(0, 0) } }
|
||||||
|
@ -7,7 +7,7 @@
|
|||||||
// step: expressionSimplifier
|
// step: expressionSimplifier
|
||||||
//
|
//
|
||||||
// {
|
// {
|
||||||
// sstore(0, f())
|
// { sstore(0, f()) }
|
||||||
// function f() -> a
|
// function f() -> a
|
||||||
// { }
|
// { }
|
||||||
// }
|
// }
|
||||||
|
@ -6,7 +6,9 @@
|
|||||||
// step: expressionSimplifier
|
// step: expressionSimplifier
|
||||||
//
|
//
|
||||||
// {
|
// {
|
||||||
// let a := 10
|
// {
|
||||||
// for { } iszero(iszero(a)) { a := add(a, 1) }
|
// let a := 10
|
||||||
// { }
|
// for { } iszero(iszero(a)) { a := add(a, 1) }
|
||||||
|
// { }
|
||||||
|
// }
|
||||||
// }
|
// }
|
||||||
|
@ -6,4 +6,4 @@
|
|||||||
// ----
|
// ----
|
||||||
// step: expressionSimplifier
|
// step: expressionSimplifier
|
||||||
//
|
//
|
||||||
// { sstore(0, mload(0)) }
|
// { { sstore(0, mload(0)) } }
|
||||||
|
@ -10,7 +10,9 @@
|
|||||||
// step: expressionSimplifier
|
// step: expressionSimplifier
|
||||||
//
|
//
|
||||||
// {
|
// {
|
||||||
// let _1 := 0
|
// {
|
||||||
// let a := calldataload(_1)
|
// let _1 := 0
|
||||||
// if eq(a, calldataload(0x20)) { sstore(_1, 1) }
|
// let a := calldataload(_1)
|
||||||
|
// if eq(a, calldataload(0x20)) { sstore(_1, 1) }
|
||||||
|
// }
|
||||||
// }
|
// }
|
||||||
|
@ -13,14 +13,16 @@
|
|||||||
// step: expressionSimplifier
|
// step: expressionSimplifier
|
||||||
//
|
//
|
||||||
// {
|
// {
|
||||||
// let _1 := 0
|
// {
|
||||||
// let a := calldataload(_1)
|
// let _1 := 0
|
||||||
// let b := 0
|
// let a := calldataload(_1)
|
||||||
// let c := byte(20, a)
|
// let b := 0
|
||||||
// pop(create(_1, _1, 0x20))
|
// let c := byte(20, a)
|
||||||
// let d := 0
|
// pop(create(_1, _1, 0x20))
|
||||||
// sstore(7, a)
|
// let d := 0
|
||||||
// sstore(8, b)
|
// sstore(7, a)
|
||||||
// sstore(9, c)
|
// sstore(8, b)
|
||||||
// sstore(10, d)
|
// sstore(9, c)
|
||||||
|
// sstore(10, d)
|
||||||
|
// }
|
||||||
// }
|
// }
|
||||||
|
@ -5,6 +5,8 @@
|
|||||||
// step: expressionSimplifier
|
// step: expressionSimplifier
|
||||||
//
|
//
|
||||||
// {
|
// {
|
||||||
// let _4 := 0
|
// {
|
||||||
// mstore(_4, and(calldataload(_4), 255))
|
// let _4 := 0
|
||||||
|
// mstore(_4, and(calldataload(_4), 255))
|
||||||
|
// }
|
||||||
// }
|
// }
|
||||||
|
@ -5,6 +5,8 @@
|
|||||||
// step: expressionSimplifier
|
// step: expressionSimplifier
|
||||||
//
|
//
|
||||||
// {
|
// {
|
||||||
// let _4 := 0
|
// {
|
||||||
// mstore(_4, and(calldataload(_4), 0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff))
|
// let _4 := 0
|
||||||
|
// mstore(_4, and(calldataload(_4), 0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff))
|
||||||
|
// }
|
||||||
// }
|
// }
|
||||||
|
@ -7,9 +7,11 @@
|
|||||||
// step: expressionSimplifier
|
// step: expressionSimplifier
|
||||||
//
|
//
|
||||||
// {
|
// {
|
||||||
// let _2 := f(1)
|
// {
|
||||||
// let _3 := 0
|
// let _2 := f(1)
|
||||||
// sstore(_3, sub(f(_3), _2))
|
// let _3 := 0
|
||||||
|
// sstore(_3, sub(f(_3), _2))
|
||||||
|
// }
|
||||||
// function f(a) -> b
|
// function f(a) -> b
|
||||||
// { }
|
// { }
|
||||||
// }
|
// }
|
||||||
|
@ -8,7 +8,7 @@
|
|||||||
// step: expressionSimplifier
|
// step: expressionSimplifier
|
||||||
//
|
//
|
||||||
// {
|
// {
|
||||||
// sstore(0, sub(f1(), f2()))
|
// { sstore(0, sub(f1(), f2())) }
|
||||||
// function f1() -> a
|
// function f1() -> a
|
||||||
// { }
|
// { }
|
||||||
// function f2() -> b
|
// function f2() -> b
|
||||||
|
@ -8,7 +8,7 @@
|
|||||||
// step: expressionSimplifier
|
// step: expressionSimplifier
|
||||||
//
|
//
|
||||||
// {
|
// {
|
||||||
// sstore(sub(f(), f()), 8)
|
// { sstore(sub(f(), f()), 8) }
|
||||||
// function f() -> a
|
// function f() -> a
|
||||||
// { mstore(0, 1) }
|
// { mstore(0, 1) }
|
||||||
// }
|
// }
|
||||||
|
@ -9,9 +9,11 @@
|
|||||||
// step: expressionSimplifier
|
// step: expressionSimplifier
|
||||||
//
|
//
|
||||||
// {
|
// {
|
||||||
// let _1 := msize()
|
// {
|
||||||
// let _2 := 0
|
// let _1 := msize()
|
||||||
// sstore(_2, _1)
|
// let _2 := 0
|
||||||
// pop(keccak256(_2, _2))
|
// sstore(_2, _1)
|
||||||
// sstore(20, 0)
|
// pop(keccak256(_2, _2))
|
||||||
|
// sstore(20, 0)
|
||||||
|
// }
|
||||||
// }
|
// }
|
||||||
|
@ -7,7 +7,9 @@
|
|||||||
// step: expressionSimplifier
|
// step: expressionSimplifier
|
||||||
//
|
//
|
||||||
// {
|
// {
|
||||||
// let _1 := 0
|
// {
|
||||||
// pop(call(_1, _1, _1, _1, _1, _1, _1))
|
// let _1 := 0
|
||||||
// sstore(_1, 0)
|
// pop(call(_1, _1, _1, _1, _1, _1, _1))
|
||||||
|
// sstore(_1, 0)
|
||||||
|
// }
|
||||||
// }
|
// }
|
||||||
|
@ -8,8 +8,10 @@
|
|||||||
// step: expressionSimplifier
|
// step: expressionSimplifier
|
||||||
//
|
//
|
||||||
// {
|
// {
|
||||||
// pop(f())
|
// {
|
||||||
// mstore(0, 0)
|
// pop(f())
|
||||||
|
// mstore(0, 0)
|
||||||
|
// }
|
||||||
// function f() -> x
|
// function f() -> x
|
||||||
// { mstore(0, 1337) }
|
// { mstore(0, 1337) }
|
||||||
// }
|
// }
|
||||||
|
@ -7,4 +7,4 @@
|
|||||||
// ----
|
// ----
|
||||||
// step: expressionSimplifier
|
// step: expressionSimplifier
|
||||||
//
|
//
|
||||||
// { sstore(0, 0) }
|
// { { sstore(0, 0) } }
|
||||||
|
@ -7,8 +7,10 @@
|
|||||||
// step: expressionSimplifier
|
// step: expressionSimplifier
|
||||||
//
|
//
|
||||||
// {
|
// {
|
||||||
// let _1 := 0
|
// {
|
||||||
// let x := mload(_1)
|
// let _1 := 0
|
||||||
// x := _1
|
// let x := mload(_1)
|
||||||
// mstore(_1, 7)
|
// x := _1
|
||||||
|
// mstore(_1, 7)
|
||||||
|
// }
|
||||||
// }
|
// }
|
||||||
|
@ -12,12 +12,14 @@
|
|||||||
// step: expressionSimplifier
|
// step: expressionSimplifier
|
||||||
//
|
//
|
||||||
// {
|
// {
|
||||||
// let _2 := calldataload(0)
|
// {
|
||||||
// let _5 := 0xff
|
// let _2 := calldataload(0)
|
||||||
// let a := shr(248, _2)
|
// let _5 := 0xff
|
||||||
// let b := shr(248, _2)
|
// let a := shr(248, _2)
|
||||||
// let c := and(shr(249, _2), 0xfa)
|
// let b := shr(248, _2)
|
||||||
// let d := and(shr(247, _2), _5)
|
// let c := and(shr(249, _2), 0xfa)
|
||||||
// sstore(a, b)
|
// let d := and(shr(247, _2), _5)
|
||||||
// sstore(c, d)
|
// sstore(a, b)
|
||||||
|
// sstore(c, d)
|
||||||
|
// }
|
||||||
// }
|
// }
|
||||||
|
@ -12,12 +12,14 @@
|
|||||||
// step: expressionSimplifier
|
// step: expressionSimplifier
|
||||||
//
|
//
|
||||||
// {
|
// {
|
||||||
// let a := 0
|
// {
|
||||||
// let b := 0
|
// let a := 0
|
||||||
// let _8 := calldataload(2)
|
// let b := 0
|
||||||
// let _9 := 255
|
// let _8 := calldataload(2)
|
||||||
// let c := shl(_9, _8)
|
// let _9 := 255
|
||||||
// let d := shr(_9, calldataload(3))
|
// let c := shl(_9, _8)
|
||||||
// sstore(a, b)
|
// let d := shr(_9, calldataload(3))
|
||||||
// sstore(c, d)
|
// sstore(a, b)
|
||||||
|
// sstore(c, d)
|
||||||
|
// }
|
||||||
// }
|
// }
|
||||||
|
@ -10,7 +10,7 @@
|
|||||||
// step: expressionSimplifier
|
// step: expressionSimplifier
|
||||||
//
|
//
|
||||||
// {
|
// {
|
||||||
// let t, v := f()
|
// { let t, v := f() }
|
||||||
// function f() -> c, d
|
// function f() -> c, d
|
||||||
// { sstore(0, 7) }
|
// { sstore(0, 7) }
|
||||||
// }
|
// }
|
||||||
|
@ -6,6 +6,8 @@
|
|||||||
// step: expressionSimplifier
|
// step: expressionSimplifier
|
||||||
//
|
//
|
||||||
// {
|
// {
|
||||||
// let _1 := 0
|
// {
|
||||||
// sstore(_1, mload(_1))
|
// let _1 := 0
|
||||||
|
// sstore(_1, mload(_1))
|
||||||
|
// }
|
||||||
// }
|
// }
|
||||||
|
@ -6,4 +6,6 @@
|
|||||||
// ----
|
// ----
|
||||||
// step: expressionSimplifier
|
// step: expressionSimplifier
|
||||||
//
|
//
|
||||||
// { sstore(0, balance(address())) }
|
// {
|
||||||
|
// { sstore(0, balance(address())) }
|
||||||
|
// }
|
||||||
|
@ -9,6 +9,8 @@
|
|||||||
// step: expressionSimplifier
|
// step: expressionSimplifier
|
||||||
//
|
//
|
||||||
// {
|
// {
|
||||||
// let a := address()
|
// {
|
||||||
// sstore(a, selfbalance())
|
// let a := address()
|
||||||
|
// sstore(a, selfbalance())
|
||||||
|
// }
|
||||||
// }
|
// }
|
||||||
|
@ -6,4 +6,4 @@
|
|||||||
// ----
|
// ----
|
||||||
// step: expressionSimplifier
|
// step: expressionSimplifier
|
||||||
//
|
//
|
||||||
// { sstore(0, selfbalance()) }
|
// { { sstore(0, selfbalance()) } }
|
||||||
|
@ -9,6 +9,8 @@
|
|||||||
// step: expressionSimplifier
|
// step: expressionSimplifier
|
||||||
//
|
//
|
||||||
// {
|
// {
|
||||||
// for { } div(create(0, 1, 0), shl(msize(), 1)) { }
|
// {
|
||||||
// { }
|
// for { } div(create(0, 1, 0), shl(msize(), 1)) { }
|
||||||
|
// { }
|
||||||
|
// }
|
||||||
// }
|
// }
|
||||||
|
@ -2,4 +2,4 @@
|
|||||||
// ----
|
// ----
|
||||||
// step: expressionSimplifier
|
// step: expressionSimplifier
|
||||||
//
|
//
|
||||||
// { }
|
// { { } }
|
||||||
|
@ -8,6 +8,8 @@
|
|||||||
// step: expressionSimplifier
|
// step: expressionSimplifier
|
||||||
//
|
//
|
||||||
// {
|
// {
|
||||||
// let c, d
|
// {
|
||||||
// sstore(d, 7)
|
// let c, d
|
||||||
|
// sstore(d, 7)
|
||||||
|
// }
|
||||||
// }
|
// }
|
||||||
|
@ -8,4 +8,4 @@
|
|||||||
// ----
|
// ----
|
||||||
// step: expressionSimplifier
|
// step: expressionSimplifier
|
||||||
//
|
//
|
||||||
// { sstore(8, 7) }
|
// { { sstore(8, 7) } }
|
||||||
|
@ -13,6 +13,7 @@
|
|||||||
// step: fullInliner
|
// step: fullInliner
|
||||||
//
|
//
|
||||||
// {
|
// {
|
||||||
|
// { }
|
||||||
// function f(a) -> b
|
// function f(a) -> b
|
||||||
// { b := sload(mload(a)) }
|
// { b := sload(mload(a)) }
|
||||||
// function g() -> x_1
|
// function g() -> x_1
|
||||||
|
@ -6,6 +6,8 @@
|
|||||||
// step: fullSimplify
|
// step: fullSimplify
|
||||||
//
|
//
|
||||||
// {
|
// {
|
||||||
// let _2 := 0
|
// {
|
||||||
// mstore(mload(_2), _2)
|
// let _2 := 0
|
||||||
|
// mstore(mload(_2), _2)
|
||||||
|
// }
|
||||||
// }
|
// }
|
||||||
|
@ -5,4 +5,4 @@
|
|||||||
// ----
|
// ----
|
||||||
// step: fullSimplify
|
// step: fullSimplify
|
||||||
//
|
//
|
||||||
// { mstore(0, 13) }
|
// { { mstore(0, 13) } }
|
||||||
|
@ -5,4 +5,4 @@
|
|||||||
// ----
|
// ----
|
||||||
// step: fullSimplify
|
// step: fullSimplify
|
||||||
//
|
//
|
||||||
// { mstore(0, 0) }
|
// { { mstore(0, 0) } }
|
||||||
|
@ -6,6 +6,8 @@
|
|||||||
// step: fullSimplify
|
// step: fullSimplify
|
||||||
//
|
//
|
||||||
// {
|
// {
|
||||||
// let _1 := 0
|
// {
|
||||||
// mstore(_1, sub(calldataload(1), calldataload(_1)))
|
// let _1 := 0
|
||||||
|
// mstore(_1, sub(calldataload(1), calldataload(_1)))
|
||||||
|
// }
|
||||||
// }
|
// }
|
||||||
|
@ -5,4 +5,4 @@
|
|||||||
// ----
|
// ----
|
||||||
// step: fullSimplify
|
// step: fullSimplify
|
||||||
//
|
//
|
||||||
// { mstore(0, 0) }
|
// { { mstore(0, 0) } }
|
||||||
|
@ -7,7 +7,7 @@
|
|||||||
// step: fullSimplify
|
// step: fullSimplify
|
||||||
//
|
//
|
||||||
// {
|
// {
|
||||||
// mstore(f(), 0)
|
// { mstore(f(), 0) }
|
||||||
// function f() -> a
|
// function f() -> a
|
||||||
// { }
|
// { }
|
||||||
// }
|
// }
|
||||||
|
@ -7,7 +7,9 @@
|
|||||||
// step: fullSimplify
|
// step: fullSimplify
|
||||||
//
|
//
|
||||||
// {
|
// {
|
||||||
// let a := 10
|
// {
|
||||||
// for { } iszero(iszero(a)) { a := add(a, 1) }
|
// let a := 10
|
||||||
// { }
|
// for { } iszero(iszero(a)) { a := add(a, 1) }
|
||||||
|
// { }
|
||||||
|
// }
|
||||||
// }
|
// }
|
||||||
|
@ -11,8 +11,10 @@
|
|||||||
// step: fullSimplify
|
// step: fullSimplify
|
||||||
//
|
//
|
||||||
// {
|
// {
|
||||||
// let a := calldataload(0)
|
// {
|
||||||
// let _4 := 0
|
// let a := calldataload(0)
|
||||||
// let b := a
|
// let _4 := 0
|
||||||
// mstore(b, eq(calldataload(_4), a))
|
// let b := a
|
||||||
|
// mstore(b, eq(calldataload(_4), a))
|
||||||
|
// }
|
||||||
// }
|
// }
|
||||||
|
@ -5,6 +5,8 @@
|
|||||||
// step: fullSimplify
|
// step: fullSimplify
|
||||||
//
|
//
|
||||||
// {
|
// {
|
||||||
// let _4 := 0
|
// {
|
||||||
// mstore(_4, and(calldataload(_4), 255))
|
// let _4 := 0
|
||||||
|
// mstore(_4, and(calldataload(_4), 255))
|
||||||
|
// }
|
||||||
// }
|
// }
|
||||||
|
@ -5,6 +5,8 @@
|
|||||||
// step: fullSimplify
|
// step: fullSimplify
|
||||||
//
|
//
|
||||||
// {
|
// {
|
||||||
// let _4 := 0
|
// {
|
||||||
// mstore(_4, and(calldataload(_4), 0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff))
|
// let _4 := 0
|
||||||
|
// mstore(_4, and(calldataload(_4), 0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff))
|
||||||
|
// }
|
||||||
// }
|
// }
|
||||||
|
@ -6,9 +6,11 @@
|
|||||||
// step: fullSimplify
|
// step: fullSimplify
|
||||||
//
|
//
|
||||||
// {
|
// {
|
||||||
// let _2 := f(1)
|
// {
|
||||||
// let _3 := 0
|
// let _2 := f(1)
|
||||||
// mstore(_3, sub(f(_3), _2))
|
// let _3 := 0
|
||||||
|
// mstore(_3, sub(f(_3), _2))
|
||||||
|
// }
|
||||||
// function f(a) -> b
|
// function f(a) -> b
|
||||||
// { }
|
// { }
|
||||||
// }
|
// }
|
||||||
|
@ -8,7 +8,7 @@
|
|||||||
// step: fullSimplify
|
// step: fullSimplify
|
||||||
//
|
//
|
||||||
// {
|
// {
|
||||||
// mstore(0, sub(f1(), f2()))
|
// { mstore(0, sub(f1(), f2())) }
|
||||||
// function f1() -> a
|
// function f1() -> a
|
||||||
// { }
|
// { }
|
||||||
// function f2() -> b
|
// function f2() -> b
|
||||||
|
@ -8,7 +8,7 @@
|
|||||||
// step: fullSimplify
|
// step: fullSimplify
|
||||||
//
|
//
|
||||||
// {
|
// {
|
||||||
// mstore(0, sub(f(), f()))
|
// { mstore(0, sub(f(), f())) }
|
||||||
// function f() -> a
|
// function f() -> a
|
||||||
// { mstore(1, 2) }
|
// { mstore(1, 2) }
|
||||||
// }
|
// }
|
||||||
|
@ -7,7 +7,9 @@
|
|||||||
// step: fullSimplify
|
// step: fullSimplify
|
||||||
//
|
//
|
||||||
// {
|
// {
|
||||||
// let _1 := 0
|
// {
|
||||||
// pop(create(_1, _1, _1))
|
// let _1 := 0
|
||||||
// mstore(_1, 0)
|
// pop(create(_1, _1, _1))
|
||||||
|
// mstore(_1, 0)
|
||||||
|
// }
|
||||||
// }
|
// }
|
||||||
|
@ -23,22 +23,24 @@
|
|||||||
// step: fullSimplify
|
// step: fullSimplify
|
||||||
//
|
//
|
||||||
// {
|
// {
|
||||||
// mstore(1, 0)
|
// {
|
||||||
// mstore(2, 0)
|
// mstore(1, 0)
|
||||||
// mstore(3, 0)
|
// mstore(2, 0)
|
||||||
// mstore(4, 0)
|
// mstore(3, 0)
|
||||||
// mstore(5, 0)
|
// mstore(4, 0)
|
||||||
// mstore(6, 0)
|
// mstore(5, 0)
|
||||||
// mstore(7, 0)
|
// mstore(6, 0)
|
||||||
// mstore(8, 0)
|
// mstore(7, 0)
|
||||||
// mstore(9, 0)
|
// mstore(8, 0)
|
||||||
// mstore(10, 0)
|
// mstore(9, 0)
|
||||||
// mstore(11, 0)
|
// mstore(10, 0)
|
||||||
// mstore(12, 0)
|
// mstore(11, 0)
|
||||||
// mstore(13, 0)
|
// mstore(12, 0)
|
||||||
// mstore(14, 0)
|
// mstore(13, 0)
|
||||||
// mstore(15, 0)
|
// mstore(14, 0)
|
||||||
// mstore(16, 0)
|
// mstore(15, 0)
|
||||||
// mstore(17, 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff)
|
// mstore(16, 0)
|
||||||
// mstore(18, 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff)
|
// mstore(17, 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff)
|
||||||
|
// mstore(18, 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff)
|
||||||
|
// }
|
||||||
// }
|
// }
|
||||||
|
@ -6,6 +6,8 @@
|
|||||||
// step: fullSimplify
|
// step: fullSimplify
|
||||||
//
|
//
|
||||||
// {
|
// {
|
||||||
// let _1 := 0
|
// {
|
||||||
// mstore(_1, mload(_1))
|
// let _1 := 0
|
||||||
|
// mstore(_1, mload(_1))
|
||||||
|
// }
|
||||||
// }
|
// }
|
||||||
|
@ -8,6 +8,8 @@
|
|||||||
// step: fullSimplify
|
// step: fullSimplify
|
||||||
//
|
//
|
||||||
// {
|
// {
|
||||||
// mstore(0, 7)
|
// {
|
||||||
// mstore(1, 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff)
|
// mstore(0, 7)
|
||||||
|
// mstore(1, 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff)
|
||||||
|
// }
|
||||||
// }
|
// }
|
||||||
|
@ -2,4 +2,4 @@
|
|||||||
// ----
|
// ----
|
||||||
// step: fullSimplify
|
// step: fullSimplify
|
||||||
//
|
//
|
||||||
// { }
|
// { { } }
|
||||||
|
@ -8,6 +8,8 @@
|
|||||||
// step: loadResolver
|
// step: loadResolver
|
||||||
//
|
//
|
||||||
// {
|
// {
|
||||||
// let a := mload(calldataload(0))
|
// {
|
||||||
// sstore(a, a)
|
// let a := mload(calldataload(0))
|
||||||
|
// sstore(a, a)
|
||||||
|
// }
|
||||||
// }
|
// }
|
||||||
|
@ -9,8 +9,10 @@
|
|||||||
// step: loadResolver
|
// step: loadResolver
|
||||||
//
|
//
|
||||||
// {
|
// {
|
||||||
// let x := calldataload(0)
|
// {
|
||||||
// let a := mload(x)
|
// let x := calldataload(0)
|
||||||
// x := 7
|
// let a := mload(x)
|
||||||
// sstore(a, mload(x))
|
// x := 7
|
||||||
|
// sstore(a, mload(x))
|
||||||
|
// }
|
||||||
// }
|
// }
|
||||||
|
@ -9,8 +9,10 @@
|
|||||||
// step: loadResolver
|
// step: loadResolver
|
||||||
//
|
//
|
||||||
// {
|
// {
|
||||||
// let x := calldataload(0)
|
// {
|
||||||
// let a := mload(x)
|
// let x := calldataload(0)
|
||||||
// a := 7
|
// let a := mload(x)
|
||||||
// sstore(a, mload(x))
|
// a := 7
|
||||||
|
// sstore(a, mload(x))
|
||||||
|
// }
|
||||||
// }
|
// }
|
||||||
|
@ -9,8 +9,10 @@
|
|||||||
// step: loadResolver
|
// step: loadResolver
|
||||||
//
|
//
|
||||||
// {
|
// {
|
||||||
// let _1 := 10
|
// {
|
||||||
// let _2 := 0
|
// let _1 := 10
|
||||||
// mstore(_2, _1)
|
// let _2 := 0
|
||||||
// sstore(_2, 89717814153306320011181716697424560163256864414616650038987186496166826726056)
|
// mstore(_2, _1)
|
||||||
|
// sstore(_2, 89717814153306320011181716697424560163256864414616650038987186496166826726056)
|
||||||
|
// }
|
||||||
// }
|
// }
|
||||||
|
@ -6,8 +6,10 @@
|
|||||||
// step: loadResolver
|
// step: loadResolver
|
||||||
//
|
//
|
||||||
// {
|
// {
|
||||||
// for { }
|
// {
|
||||||
// addmod(keccak256(0x0, create(0x0, 0x0, 0x0)), 0x0, 0x0)
|
// for { }
|
||||||
// { }
|
// addmod(keccak256(0x0, create(0x0, 0x0, 0x0)), 0x0, 0x0)
|
||||||
// { }
|
// { }
|
||||||
|
// { }
|
||||||
|
// }
|
||||||
// }
|
// }
|
||||||
|
@ -10,9 +10,11 @@
|
|||||||
// step: loadResolver
|
// step: loadResolver
|
||||||
//
|
//
|
||||||
// {
|
// {
|
||||||
// let _1 := 30
|
// {
|
||||||
// let _2 := 0
|
// let _1 := 30
|
||||||
// mstore(_2, _1)
|
// let _2 := 0
|
||||||
// if calldataload(_2) { mstore(_2, 20) }
|
// mstore(_2, _1)
|
||||||
// sstore(_2, keccak256(_2, 32))
|
// if calldataload(_2) { mstore(_2, 20) }
|
||||||
|
// sstore(_2, keccak256(_2, 32))
|
||||||
|
// }
|
||||||
// }
|
// }
|
||||||
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user