Use single counter for name dispenser for performance reasons.

This commit is contained in:
chriseth 2018-11-07 19:27:15 +01:00
parent deed8e21f6
commit 845899e305
16 changed files with 67 additions and 67 deletions

View File

@ -21,9 +21,9 @@
#include <libsolidity/inlineasm/AsmScope.h> #include <libsolidity/inlineasm/AsmScope.h>
using namespace std; using namespace std;
using namespace dev;
using namespace dev::solidity::assembly; using namespace dev::solidity::assembly;
bool Scope::registerLabel(yul::YulString _name) bool Scope::registerLabel(yul::YulString _name)
{ {
if (exists(_name)) if (exists(_name))

View File

@ -52,11 +52,10 @@ YulString NameDispenser::newName(YulString _nameHint, YulString _context)
YulString NameDispenser::newNameInternal(YulString _nameHint) YulString NameDispenser::newNameInternal(YulString _nameHint)
{ {
YulString name = _nameHint; YulString name = _nameHint;
size_t suffix = 0;
while (name.empty() || m_usedNames.count(name)) while (name.empty() || m_usedNames.count(name))
{ {
suffix++; m_counter++;
name = YulString(_nameHint.str() + "_" + to_string(suffix)); name = YulString(_nameHint.str() + "_" + to_string(m_counter));
} }
m_usedNames.emplace(name); m_usedNames.emplace(name);
return name; return name;

View File

@ -54,6 +54,7 @@ private:
YulString newNameInternal(YulString _nameHint); YulString newNameInternal(YulString _nameHint);
std::set<YulString> m_usedNames; std::set<YulString> m_usedNames;
size_t m_counter = 0;
}; };
} }

View File

@ -22,7 +22,7 @@
// a_1 := a_1 // a_1 := a_1
// } // }
// { // {
// let b_1:u256 := a_1 // let b_2:u256 := a_1
// } // }
// } // }
// } // }

View File

@ -14,9 +14,9 @@
// let a:u256, b:u256, c:u256, d:u256, f:u256 // let a:u256, b:u256, c:u256, d:u256, f:u256
// } // }
// { // {
// function f_1(a_1:u256) -> c_1:u256, d_1:u256 // function f_1(a_2:u256) -> c_3:u256, d_4:u256
// { // {
// let b_1:u256, c_1_1:u256 := f_1(a_1) // let b_5:u256, c_1:u256 := f_1(a_2)
// } // }
// } // }
// } // }

View File

@ -16,7 +16,7 @@
// let a_1:bool // let a_1:bool
// if a_1 // if a_1
// { // {
// let b_1:bool := a_1 // let b_2:bool := a_1
// } // }
// } // }
// } // }

View File

@ -18,10 +18,10 @@
// let a_1:u256 // let a_1:u256
// switch a_1 // switch a_1
// case 0:u256 { // case 0:u256 {
// let b_1:u256 := a_1 // let b_2:u256 := a_1
// } // }
// default { // default {
// let c_1:u256 := a_1 // let c_3:u256 := a_1
// } // }
// } // }
// } // }

View File

@ -13,12 +13,12 @@
// let c:u256 // let c:u256
// let b:u256 // let b:u256
// } // }
// function f(a:u256, c_1:u256) -> b_1:u256 // function f(a:u256, c_1:u256) -> b_2:u256
// { // {
// let x:u256 // let x:u256
// } // }
// { // {
// let a_1:u256 // let a_3:u256
// let x_1:u256 // let x_4:u256
// } // }
// } // }

View File

@ -14,13 +14,13 @@
// f_b := sload(mload(f_a)) // f_b := sload(mload(f_a))
// f_c := 3 // f_c := 3
// let b3 := f_b // let b3 := f_b
// let f_a_1 := f_c // let f_a_2 := f_c
// let f_b_1 // let f_b_3
// let f_c_1 // let f_c_4
// f_b_1 := sload(mload(f_a_1)) // f_b_3 := sload(mload(f_a_2))
// f_c_1 := 3 // f_c_4 := 3
// let b4 := f_b_1 // let b4 := f_b_3
// let c4 := f_c_1 // let c4 := f_c_4
// } // }
// function f(a) -> b, c // function f(a) -> b, c
// { // {

View File

@ -23,9 +23,9 @@
// } // }
// function g(b, c) -> y // function g(b, c) -> y
// { // {
// let f_a_1 := b // let f_a_6 := b
// let f_x_1 // let f_x_7
// f_x_1 := add(f_a_1, f_a_1) // f_x_7 := add(f_a_6, f_a_6)
// y := mul(mload(c), f_x_1) // y := mul(mload(c), f_x_7)
// } // }
// } // }

View File

@ -46,14 +46,14 @@
// } // }
// function g(x_1) // function g(x_1)
// { // {
// let f_x_1 := 1 // let f_x_8 := 1
// mstore(0, f_x_1) // mstore(0, f_x_8)
// let f_h_t // let f_h_t
// f_h_t := 2 // f_h_t := 2
// mstore(7, f_h_t) // mstore(7, f_h_t)
// let f_g_x_1 := 10 // let f_g_x_1 := 10
// f(1) // f(1)
// mstore(1, f_x_1) // mstore(1, f_x_8)
// } // }
// function h() -> t // function h() -> t
// { // {

View File

@ -21,18 +21,18 @@
// } // }
// f(x) // f(x)
// { // {
// let f_a_1 := x // let f_a_3 := x
// let f_r_1 // let f_r_4
// sstore(f_a_1, 0) // sstore(f_a_3, 0)
// f_r_1 := f_a_1 // f_r_4 := f_a_3
// x := f_r_1 // x := f_r_4
// } // }
// { // {
// let f_a_2 := x // let f_a_6 := x
// let f_r_2 // let f_r_7
// sstore(f_a_2, 0) // sstore(f_a_6, 0)
// f_r_2 := f_a_2 // f_r_7 := f_a_6
// let t := f_r_2 // let t := f_r_7
// } // }
// } // }
// function f(a) -> r // function f(a) -> r

View File

@ -14,13 +14,13 @@
// fullSuite // fullSuite
// { // {
// { // {
// let _12 := 0x20 // let _18 := 0x20
// let allocate__7 := 0x40 // let allocate__7 := 0x40
// let allocate_p_2 := mload(allocate__7) // let allocate_p_12 := mload(allocate__7)
// mstore(allocate__7, add(allocate_p_2, _12)) // mstore(allocate__7, add(allocate_p_12, _18))
// pop(allocate_p_2) // pop(allocate_p_12)
// let allocate_p_2_1 := mload(allocate__7) // let allocate_p_12_31 := mload(allocate__7)
// mstore(allocate__7, add(allocate_p_2_1, allocate__7)) // mstore(allocate__7, add(allocate_p_12_31, allocate__7))
// mstore(add(allocate_p_2_1, 96), 2) // mstore(add(allocate_p_12_31, 96), 2)
// } // }
// } // }

View File

@ -17,19 +17,19 @@
// let length_1 := mload(from) // let length_1 := mload(from)
// length := length_1 // length := length_1
// mstore(to, length_1) // mstore(to, length_1)
// let from_1 := add(from, 0x20) // let from_2 := add(from, 0x20)
// let to_1 := add(to, 0x20) // let to_3 := add(to, 0x20)
// for { // for {
// let x_1 := 1 // let x_4 := 1
// let x := x_1 // let x := x_4
// } // }
// lt(x, length_1) // lt(x, length_1)
// { // {
// let x_2 := add(x, 0x20) // let x_5 := add(x, 0x20)
// x := x_2 // x := x_5
// } // }
// { // {
// mstore(add(to_1, x), mload(add(from_1, x))) // mstore(add(to_3, x), mload(add(from_2, x)))
// } // }
// } // }
// } // }

View File

@ -13,11 +13,11 @@
// { // {
// let b_1 := add(b, a) // let b_1 := add(b, a)
// b := b_1 // b := b_1
// let c_1 := add(c, b_1) // let c_2 := add(c, b_1)
// c := c_1 // c := c_2
// let d_1 := add(d, c_1) // let d_3 := add(d, c_2)
// d := d_1 // d := d_3
// let a_1 := add(a, d_1) // let a_4 := add(a, d_3)
// a := a_1 // a := a_4
// } // }
// } // }

View File

@ -17,16 +17,16 @@
// let a := a_1 // let a := a_1
// let a_2 := 2 // let a_2 := 2
// a := a_2 // a := a_2
// let b_1 := 3 // let b_3 := 3
// let b := b_1 // let b := b_3
// let b_2 := 4 // let b_4 := 4
// b := b_2 // b := b_4
// { // {
// let a_3 := 3 // let a_5 := 3
// a := a_3 // a := a_5
// let a_4 := 4 // let a_6 := 4
// a := a_4 // a := a_6
// } // }
// let a_5 := add(b_2, a) // let a_7 := add(b_4, a)
// a := a_5 // a := a_7
// } // }