Skip to content

Commit 09578e7

Browse files
authored
Merge pull request #11550 from ethereum/runs-constant
Constant for default --runs
2 parents 19b217d + 6ad6fa2 commit 09578e7

File tree

10 files changed

+31
-23
lines changed

10 files changed

+31
-23
lines changed

libevmasm/Assembly.h

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,8 @@
3030
#include <libsolutil/Assertions.h>
3131
#include <libsolutil/Keccak256.h>
3232

33+
#include <libsolidity/interface/OptimiserSettings.h>
34+
3335
#include <json/json.h>
3436

3537
#include <iostream>
@@ -124,7 +126,7 @@ class Assembly
124126
langutil::EVMVersion evmVersion;
125127
/// This specifies an estimate on how often each opcode in this assembly will be executed,
126128
/// i.e. use a small value to optimise for size and a large value to optimise for runtime gas usage.
127-
size_t expectedExecutionsPerDeployment = 200;
129+
size_t expectedExecutionsPerDeployment = frontend::OptimiserSettings{}.expectedExecutionsPerDeployment;
128130
};
129131

130132
/// Modify and return the current assembly such that creation and execution gas usage

libevmasm/Inliner.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222
#pragma once
2323

2424
#include <libsolutil/Common.h>
25+
#include <libevmasm/Assembly.h>
2526
#include <libevmasm/AssemblyItem.h>
2627
#include <liblangutil/EVMVersion.h>
2728

@@ -75,7 +76,7 @@ class Inliner
7576

7677
AssemblyItems& m_items;
7778
std::set<size_t> const& m_tagsReferencedFromOutside;
78-
size_t const m_runs = 200;
79+
size_t const m_runs = Assembly::OptimiserSettings{}.expectedExecutionsPerDeployment;
7980
bool const m_isCreation = false;
8081
langutil::EVMVersion const m_evmVersion;
8182
};

libsolidity/interface/CompilerStack.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -243,7 +243,7 @@ void CompilerStack::setLibraries(std::map<std::string, util::h160> const& _libra
243243
m_libraries = _libraries;
244244
}
245245

246-
void CompilerStack::setOptimiserSettings(bool _optimize, unsigned _runs)
246+
void CompilerStack::setOptimiserSettings(bool _optimize, size_t _runs)
247247
{
248248
OptimiserSettings settings = _optimize ? OptimiserSettings::standard() : OptimiserSettings::minimal();
249249
settings.expectedExecutionsPerDeployment = _runs;

libsolidity/interface/CompilerStack.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -146,7 +146,7 @@ class CompilerStack
146146

147147
/// Changes the optimiser settings.
148148
/// Must be set before parsing.
149-
void setOptimiserSettings(bool _optimize, unsigned _runs = 200);
149+
void setOptimiserSettings(bool _optimize, size_t _runs = OptimiserSettings{}.expectedExecutionsPerDeployment);
150150

151151
/// Changes the optimiser settings.
152152
/// Must be set before parsing.

libsolidity/interface/OptimiserSettings.h

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -85,7 +85,6 @@ struct OptimiserSettings
8585
s.runConstantOptimiser = true;
8686
s.runYulOptimiser = true;
8787
s.optimizeStackAllocation = true;
88-
s.expectedExecutionsPerDeployment = 200;
8988
return s;
9089
}
9190
/// Full optimisations. Currently an alias for standard optimisations.

solc/CommandLineInterface.cpp

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1041,7 +1041,9 @@ General Information)").c_str(),
10411041
)
10421042
(
10431043
g_argOptimizeRuns.c_str(),
1044-
po::value<unsigned>()->value_name("n")->default_value(200),
1044+
// TODO: The type in OptimiserSettings is size_t but we only accept values up to 2**32-1
1045+
// on the CLI and in Standard JSON. We should just switch to uint32_t everywhere.
1046+
po::value<unsigned>()->value_name("n")->default_value(static_cast<unsigned>(OptimiserSettings{}.expectedExecutionsPerDeployment)),
10451047
"Set for how many contract runs to optimize. "
10461048
"Lower values will optimize more for initial deployment cost, higher values will optimize more for high-frequency usage."
10471049
)

test/libevmasm/Optimiser.cpp

Lines changed: 13 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1286,7 +1286,8 @@ BOOST_AUTO_TEST_CASE(jumpdest_removal_subassemblies)
12861286
settings.runCSE = true;
12871287
settings.runConstantOptimiser = true;
12881288
settings.evmVersion = solidity::test::CommonOptions::get().evmVersion();
1289-
settings.expectedExecutionsPerDeployment = 200;
1289+
settings.expectedExecutionsPerDeployment = OptimiserSettings{}.expectedExecutionsPerDeployment;
1290+
;
12901291
main.optimise(settings);
12911292

12921293
AssemblyItems expectationMain{
@@ -1679,7 +1680,7 @@ BOOST_AUTO_TEST_CASE(inliner)
16791680
Instruction::SWAP1,
16801681
jumpOutOf,
16811682
};
1682-
Inliner{items, {}, 200, false, {}}.optimise();
1683+
Inliner{items, {}, Assembly::OptimiserSettings{}.expectedExecutionsPerDeployment, false, {}}.optimise();
16831684
BOOST_CHECK_EQUAL_COLLECTIONS(
16841685
items.begin(), items.end(),
16851686
expectation.begin(), expectation.end()
@@ -1701,7 +1702,7 @@ BOOST_AUTO_TEST_CASE(inliner_no_inline_type)
17011702
Instruction::SWAP1,
17021703
Instruction::JUMP,
17031704
};
1704-
Inliner{items, {}, 200, false, {}}.optimise();
1705+
Inliner{items, {}, Assembly::OptimiserSettings{}.expectedExecutionsPerDeployment, false, {}}.optimise();
17051706
BOOST_CHECK_EQUAL_COLLECTIONS(
17061707
items.begin(), items.end(),
17071708
items.begin(), items.end()
@@ -1726,7 +1727,7 @@ BOOST_AUTO_TEST_CASE(inliner_no_inline)
17261727
Instruction::JUMPI,
17271728
Instruction::JUMP,
17281729
};
1729-
Inliner{items, {}, 200, false, {}}.optimise();
1730+
Inliner{items, {}, Assembly::OptimiserSettings{}.expectedExecutionsPerDeployment, false, {}}.optimise();
17301731
BOOST_CHECK_EQUAL_COLLECTIONS(
17311732
items.begin(), items.end(),
17321733
expectation.begin(), expectation.end()
@@ -1757,7 +1758,7 @@ BOOST_AUTO_TEST_CASE(inliner_single_jump)
17571758
AssemblyItem(Tag, 2),
17581759
jumpOutOf,
17591760
};
1760-
Inliner{items, {}, 200, false, {}}.optimise();
1761+
Inliner{items, {}, Assembly::OptimiserSettings{}.expectedExecutionsPerDeployment, false, {}}.optimise();
17611762
BOOST_CHECK_EQUAL_COLLECTIONS(
17621763
items.begin(), items.end(),
17631764
expectation.begin(), expectation.end()
@@ -1777,7 +1778,7 @@ BOOST_AUTO_TEST_CASE(inliner_end_of_bytecode)
17771778
Instruction::STOP,
17781779
AssemblyItem(Tag, 2),
17791780
};
1780-
Inliner{items, {}, 200, false, {}}.optimise();
1781+
Inliner{items, {}, Assembly::OptimiserSettings{}.expectedExecutionsPerDeployment, false, {}}.optimise();
17811782
BOOST_CHECK_EQUAL_COLLECTIONS(
17821783
items.begin(), items.end(),
17831784
items.begin(), items.end()
@@ -1802,7 +1803,7 @@ BOOST_AUTO_TEST_CASE(inliner_cse_break)
18021803
Instruction::STOP, // CSE breaking instruction
18031804
jumpOutOf
18041805
};
1805-
Inliner{items, {}, 200, false, {}}.optimise();
1806+
Inliner{items, {}, Assembly::OptimiserSettings{}.expectedExecutionsPerDeployment, false, {}}.optimise();
18061807
BOOST_CHECK_EQUAL_COLLECTIONS(
18071808
items.begin(), items.end(),
18081809
items.begin(), items.end()
@@ -1822,7 +1823,7 @@ BOOST_AUTO_TEST_CASE(inliner_stop)
18221823
AssemblyItem(Tag, 1),
18231824
Instruction::STOP
18241825
};
1825-
Inliner{items, {}, 200, false, {}}.optimise();
1826+
Inliner{items, {}, Assembly::OptimiserSettings{}.expectedExecutionsPerDeployment, false, {}}.optimise();
18261827
BOOST_CHECK_EQUAL_COLLECTIONS(
18271828
items.begin(), items.end(),
18281829
expectation.begin(), expectation.end()
@@ -1840,7 +1841,7 @@ BOOST_AUTO_TEST_CASE(inliner_stop_jumpi)
18401841
Instruction::STOP
18411842
};
18421843
AssemblyItems expectation = items;
1843-
Inliner{items, {}, 200, false, {}}.optimise();
1844+
Inliner{items, {}, Assembly::OptimiserSettings{}.expectedExecutionsPerDeployment, false, {}}.optimise();
18441845
BOOST_CHECK_EQUAL_COLLECTIONS(
18451846
items.begin(), items.end(),
18461847
expectation.begin(), expectation.end()
@@ -1867,7 +1868,7 @@ BOOST_AUTO_TEST_CASE(inliner_revert)
18671868
Instruction::REVERT
18681869
};
18691870

1870-
Inliner{items, {}, 200, false, {}}.optimise();
1871+
Inliner{items, {}, Assembly::OptimiserSettings{}.expectedExecutionsPerDeployment, false, {}}.optimise();
18711872
BOOST_CHECK_EQUAL_COLLECTIONS(
18721873
items.begin(), items.end(),
18731874
expectation.begin(), expectation.end()
@@ -1887,7 +1888,7 @@ BOOST_AUTO_TEST_CASE(inliner_revert_increased_datagas)
18871888
};
18881889

18891890
AssemblyItems expectation = items;
1890-
Inliner{items, {}, 200, false, {}}.optimise();
1891+
Inliner{items, {}, Assembly::OptimiserSettings{}.expectedExecutionsPerDeployment, false, {}}.optimise();
18911892
BOOST_CHECK_EQUAL_COLLECTIONS(
18921893
items.begin(), items.end(),
18931894
expectation.begin(), expectation.end()
@@ -1908,7 +1909,7 @@ BOOST_AUTO_TEST_CASE(inliner_invalid)
19081909
AssemblyItem(Tag, 1),
19091910
Instruction::INVALID
19101911
};
1911-
Inliner{items, {}, 200, false, {}}.optimise();
1912+
Inliner{items, {}, Assembly::OptimiserSettings{}.expectedExecutionsPerDeployment, false, {}}.optimise();
19121913
BOOST_CHECK_EQUAL_COLLECTIONS(
19131914
items.begin(), items.end(),
19141915
expectation.begin(), expectation.end()

test/libsolidity/GasTest.cpp

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,6 @@ using namespace solidity::frontend;
3434
using namespace solidity::frontend::test;
3535
using namespace solidity;
3636
using namespace std;
37-
namespace fs = boost::filesystem;
3837
using namespace boost::unit_test;
3938

4039
GasTest::GasTest(string const& _filename):
@@ -43,7 +42,7 @@ GasTest::GasTest(string const& _filename):
4342
m_source = m_reader.source();
4443
m_optimise = m_reader.boolSetting("optimize", false);
4544
m_optimiseYul = m_reader.boolSetting("optimize-yul", false);
46-
m_optimiseRuns = m_reader.sizetSetting("optimize-runs", 200);
45+
m_optimiseRuns = m_reader.sizetSetting("optimize-runs", OptimiserSettings{}.expectedExecutionsPerDeployment);
4746
parseExpectations(m_reader.stream());
4847
}
4948

test/libsolidity/GasTest.h

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,8 @@
2222
#include <test/TestCase.h>
2323
#include <liblangutil/Exceptions.h>
2424

25+
#include <libsolidity/interface/OptimiserSettings.h>
26+
2527
#include <iosfwd>
2628
#include <string>
2729
#include <vector>
@@ -47,7 +49,7 @@ class GasTest: AnalysisFramework, public TestCase
4749

4850
bool m_optimise = false;
4951
bool m_optimiseYul = false;
50-
size_t m_optimiseRuns = 200;
52+
size_t m_optimiseRuns = OptimiserSettings{}.expectedExecutionsPerDeployment;
5153
std::map<std::string, std::map<std::string, std::string>> m_expectations;
5254
};
5355

test/tools/fuzzer_common.cpp

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
#include "libsolidity/formal/ModelCheckerSettings.h"
2020
#include <test/tools/fuzzer_common.h>
2121

22+
#include <libsolidity/interface/OptimiserSettings.h>
2223
#include <libsolidity/interface/CompilerStack.h>
2324

2425
#include <libsolutil/JSON.h>
@@ -34,9 +35,10 @@
3435

3536
using namespace std;
3637
using namespace solidity;
37-
using namespace solidity::util;
3838
using namespace solidity::evmasm;
39+
using namespace solidity::frontend;
3940
using namespace solidity::langutil;
41+
using namespace solidity::util;
4042

4143
static vector<EVMVersion> s_evmVersions = {
4244
EVMVersion::homestead(),
@@ -62,7 +64,7 @@ void FuzzerUtil::testCompilerJsonInterface(string const& _input, bool _optimize,
6264
config["settings"] = Json::objectValue;
6365
config["settings"]["optimizer"] = Json::objectValue;
6466
config["settings"]["optimizer"]["enabled"] = _optimize;
65-
config["settings"]["optimizer"]["runs"] = 200;
67+
config["settings"]["optimizer"]["runs"] = static_cast<int>(OptimiserSettings{}.expectedExecutionsPerDeployment);
6668
config["settings"]["evmVersion"] = "berlin";
6769

6870
// Enable all SourceUnit-level outputs.

0 commit comments

Comments
 (0)