From 3f784d6e00ea1df123e5e2e8ed8eed999d224b01 Mon Sep 17 00:00:00 2001 From: chriseth Date: Mon, 4 Mar 2019 18:03:30 +0100 Subject: [PATCH] Do not prepend function name to all variables when inlining. --- libyul/optimiser/FullInliner.cpp | 6 +- libyul/optimiser/FullInliner.h | 3 - libyul/optimiser/NameDispenser.cpp | 13 +- libyul/optimiser/NameDispenser.h | 8 +- .../fullInliner/double_inline.yul | 26 ++-- .../fullInliner/inside_condition.yul | 10 +- .../fullInliner/large_function_multi_use.yul | 42 +++--- .../fullInliner/large_function_single_use.yul | 18 +-- .../fullInliner/long_names.yul | 8 +- .../move_up_rightwards_argument.yul | 14 +- .../fullInliner/multi_fun.yul | 24 ++-- .../fullInliner/multi_fun_callback.yul | 26 ++-- .../fullInliner/multi_return.yul | 14 +- .../no_inline_into_big_function.yul | 80 +++++------ .../no_inline_into_big_global_context.yul | 80 +++++------ .../fullInliner/no_return.yul | 4 +- .../fullInliner/not_inside_for.yul | 30 ++-- .../fullInliner/pop_result.yul | 10 +- .../fullInliner/recursion.yul | 2 +- .../yulOptimizerTests/fullInliner/simple.yul | 10 +- .../yulOptimizerTests/fullSuite/abi2.yul | 8 +- .../fullSuite/abi_example1.yul | 82 +++++------ .../yulOptimizerTests/fullSuite/aztec.yul | 131 +++++++++--------- .../yulOptimizerTests/fullSuite/medium.yul | 12 +- 24 files changed, 322 insertions(+), 339 deletions(-) diff --git a/libyul/optimiser/FullInliner.cpp b/libyul/optimiser/FullInliner.cpp index ca6162ec6..3a60a33d4 100644 --- a/libyul/optimiser/FullInliner.cpp +++ b/libyul/optimiser/FullInliner.cpp @@ -177,7 +177,7 @@ vector InlineModifier::performInline(Statement& _statement, FunctionC // helper function to create a new variable that is supposed to model // an existing variable. auto newVariable = [&](TypedName const& _existingVariable, Expression* _value) { - YulString newName = m_nameDispenser.newName(_existingVariable.name, function->name); + YulString newName = m_nameDispenser.newName(_existingVariable.name); variableReplacements[_existingVariable.name] = newName; VariableDeclaration varDecl{_funCall.location, {{_funCall.location, newName, _existingVariable.type}}, {}}; if (_value) @@ -192,7 +192,7 @@ vector InlineModifier::performInline(Statement& _statement, FunctionC for (auto const& var: function->returnVariables) newVariable(var, nullptr); - Statement newBody = BodyCopier(m_nameDispenser, function->name, variableReplacements)(function->body); + Statement newBody = BodyCopier(m_nameDispenser, variableReplacements)(function->body); newStatements += std::move(boost::get(newBody).statements); boost::apply_visitor(GenericFallbackVisitor{ @@ -228,7 +228,7 @@ vector InlineModifier::performInline(Statement& _statement, FunctionC Statement BodyCopier::operator()(VariableDeclaration const& _varDecl) { for (auto const& var: _varDecl.variables) - m_variableReplacements[var.name] = m_nameDispenser.newName(var.name, m_varNamePrefix); + m_variableReplacements[var.name] = m_nameDispenser.newName(var.name); return ASTCopier::operator()(_varDecl); } diff --git a/libyul/optimiser/FullInliner.h b/libyul/optimiser/FullInliner.h index 32664c963..3845d2f09 100644 --- a/libyul/optimiser/FullInliner.h +++ b/libyul/optimiser/FullInliner.h @@ -140,11 +140,9 @@ class BodyCopier: public ASTCopier public: BodyCopier( NameDispenser& _nameDispenser, - YulString _varNamePrefix, std::map const& _variableReplacements ): m_nameDispenser(_nameDispenser), - m_varNamePrefix(_varNamePrefix), m_variableReplacements(_variableReplacements) {} @@ -156,7 +154,6 @@ public: YulString translateIdentifier(YulString _name) override; NameDispenser& m_nameDispenser; - YulString m_varNamePrefix; std::map m_variableReplacements; }; diff --git a/libyul/optimiser/NameDispenser.cpp b/libyul/optimiser/NameDispenser.cpp index 172e6907a..52a115874 100644 --- a/libyul/optimiser/NameDispenser.cpp +++ b/libyul/optimiser/NameDispenser.cpp @@ -39,18 +39,7 @@ NameDispenser::NameDispenser(Dialect const& _dialect, set _usedNames) { } -YulString NameDispenser::newName(YulString _nameHint, YulString _context) -{ - // Shortening rules: Use a suffix of _prefix and a prefix of _context. - YulString prefix = _nameHint; - - if (!_context.empty()) - prefix = YulString{_context.str().substr(0, 10) + "_" + prefix.str()}; - - return newNameInternal(prefix); -} - -YulString NameDispenser::newNameInternal(YulString _nameHint) +YulString NameDispenser::newName(YulString _nameHint) { YulString name = _nameHint; while (name.empty() || m_usedNames.count(name) || m_dialect.builtin(name)) diff --git a/libyul/optimiser/NameDispenser.h b/libyul/optimiser/NameDispenser.h index 719743e6b..6b61596fe 100644 --- a/libyul/optimiser/NameDispenser.h +++ b/libyul/optimiser/NameDispenser.h @@ -43,14 +43,10 @@ public: /// Initialize the name dispenser with the given used names. explicit NameDispenser(Dialect const& _dialect, std::set _usedNames); - /// @returns a currently unused name that should be similar to _nameHint - /// and prefixed by _context if present. - /// If the resulting name would be too long, trims the context at the end - /// and the name hint at the start. - YulString newName(YulString _nameHint, YulString _context = {}); + /// @returns a currently unused name that should be similar to _nameHint. + YulString newName(YulString _nameHint); private: - YulString newNameInternal(YulString _nameHint); Dialect const& m_dialect; std::set m_usedNames; diff --git a/test/libyul/yulOptimizerTests/fullInliner/double_inline.yul b/test/libyul/yulOptimizerTests/fullInliner/double_inline.yul index b3f51593a..e1ef4ab9c 100644 --- a/test/libyul/yulOptimizerTests/fullInliner/double_inline.yul +++ b/test/libyul/yulOptimizerTests/fullInliner/double_inline.yul @@ -8,19 +8,19 @@ // fullInliner // { // { -// let f_a := calldataload(0) -// let f_b := 0 -// let f_c := 0 -// f_b := sload(mload(f_a)) -// f_c := 3 -// let b3 := f_b -// let f_a_2 := f_c -// let f_b_3 := 0 -// let f_c_4 := 0 -// f_b_3 := sload(mload(f_a_2)) -// f_c_4 := 3 -// let b4 := f_b_3 -// let c4 := f_c_4 +// let a_2 := calldataload(0) +// let b_3 := 0 +// let c_4 := 0 +// b_3 := sload(mload(a_2)) +// c_4 := 3 +// let b3 := b_3 +// let a_6 := c_4 +// let b_7 := 0 +// let c_8 := 0 +// b_7 := sload(mload(a_6)) +// c_8 := 3 +// let b4 := b_7 +// let c4 := c_8 // } // function f(a) -> b, c // { diff --git a/test/libyul/yulOptimizerTests/fullInliner/inside_condition.yul b/test/libyul/yulOptimizerTests/fullInliner/inside_condition.yul index 9e6c4e76f..f0bb2e0a7 100644 --- a/test/libyul/yulOptimizerTests/fullInliner/inside_condition.yul +++ b/test/libyul/yulOptimizerTests/fullInliner/inside_condition.yul @@ -13,11 +13,11 @@ // { // { // let _2 := mload(0) -// let f_a := mload(1) -// let f_r := 0 -// f_a := mload(f_a) -// f_r := add(f_a, calldatasize()) -// if gt(f_r, _2) +// let a_10 := mload(1) +// let r_11 := 0 +// a_10 := mload(a_10) +// r_11 := add(a_10, calldatasize()) +// if gt(r_11, _2) // { // sstore(0, 2) // } diff --git a/test/libyul/yulOptimizerTests/fullInliner/large_function_multi_use.yul b/test/libyul/yulOptimizerTests/fullInliner/large_function_multi_use.yul index 3a7ee2f3f..87b825886 100644 --- a/test/libyul/yulOptimizerTests/fullInliner/large_function_multi_use.yul +++ b/test/libyul/yulOptimizerTests/fullInliner/large_function_multi_use.yul @@ -21,28 +21,28 @@ // { // let a_1 := mload(2) // let a2 := 2 -// let f_a := a_1 -// let f_b := 0 -// let f_x := mload(f_a) -// f_b := sload(f_x) -// let f_y := add(f_a, f_x) -// sstore(f_y, 10) -// let r := f_b -// let f_a_3 := a2 -// let f_b_4 := 0 -// let f_x_5 := mload(f_a_3) -// f_b_4 := sload(f_x_5) -// let f_y_6 := add(f_a_3, f_x_5) -// sstore(f_y_6, 10) -// let t := f_b_4 +// let a_3 := a_1 +// let b_4 := 0 +// let x_5 := mload(a_3) +// b_4 := sload(x_5) +// let y_6 := add(a_3, x_5) +// sstore(y_6, 10) +// let r := b_4 +// let a_8 := a2 +// let b_9 := 0 +// let x_10 := mload(a_8) +// b_9 := sload(x_10) +// let y_11 := add(a_8, x_10) +// sstore(y_11, 10) +// let t := b_9 // let a3 -// let f_a_8 := a3 -// let f_b_9 := 0 -// let f_x_10 := mload(f_a_8) -// f_b_9 := sload(f_x_10) -// let f_y_11 := add(f_a_8, f_x_10) -// sstore(f_y_11, 10) -// let s := f_b_9 +// let a_13 := a3 +// let b_14 := 0 +// let x_15 := mload(a_13) +// b_14 := sload(x_15) +// let y_16 := add(a_13, x_15) +// sstore(y_16, 10) +// let s := b_14 // } // function f(a) -> b // { diff --git a/test/libyul/yulOptimizerTests/fullInliner/large_function_single_use.yul b/test/libyul/yulOptimizerTests/fullInliner/large_function_single_use.yul index 72beb8b13..2861d58ec 100644 --- a/test/libyul/yulOptimizerTests/fullInliner/large_function_single_use.yul +++ b/test/libyul/yulOptimizerTests/fullInliner/large_function_single_use.yul @@ -14,15 +14,15 @@ // fullInliner // { // { -// let f_a := mload(1) -// let f_b := 0 -// 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 +// let a_6 := mload(1) +// let b_7 := 0 +// let x_8 := mload(a_6) +// b_7 := sload(x_8) +// let c_9 := 3 +// mstore(mul(a_6, b_7), mload(x_8)) +// let y_12 := add(a_6, x_8) +// sstore(y_12, 10) +// let r := b_7 // } // function f(a) -> b // { diff --git a/test/libyul/yulOptimizerTests/fullInliner/long_names.yul b/test/libyul/yulOptimizerTests/fullInliner/long_names.yul index 869abbc92..95f824268 100644 --- a/test/libyul/yulOptimizerTests/fullInliner/long_names.yul +++ b/test/libyul/yulOptimizerTests/fullInliner/long_names.yul @@ -12,10 +12,10 @@ // { // { // let verylongvariablename2_1 := 3 -// let verylongfu_verylongvariablename := verylongvariablename2_1 -// let verylongfu_verylongvariablename2 := 0 -// verylongfu_verylongvariablename2 := add(verylongfu_verylongvariablename, verylongfu_verylongvariablename) -// mstore(0, verylongfu_verylongvariablename2) +// let verylongvariablename_4 := verylongvariablename2_1 +// let verylongvariablename2_5 := 0 +// verylongvariablename2_5 := add(verylongvariablename_4, verylongvariablename_4) +// mstore(0, verylongvariablename2_5) // mstore(1, verylongvariablename2_1) // } // function verylongfunctionname(verylongvariablename) -> verylongvariablename2 diff --git a/test/libyul/yulOptimizerTests/fullInliner/move_up_rightwards_argument.yul b/test/libyul/yulOptimizerTests/fullInliner/move_up_rightwards_argument.yul index 0b46a3c6f..32db4f0b3 100644 --- a/test/libyul/yulOptimizerTests/fullInliner/move_up_rightwards_argument.yul +++ b/test/libyul/yulOptimizerTests/fullInliner/move_up_rightwards_argument.yul @@ -12,13 +12,13 @@ // let _2 := mload(5) // let _4 := mload(4) // let _6 := mload(3) -// let f_a := mload(2) -// let f_b := _6 -// let f_c := _4 -// let f_x := 0 -// f_x := add(f_a, f_b) -// f_x := mul(f_x, f_c) -// let _10 := add(f_x, _2) +// let a_13 := mload(2) +// let b_14 := _6 +// let c_15 := _4 +// let x_16 := 0 +// x_16 := add(a_13, b_14) +// x_16 := mul(x_16, c_15) +// let _10 := add(x_16, _2) // let y := add(mload(1), _10) // } // function f(a, b, c) -> x diff --git a/test/libyul/yulOptimizerTests/fullInliner/multi_fun.yul b/test/libyul/yulOptimizerTests/fullInliner/multi_fun.yul index 5d658e96e..6aecf7166 100644 --- a/test/libyul/yulOptimizerTests/fullInliner/multi_fun.yul +++ b/test/libyul/yulOptimizerTests/fullInliner/multi_fun.yul @@ -8,14 +8,14 @@ // { // { // let _1 := 7 -// let f_a := 3 -// let f_x := 0 -// f_x := add(f_a, f_a) -// let g_b := f_x -// let g_c := _1 -// let g_y := 0 -// g_y := mul(mload(g_c), f(g_b)) -// let y_1 := g_y +// let a_6 := 3 +// let x_7 := 0 +// x_7 := add(a_6, a_6) +// let b_8 := x_7 +// let c_9 := _1 +// let y_10 := 0 +// y_10 := mul(mload(c_9), f(b_8)) +// let y_1 := y_10 // } // function f(a) -> x // { @@ -23,9 +23,9 @@ // } // function g(b, c) -> y // { -// let f_a_6 := b -// let f_x_7 := 0 -// f_x_7 := add(f_a_6, f_a_6) -// y := mul(mload(c), f_x_7) +// let a_13 := b +// let x_14 := 0 +// x_14 := add(a_13, a_13) +// y := mul(mload(c), x_14) // } // } diff --git a/test/libyul/yulOptimizerTests/fullInliner/multi_fun_callback.yul b/test/libyul/yulOptimizerTests/fullInliner/multi_fun_callback.yul index dbbc5422d..caccc8b80 100644 --- a/test/libyul/yulOptimizerTests/fullInliner/multi_fun_callback.yul +++ b/test/libyul/yulOptimizerTests/fullInliner/multi_fun_callback.yul @@ -26,33 +26,33 @@ // fullInliner // { // { -// let f_x := 100 -// mstore(0, f_x) +// let x_8 := 100 +// mstore(0, x_8) // mstore(7, h()) // g(10) -// mstore(1, f_x) +// mstore(1, x_8) // } // function f(x) // { // mstore(0, x) -// let h_t := 0 -// h_t := 2 -// mstore(7, h_t) -// let g_x_1 := 10 -// let g_f_x_8 := 1 -// mstore(0, g_f_x_8) +// let t_20 := 0 +// t_20 := 2 +// mstore(7, t_20) +// let x_1_21 := 10 +// let x_14_23 := 1 +// mstore(0, x_14_23) // mstore(7, h()) // g(10) -// mstore(1, g_f_x_8) +// mstore(1, x_14_23) // mstore(1, x) // } // function g(x_1) // { -// let f_x_8 := 1 -// mstore(0, f_x_8) +// let x_14 := 1 +// mstore(0, x_14) // mstore(7, h()) // g(10) -// mstore(1, f_x_8) +// mstore(1, x_14) // } // function h() -> t // { diff --git a/test/libyul/yulOptimizerTests/fullInliner/multi_return.yul b/test/libyul/yulOptimizerTests/fullInliner/multi_return.yul index a4cbbef03..2f00aa30b 100644 --- a/test/libyul/yulOptimizerTests/fullInliner/multi_return.yul +++ b/test/libyul/yulOptimizerTests/fullInliner/multi_return.yul @@ -10,13 +10,13 @@ // fullInliner // { // { -// let f_a := mload(0) -// let f_x := 0 -// let f_y := 0 -// f_x := mul(f_a, f_a) -// f_y := add(f_a, f_x) -// let r := f_x -// mstore(r, f_y) +// let a_3 := mload(0) +// let x_4 := 0 +// let y_5 := 0 +// x_4 := mul(a_3, a_3) +// y_5 := add(a_3, x_4) +// let r := x_4 +// mstore(r, y_5) // } // function f(a) -> x, y // { diff --git a/test/libyul/yulOptimizerTests/fullInliner/no_inline_into_big_function.yul b/test/libyul/yulOptimizerTests/fullInliner/no_inline_into_big_function.yul index 589229544..0fecbab88 100644 --- a/test/libyul/yulOptimizerTests/fullInliner/no_inline_into_big_function.yul +++ b/test/libyul/yulOptimizerTests/fullInliner/no_inline_into_big_function.yul @@ -18,45 +18,45 @@ // } // function g() -> x_1 // { -// let f_a := 2 -// let f_b := 0 -// f_b := sload(mload(f_a)) -// let f_a_20 := f_b -// let f_b_21 := 0 -// f_b_21 := sload(mload(f_a_20)) -// let f_a_23 := f_b_21 -// let f_b_24 := 0 -// f_b_24 := sload(mload(f_a_23)) -// let f_a_26 := f_b_24 -// let f_b_27 := 0 -// f_b_27 := sload(mload(f_a_26)) -// let f_a_29 := f_b_27 -// let f_b_30 := 0 -// f_b_30 := sload(mload(f_a_29)) -// let f_a_32 := f_b_30 -// let f_b_33 := 0 -// f_b_33 := sload(mload(f_a_32)) -// let f_a_35 := f_b_33 -// let f_b_36 := 0 -// f_b_36 := sload(mload(f_a_35)) -// let f_a_38 := f_b_36 -// let f_b_39 := 0 -// f_b_39 := sload(mload(f_a_38)) -// let f_a_41 := f_b_39 -// let f_b_42 := 0 -// f_b_42 := sload(mload(f_a_41)) -// let f_a_44 := f_b_42 -// let f_b_45 := 0 -// f_b_45 := sload(mload(f_a_44)) -// let f_a_47 := f_b_45 -// let f_b_48 := 0 -// f_b_48 := sload(mload(f_a_47)) -// let f_a_50 := f_b_48 -// let f_b_51 := 0 -// f_b_51 := sload(mload(f_a_50)) -// let f_a_53 := f_b_51 -// let f_b_54 := 0 -// f_b_54 := sload(mload(f_a_53)) -// x_1 := f(f(f(f(f(f(f_b_54)))))) +// let a_20 := 2 +// let b_21 := 0 +// b_21 := sload(mload(a_20)) +// let a_23 := b_21 +// let b_24 := 0 +// b_24 := sload(mload(a_23)) +// let a_26 := b_24 +// let b_27 := 0 +// b_27 := sload(mload(a_26)) +// let a_29 := b_27 +// let b_30 := 0 +// b_30 := sload(mload(a_29)) +// let a_32 := b_30 +// let b_33 := 0 +// b_33 := sload(mload(a_32)) +// let a_35 := b_33 +// let b_36 := 0 +// b_36 := sload(mload(a_35)) +// let a_38 := b_36 +// let b_39 := 0 +// b_39 := sload(mload(a_38)) +// let a_41 := b_39 +// let b_42 := 0 +// b_42 := sload(mload(a_41)) +// let a_44 := b_42 +// let b_45 := 0 +// b_45 := sload(mload(a_44)) +// let a_47 := b_45 +// let b_48 := 0 +// b_48 := sload(mload(a_47)) +// let a_50 := b_48 +// let b_51 := 0 +// b_51 := sload(mload(a_50)) +// let a_53 := b_51 +// let b_54 := 0 +// b_54 := sload(mload(a_53)) +// let a_56 := b_54 +// let b_57 := 0 +// b_57 := sload(mload(a_56)) +// x_1 := f(f(f(f(f(f(b_57)))))) // } // } diff --git a/test/libyul/yulOptimizerTests/fullInliner/no_inline_into_big_global_context.yul b/test/libyul/yulOptimizerTests/fullInliner/no_inline_into_big_global_context.yul index 3dc27b2db..8541402ee 100644 --- a/test/libyul/yulOptimizerTests/fullInliner/no_inline_into_big_global_context.yul +++ b/test/libyul/yulOptimizerTests/fullInliner/no_inline_into_big_global_context.yul @@ -11,46 +11,46 @@ // fullInliner // { // { -// let f_a := 2 -// let f_b := 0 -// f_b := sload(mload(f_a)) -// let f_a_20 := f_b -// let f_b_21 := 0 -// f_b_21 := sload(mload(f_a_20)) -// let f_a_23 := f_b_21 -// let f_b_24 := 0 -// f_b_24 := sload(mload(f_a_23)) -// let f_a_26 := f_b_24 -// let f_b_27 := 0 -// f_b_27 := sload(mload(f_a_26)) -// let f_a_29 := f_b_27 -// let f_b_30 := 0 -// f_b_30 := sload(mload(f_a_29)) -// let f_a_32 := f_b_30 -// let f_b_33 := 0 -// f_b_33 := sload(mload(f_a_32)) -// let f_a_35 := f_b_33 -// let f_b_36 := 0 -// f_b_36 := sload(mload(f_a_35)) -// let f_a_38 := f_b_36 -// let f_b_39 := 0 -// f_b_39 := sload(mload(f_a_38)) -// let f_a_41 := f_b_39 -// let f_b_42 := 0 -// f_b_42 := sload(mload(f_a_41)) -// let f_a_44 := f_b_42 -// let f_b_45 := 0 -// f_b_45 := sload(mload(f_a_44)) -// let f_a_47 := f_b_45 -// let f_b_48 := 0 -// f_b_48 := sload(mload(f_a_47)) -// let f_a_50 := f_b_48 -// let f_b_51 := 0 -// f_b_51 := sload(mload(f_a_50)) -// let f_a_53 := f_b_51 -// let f_b_54 := 0 -// f_b_54 := sload(mload(f_a_53)) -// let x_1 := f(f(f(f(f(f(f_b_54)))))) +// let a_20 := 2 +// let b_21 := 0 +// b_21 := sload(mload(a_20)) +// let a_23 := b_21 +// let b_24 := 0 +// b_24 := sload(mload(a_23)) +// let a_26 := b_24 +// let b_27 := 0 +// b_27 := sload(mload(a_26)) +// let a_29 := b_27 +// let b_30 := 0 +// b_30 := sload(mload(a_29)) +// let a_32 := b_30 +// let b_33 := 0 +// b_33 := sload(mload(a_32)) +// let a_35 := b_33 +// let b_36 := 0 +// b_36 := sload(mload(a_35)) +// let a_38 := b_36 +// let b_39 := 0 +// b_39 := sload(mload(a_38)) +// let a_41 := b_39 +// let b_42 := 0 +// b_42 := sload(mload(a_41)) +// let a_44 := b_42 +// let b_45 := 0 +// b_45 := sload(mload(a_44)) +// let a_47 := b_45 +// let b_48 := 0 +// b_48 := sload(mload(a_47)) +// let a_50 := b_48 +// let b_51 := 0 +// b_51 := sload(mload(a_50)) +// let a_53 := b_51 +// let b_54 := 0 +// b_54 := sload(mload(a_53)) +// let a_56 := b_54 +// let b_57 := 0 +// b_57 := sload(mload(a_56)) +// let x_1 := f(f(f(f(f(f(b_57)))))) // } // function f(a) -> b // { diff --git a/test/libyul/yulOptimizerTests/fullInliner/no_return.yul b/test/libyul/yulOptimizerTests/fullInliner/no_return.yul index 3708c5574..fe8bd3996 100644 --- a/test/libyul/yulOptimizerTests/fullInliner/no_return.yul +++ b/test/libyul/yulOptimizerTests/fullInliner/no_return.yul @@ -8,8 +8,8 @@ // fullInliner // { // { -// let f_a := mload(0) -// sstore(f_a, f_a) +// let a_3 := mload(0) +// sstore(a_3, a_3) // } // function f(a) // { diff --git a/test/libyul/yulOptimizerTests/fullInliner/not_inside_for.yul b/test/libyul/yulOptimizerTests/fullInliner/not_inside_for.yul index 96d806bdd..98a31003e 100644 --- a/test/libyul/yulOptimizerTests/fullInliner/not_inside_for.yul +++ b/test/libyul/yulOptimizerTests/fullInliner/not_inside_for.yul @@ -13,26 +13,26 @@ // { // { // for { -// let f_a := 0 -// let f_r := 0 -// sstore(f_a, 0) -// f_r := f_a -// let x := f_r +// let a_3 := 0 +// let r_4 := 0 +// sstore(a_3, 0) +// r_4 := a_3 +// let x := r_4 // } // f(x) // { -// let f_a_3 := x -// let f_r_4 := 0 -// sstore(f_a_3, 0) -// f_r_4 := f_a_3 -// x := f_r_4 +// let a_6 := x +// let r_7 := 0 +// sstore(a_6, 0) +// r_7 := a_6 +// x := r_7 // } // { -// let f_a_6 := x -// let f_r_7 := 0 -// sstore(f_a_6, 0) -// f_r_7 := f_a_6 -// let t := f_r_7 +// let a_9 := x +// let r_10 := 0 +// sstore(a_9, 0) +// r_10 := a_9 +// let t := r_10 // } // } // function f(a) -> r diff --git a/test/libyul/yulOptimizerTests/fullInliner/pop_result.yul b/test/libyul/yulOptimizerTests/fullInliner/pop_result.yul index c1bed208a..63ad8e31e 100644 --- a/test/libyul/yulOptimizerTests/fullInliner/pop_result.yul +++ b/test/libyul/yulOptimizerTests/fullInliner/pop_result.yul @@ -13,11 +13,11 @@ // { // { // let _1 := 2 -// let f_a := 7 -// let f_x := 0 -// let f_r := mul(f_a, f_a) -// f_x := add(f_r, f_r) -// pop(add(f_x, _1)) +// let a_5 := 7 +// let x_6 := 0 +// let r_7 := mul(a_5, a_5) +// x_6 := add(r_7, r_7) +// pop(add(x_6, _1)) // } // function f(a) -> x // { diff --git a/test/libyul/yulOptimizerTests/fullInliner/recursion.yul b/test/libyul/yulOptimizerTests/fullInliner/recursion.yul index 3e9a8021d..5ac6ce772 100644 --- a/test/libyul/yulOptimizerTests/fullInliner/recursion.yul +++ b/test/libyul/yulOptimizerTests/fullInliner/recursion.yul @@ -8,7 +8,7 @@ // fullInliner // { // { -// let f_a := mload(0) +// let a_4 := mload(0) // f(1) // } // function f(a) diff --git a/test/libyul/yulOptimizerTests/fullInliner/simple.yul b/test/libyul/yulOptimizerTests/fullInliner/simple.yul index 1ada8f534..6b043c911 100644 --- a/test/libyul/yulOptimizerTests/fullInliner/simple.yul +++ b/test/libyul/yulOptimizerTests/fullInliner/simple.yul @@ -10,11 +10,11 @@ // { // { // let _2 := mload(7) -// let f_a := sload(mload(2)) -// let f_x := 0 -// let f_r := mul(f_a, f_a) -// f_x := add(f_r, f_r) -// let y := add(f_x, _2) +// let a_7 := sload(mload(2)) +// let x_8 := 0 +// let r_9 := mul(a_7, a_7) +// x_8 := add(r_9, r_9) +// let y := add(x_8, _2) // } // function f(a) -> x // { diff --git a/test/libyul/yulOptimizerTests/fullSuite/abi2.yul b/test/libyul/yulOptimizerTests/fullSuite/abi2.yul index 4e14ac518..179dcc3d6 100644 --- a/test/libyul/yulOptimizerTests/fullSuite/abi2.yul +++ b/test/libyul/yulOptimizerTests/fullSuite/abi2.yul @@ -1103,17 +1103,17 @@ // { // revert(value4, value4) // } -// let abi_decode_length := calldataload(_2) -// if gt(abi_decode_length, _1) +// let length := calldataload(_2) +// if gt(length, _1) // { // revert(value4, value4) // } -// if gt(add(add(_2, abi_decode_length), 32), dataEnd) +// if gt(add(add(_2, length), 32), dataEnd) // { // revert(value4, value4) // } // value2 := add(_2, 32) -// value3 := abi_decode_length +// value3 := length // let _3 := calldataload(add(headStart, 96)) // if iszero(lt(_3, 3)) // { diff --git a/test/libyul/yulOptimizerTests/fullSuite/abi_example1.yul b/test/libyul/yulOptimizerTests/fullSuite/abi_example1.yul index 2b63d768f..bf60aa0a4 100644 --- a/test/libyul/yulOptimizerTests/fullSuite/abi_example1.yul +++ b/test/libyul/yulOptimizerTests/fullSuite/abi_example1.yul @@ -461,36 +461,36 @@ // let _1 := 0x20 // let _2 := 0 // let _3 := mload(_2) -// let abi_encode_pos := _1 -// let abi_encode_length := mload(_3) -// mstore(_1, abi_encode_length) -// abi_encode_pos := 64 -// let abi_encode_srcPtr := add(_3, _1) -// let abi_encode_i := _2 +// let pos := _1 +// let length := mload(_3) +// mstore(_1, length) +// pos := 64 +// let srcPtr := add(_3, _1) +// let i := _2 // for { // } -// lt(abi_encode_i, abi_encode_length) +// lt(i, length) // { -// abi_encode_i := add(abi_encode_i, 1) +// i := add(i, 1) // } // { -// let _4 := mload(abi_encode_srcPtr) -// let abi_encode_pos_1 := abi_encode_pos -// let abi_encode_srcPtr_1 := _4 -// let abi_encode_i_1 := _2 +// let _4 := mload(srcPtr) +// let pos_1 := pos +// let srcPtr_1 := _4 +// let i_1 := _2 // for { // } -// lt(abi_encode_i_1, 0x3) +// lt(i_1, 0x3) // { -// abi_encode_i_1 := add(abi_encode_i_1, 1) +// i_1 := add(i_1, 1) // } // { -// mstore(abi_encode_pos_1, and(mload(abi_encode_srcPtr_1), 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF)) -// abi_encode_srcPtr_1 := add(abi_encode_srcPtr_1, _1) -// abi_encode_pos_1 := add(abi_encode_pos_1, _1) +// mstore(pos_1, and(mload(srcPtr_1), 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF)) +// srcPtr_1 := add(srcPtr_1, _1) +// pos_1 := add(pos_1, _1) // } -// abi_encode_srcPtr := add(abi_encode_srcPtr, _1) -// abi_encode_pos := add(abi_encode_pos, 0x60) +// srcPtr := add(srcPtr, _1) +// pos := add(pos, 0x60) // } // let _5 := mload(64) // let _6 := mload(_1) @@ -498,22 +498,22 @@ // { // revert(_2, _2) // } -// let abi_decode_offset := calldataload(add(_6, 64)) -// let abi_decode := 0xffffffffffffffff -// if gt(abi_decode_offset, abi_decode) +// let offset := calldataload(add(_6, 64)) +// let _7 := 0xffffffffffffffff +// if gt(offset, _7) // { // revert(_2, _2) // } -// let abi_decode_value2 := abi_decode_t_array$_t_uint256_$dyn_memory_ptr(add(_6, abi_decode_offset), _5) -// let abi_decode_offset_1 := calldataload(add(_6, 96)) -// if gt(abi_decode_offset_1, abi_decode) +// let value2 := abi_decode_t_array$_t_uint256_$dyn_memory_ptr(add(_6, offset), _5) +// let offset_1 := calldataload(add(_6, 96)) +// if gt(offset_1, _7) // { // revert(_2, _2) // } -// let abi_decode_value3 := abi_decode_t_array$_t_array$_t_uint256_$2_memory_$dyn_memory_ptr(add(_6, abi_decode_offset_1), _5) +// let value3 := abi_decode_t_array$_t_array$_t_uint256_$2_memory_$dyn_memory_ptr(add(_6, offset_1), _5) // sstore(calldataload(_6), calldataload(add(_6, _1))) -// sstore(abi_decode_value2, abi_decode_value3) -// sstore(_2, abi_encode_pos) +// sstore(value2, value3) +// sstore(_2, pos) // function abi_decode_t_array$_t_array$_t_uint256_$2_memory_$dyn_memory_ptr(offset, end) -> array // { // if iszero(slt(add(offset, 0x1f), end)) @@ -543,29 +543,29 @@ // { // revert(0, 0) // } -// let abi_decode_dst := allocateMemory(array_allocation_size_t_array$_t_uint256_$2_memory(0x2)) -// let abi_decode_dst_1 := abi_decode_dst -// let abi_decode_src := src -// let abi_decode := add(src, 0x40) -// if gt(abi_decode, end) +// let dst_1 := allocateMemory(array_allocation_size_t_array$_t_uint256_$2_memory(0x2)) +// let dst_2 := dst_1 +// let src_1 := src +// let _2 := add(src, 0x40) +// if gt(_2, end) // { // revert(0, 0) // } -// let abi_decode_i := 0 +// let i_1 := 0 // for { // } -// lt(abi_decode_i, 0x2) +// lt(i_1, 0x2) // { -// abi_decode_i := add(abi_decode_i, 1) +// i_1 := add(i_1, 1) // } // { -// mstore(abi_decode_dst, calldataload(abi_decode_src)) -// abi_decode_dst := add(abi_decode_dst, _1) -// abi_decode_src := add(abi_decode_src, _1) +// mstore(dst_1, calldataload(src_1)) +// dst_1 := add(dst_1, _1) +// src_1 := add(src_1, _1) // } -// mstore(dst, abi_decode_dst_1) +// mstore(dst, dst_2) // dst := add(dst, _1) -// src := abi_decode +// src := _2 // } // } // function abi_decode_t_array$_t_uint256_$dyn_memory_ptr(offset, end) -> array diff --git a/test/libyul/yulOptimizerTests/fullSuite/aztec.yul b/test/libyul/yulOptimizerTests/fullSuite/aztec.yul index 4778f5d9d..71676bcb7 100644 --- a/test/libyul/yulOptimizerTests/fullSuite/aztec.yul +++ b/test/libyul/yulOptimizerTests/fullSuite/aztec.yul @@ -231,107 +231,108 @@ // ---- // fullSuite // { -// let validateJo := 0x80 -// mstore(validateJo, 7673901602397024137095011250362199966051872585513276903826533215767972925880) +// let _1 := 0x80 +// mstore(_1, 7673901602397024137095011250362199966051872585513276903826533215767972925880) // mstore(0xa0, 8489654445897228341090914135473290831551238522473825886865492707826370766375) -// let validateJo_m := calldataload(0x24) -// let validateJo_n := calldataload(add(0x04, calldataload(0x04))) -// let validateJo_gen_order := 0x30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001 -// let validateJo_challenge := mod(calldataload(0x44), validateJo_gen_order) -// if gt(validateJo_m, validateJo_n) +// let m := calldataload(0x24) +// let n := calldataload(add(0x04, calldataload(0x04))) +// let gen_order := 0x30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001 +// let challenge := mod(calldataload(0x44), gen_order) +// if gt(m, n) // { // mstore(0x00, 404) // revert(0x00, 0x20) // } -// let validateJo_kn := calldataload(add(calldatasize(), 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff40)) +// let kn := calldataload(add(calldatasize(), 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff40)) // mstore(0x2a0, caller()) -// mstore(0x2c0, validateJo_kn) -// mstore(0x2e0, validateJo_m) -// validateJo_kn := mulmod(sub(validateJo_gen_order, validateJo_kn), validateJo_challenge, validateJo_gen_order) -// hashCommitments(add(0x04, calldataload(0x04)), validateJo_n) -// let validateJo_b := add(0x300, mul(validateJo_n, validateJo)) -// let validateJo_i := 0 -// let validateJo_i_1 := validateJo_i +// mstore(0x2c0, kn) +// mstore(0x2e0, m) +// kn := mulmod(sub(gen_order, kn), challenge, gen_order) +// hashCommitments(add(0x04, calldataload(0x04)), n) +// let b := add(0x300, mul(n, _1)) +// let i := 0 +// let i_1 := i // for { // } -// lt(validateJo_i, validateJo_n) +// lt(i, n) // { -// validateJo_i := add(validateJo_i, 0x01) +// i := add(i, 0x01) // } // { -// let validateJo_1 := add(calldataload(0x04), mul(validateJo_i, 0xc0)) -// let validateJo_k := validateJo_i_1 -// let validateJo_a := calldataload(add(validateJo_1, 0x44)) -// let validateJo_c := validateJo_challenge -// switch eq(add(validateJo_i, 0x01), validateJo_n) +// let _2 := add(calldataload(0x04), mul(i, 0xc0)) +// let k := i_1 +// let a := calldataload(add(_2, 0x44)) +// let c := challenge +// switch eq(add(i, 0x01), n) // case 1 { -// validateJo_k := validateJo_kn -// if eq(validateJo_m, validateJo_n) +// k := kn +// if eq(m, n) // { -// validateJo_k := sub(validateJo_gen_order, validateJo_kn) +// k := sub(gen_order, kn) // } // } // case 0 { -// validateJo_k := calldataload(add(validateJo_1, 0x24)) +// k := calldataload(add(_2, 0x24)) // } -// validateCommitment(add(validateJo_1, 0x24), validateJo_k, validateJo_a) -// switch gt(add(validateJo_i, 0x01), validateJo_m) +// validateCommitment(add(_2, 0x24), k, a) +// switch gt(add(i, 0x01), m) // case 1 { -// validateJo_kn := addmod(validateJo_kn, sub(validateJo_gen_order, validateJo_k), validateJo_gen_order) -// let validateJo_x := mod(mload(validateJo_i_1), validateJo_gen_order) -// validateJo_k := mulmod(validateJo_k, validateJo_x, validateJo_gen_order) -// validateJo_a := mulmod(validateJo_a, validateJo_x, validateJo_gen_order) -// validateJo_c := mulmod(validateJo_challenge, validateJo_x, validateJo_gen_order) -// mstore(validateJo_i_1, keccak256(validateJo_i_1, 0x20)) +// kn := addmod(kn, sub(gen_order, k), gen_order) +// let x := mod(mload(i_1), gen_order) +// k := mulmod(k, x, gen_order) +// a := mulmod(a, x, gen_order) +// c := mulmod(challenge, x, gen_order) +// mstore(i_1, keccak256(i_1, 0x20)) // } // case 0 { -// validateJo_kn := addmod(validateJo_kn, validateJo_k, validateJo_gen_order) +// kn := addmod(kn, k, gen_order) // } -// let validateJo_2 := 0x40 -// calldatacopy(0xe0, add(validateJo_1, 164), validateJo_2) -// calldatacopy(0x20, add(validateJo_1, 100), validateJo_2) -// mstore(0x120, sub(validateJo_gen_order, validateJo_c)) -// mstore(0x60, validateJo_k) -// mstore(0xc0, validateJo_a) -// let validateJo_result := call(gas(), 7, validateJo_i_1, 0xe0, 0x60, 0x1a0, validateJo_2) -// let validateJo_result_1 := and(validateJo_result, call(gas(), 7, validateJo_i_1, 0x20, 0x60, 0x120, validateJo_2)) -// let validateJo_result_2 := and(validateJo_result_1, call(gas(), 7, validateJo_i_1, validateJo, 0x60, 0x160, validateJo_2)) -// let validateJo_result_3 := and(validateJo_result_2, call(gas(), 6, validateJo_i_1, 0x120, validateJo, 0x160, validateJo_2)) -// validateJo_result := and(validateJo_result_3, call(gas(), 6, validateJo_i_1, 0x160, validateJo, validateJo_b, validateJo_2)) -// if eq(validateJo_i, validateJo_m) +// let _3 := 0x40 +// calldatacopy(0xe0, add(_2, 164), _3) +// calldatacopy(0x20, add(_2, 100), _3) +// mstore(0x120, sub(gen_order, c)) +// let _4 := 0x60 +// mstore(_4, k) +// mstore(0xc0, a) +// let result := call(gas(), 7, i_1, 0xe0, _4, 0x1a0, _3) +// let result_1 := and(result, call(gas(), 7, i_1, 0x20, _4, 0x120, _3)) +// let result_2 := and(result_1, call(gas(), 7, i_1, _1, _4, 0x160, _3)) +// let result_3 := and(result_2, call(gas(), 6, i_1, 0x120, _1, 0x160, _3)) +// result := and(result_3, call(gas(), 6, i_1, 0x160, _1, b, _3)) +// if eq(i, m) // { // mstore(0x260, mload(0x20)) -// mstore(0x280, mload(validateJo_2)) +// mstore(0x280, mload(_3)) // mstore(0x1e0, mload(0xe0)) // mstore(0x200, sub(0x30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd47, mload(0x100))) // } -// if gt(validateJo_i, validateJo_m) +// if gt(i, m) // { -// mstore(0x60, validateJo_c) -// let validateJo_result_4 := and(validateJo_result, call(gas(), 7, validateJo_i_1, 0x20, 0x60, 0x220, validateJo_2)) -// let validateJo_result_5 := and(validateJo_result_4, call(gas(), 6, validateJo_i_1, 0x220, validateJo, 0x260, validateJo_2)) -// validateJo_result := and(validateJo_result_5, call(gas(), 6, validateJo_i_1, 0x1a0, validateJo, 0x1e0, validateJo_2)) +// mstore(_4, c) +// let result_4 := and(result, call(gas(), 7, i_1, 0x20, _4, 0x220, _3)) +// let result_5 := and(result_4, call(gas(), 6, i_1, 0x220, _1, 0x260, _3)) +// result := and(result_5, call(gas(), 6, i_1, 0x1a0, _1, 0x1e0, _3)) // } -// if iszero(validateJo_result) +// if iszero(result) // { -// mstore(validateJo_i_1, 400) -// revert(validateJo_i_1, 0x20) +// mstore(i_1, 400) +// revert(i_1, 0x20) // } -// validateJo_b := add(validateJo_b, validateJo_2) +// b := add(b, _3) // } -// if lt(validateJo_m, validateJo_n) +// if lt(m, n) // { // validatePairing(0x64) // } -// if iszero(eq(mod(keccak256(0x2a0, add(validateJo_b, 0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd60)), validateJo_gen_order), validateJo_challenge)) +// if iszero(eq(mod(keccak256(0x2a0, add(b, 0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd60)), gen_order), challenge)) // { -// mstore(validateJo_i_1, 404) -// revert(validateJo_i_1, 0x20) +// mstore(i_1, 404) +// revert(i_1, 0x20) // } -// mstore(validateJo_i_1, 0x01) -// return(validateJo_i_1, 0x20) -// mstore(validateJo_i_1, 404) -// revert(validateJo_i_1, 0x20) +// mstore(i_1, 0x01) +// return(i_1, 0x20) +// mstore(i_1, 404) +// revert(i_1, 0x20) // function validatePairing(t2) // { // let t2_x := calldataload(t2) diff --git a/test/libyul/yulOptimizerTests/fullSuite/medium.yul b/test/libyul/yulOptimizerTests/fullSuite/medium.yul index e9c4180da..dc3cfaaa4 100644 --- a/test/libyul/yulOptimizerTests/fullSuite/medium.yul +++ b/test/libyul/yulOptimizerTests/fullSuite/medium.yul @@ -19,10 +19,10 @@ // ---- // fullSuite // { -// let allocate := 0x40 -// mstore(allocate, add(mload(allocate), 0x20)) -// let allocate_p := mload(allocate) -// mstore(allocate, add(allocate_p, allocate)) -// mstore(add(allocate_p, 96), 2) -// mstore(allocate, 0x20) +// let _1 := 0x40 +// mstore(_1, add(mload(_1), 0x20)) +// let p := mload(_1) +// mstore(_1, add(p, _1)) +// mstore(add(p, 96), 2) +// mstore(_1, 0x20) // }