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>
using namespace std;
using namespace dev;
using namespace dev::solidity::assembly;
bool Scope::registerLabel(yul::YulString _name)
{
if (exists(_name))

View File

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

View File

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

View File

@ -22,7 +22,7 @@
// 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
// }
// {
// 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
// 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
// switch a_1
// case 0:u256 {
// let b_1:u256 := a_1
// let b_2:u256 := a_1
// }
// default {
// let c_1:u256 := a_1
// let c_3:u256 := a_1
// }
// }
// }

View File

@ -13,12 +13,12 @@
// let c: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 a_1:u256
// let x_1:u256
// let a_3:u256
// let x_4:u256
// }
// }

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -17,19 +17,19 @@
// let length_1 := mload(from)
// length := length_1
// mstore(to, length_1)
// let from_1 := add(from, 0x20)
// let to_1 := add(to, 0x20)
// let from_2 := add(from, 0x20)
// let to_3 := add(to, 0x20)
// for {
// let x_1 := 1
// let x := x_1
// let x_4 := 1
// let x := x_4
// }
// lt(x, length_1)
// {
// let x_2 := add(x, 0x20)
// x := x_2
// let x_5 := add(x, 0x20)
// 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)
// b := b_1
// let c_1 := add(c, b_1)
// c := c_1
// let d_1 := add(d, c_1)
// d := d_1
// let a_1 := add(a, d_1)
// a := a_1
// let c_2 := add(c, b_1)
// c := c_2
// let d_3 := add(d, c_2)
// d := d_3
// let a_4 := add(a, d_3)
// a := a_4
// }
// }

View File

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