mirror of
https://github.com/ethereum/solidity
synced 2023-10-03 13:03:40 +00:00
Provide commandline option to activate yul optimizer.
This commit is contained in:
parent
83d1382e78
commit
5ddbc434d6
@ -132,6 +132,7 @@ static string const g_strNatspecUser = "userdoc";
|
|||||||
static string const g_strOpcodes = "opcodes";
|
static string const g_strOpcodes = "opcodes";
|
||||||
static string const g_strOptimize = "optimize";
|
static string const g_strOptimize = "optimize";
|
||||||
static string const g_strOptimizeRuns = "optimize-runs";
|
static string const g_strOptimizeRuns = "optimize-runs";
|
||||||
|
static string const g_strOptimizeYul = "optimize-yul";
|
||||||
static string const g_strOutputDir = "output-dir";
|
static string const g_strOutputDir = "output-dir";
|
||||||
static string const g_strOverwrite = "overwrite";
|
static string const g_strOverwrite = "overwrite";
|
||||||
static string const g_strSignatureHashes = "hashes";
|
static string const g_strSignatureHashes = "hashes";
|
||||||
@ -615,6 +616,7 @@ Allowed options)",
|
|||||||
"Set for how many contract runs to optimize."
|
"Set for how many contract runs to optimize."
|
||||||
"Lower values will optimize more for initial deployment cost, higher values will optimize more for high-frequency usage."
|
"Lower values will optimize more for initial deployment cost, higher values will optimize more for high-frequency usage."
|
||||||
)
|
)
|
||||||
|
(g_strOptimizeYul.c_str(), "Enable Yul optimizer in Solidity, mostly for ABIEncoderV2.")
|
||||||
(g_argPrettyJson.c_str(), "Output JSON in pretty format. Currently it only works with the combined JSON output.")
|
(g_argPrettyJson.c_str(), "Output JSON in pretty format. Currently it only works with the combined JSON output.")
|
||||||
(
|
(
|
||||||
g_argLibraries.c_str(),
|
g_argLibraries.c_str(),
|
||||||
@ -847,7 +849,7 @@ bool CommandLineInterface::processInput()
|
|||||||
using Machine = yul::AssemblyStack::Machine;
|
using Machine = yul::AssemblyStack::Machine;
|
||||||
Input inputLanguage = m_args.count(g_argYul) ? Input::Yul : (m_args.count(g_argStrictAssembly) ? Input::StrictAssembly : Input::Assembly);
|
Input inputLanguage = m_args.count(g_argYul) ? Input::Yul : (m_args.count(g_argStrictAssembly) ? Input::StrictAssembly : Input::Assembly);
|
||||||
Machine targetMachine = Machine::EVM;
|
Machine targetMachine = Machine::EVM;
|
||||||
bool optimize = m_args.count(g_argOptimize);
|
bool optimize = m_args.count(g_argOptimize) || m_args.count(g_strOptimizeYul);
|
||||||
if (m_args.count(g_argMachine))
|
if (m_args.count(g_argMachine))
|
||||||
{
|
{
|
||||||
string machine = m_args[g_argMachine].as<string>();
|
string machine = m_args[g_argMachine].as<string>();
|
||||||
@ -901,9 +903,11 @@ bool CommandLineInterface::processInput()
|
|||||||
m_compiler->setLibraries(m_libraries);
|
m_compiler->setLibraries(m_libraries);
|
||||||
m_compiler->setEVMVersion(m_evmVersion);
|
m_compiler->setEVMVersion(m_evmVersion);
|
||||||
// TODO: Perhaps we should not compile unless requested
|
// TODO: Perhaps we should not compile unless requested
|
||||||
bool optimize = m_args.count(g_argOptimize) > 0;
|
|
||||||
unsigned runs = m_args[g_argOptimizeRuns].as<unsigned>();
|
OptimiserSettings settings = m_args.count(g_argOptimize) ? OptimiserSettings::enabled() : OptimiserSettings::minimal();
|
||||||
m_compiler->setOptimiserSettings(optimize, runs);
|
settings.expectedExecutionsPerDeployment = m_args[g_argOptimizeRuns].as<unsigned>();
|
||||||
|
settings.runYulOptimiser = m_args.count(g_strOptimizeYul);
|
||||||
|
m_compiler->setOptimiserSettings(settings);
|
||||||
|
|
||||||
bool successful = m_compiler->compile();
|
bool successful = m_compiler->compile();
|
||||||
|
|
||||||
|
1
test/cmdlineTests/gas_test_abiv2/args
Normal file
1
test/cmdlineTests/gas_test_abiv2/args
Normal file
@ -0,0 +1 @@
|
|||||||
|
--gas
|
3
test/cmdlineTests/gas_test_abiv2/err
Normal file
3
test/cmdlineTests/gas_test_abiv2/err
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
gas_test_abiv2/input.sol:2:1: Warning: Experimental features are turned on. Do not use experimental features on live deployments.
|
||||||
|
pragma experimental ABIEncoderV2;
|
||||||
|
^-------------------------------^
|
15
test/cmdlineTests/gas_test_abiv2/input.sol
Normal file
15
test/cmdlineTests/gas_test_abiv2/input.sol
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
pragma solidity >=0.0;
|
||||||
|
pragma experimental ABIEncoderV2;
|
||||||
|
|
||||||
|
contract C {
|
||||||
|
uint public a;
|
||||||
|
uint[] public b;
|
||||||
|
function f1(uint) public pure returns (uint) { }
|
||||||
|
function f2(uint[] memory, string[] memory, uint16, address) public returns (uint[] memory, uint16[] memory) {}
|
||||||
|
function f3(uint16[] memory, string[] memory, uint16, address) public returns (uint[] memory, uint16[] memory) {}
|
||||||
|
function f4(uint32[] memory, string[12] memory, bytes[2][] memory, address) public returns (uint[] memory, uint16[] memory) {}
|
||||||
|
function f5(address[] memory, string[] memory, bytes memory, address) public returns (uint[] memory, uint16[] memory) {}
|
||||||
|
function f6(uint[30] memory, string[] memory, uint16, address) public returns (uint16[200] memory, uint16[] memory) {}
|
||||||
|
function f7(uint[31] memory, string[20] memory, C, address) public returns (bytes[] memory, uint16[] memory) {}
|
||||||
|
function f8(uint[32] memory, string[] memory, uint32, address) public returns (uint[] memory, uint16[] memory) {}
|
||||||
|
}
|
16
test/cmdlineTests/gas_test_abiv2/output
Normal file
16
test/cmdlineTests/gas_test_abiv2/output
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
|
||||||
|
======= gas_test_abiv2/input.sol:C =======
|
||||||
|
Gas estimation:
|
||||||
|
construction:
|
||||||
|
1154 + 1109000 = 1110154
|
||||||
|
external:
|
||||||
|
a(): 535
|
||||||
|
b(uint256): 1129
|
||||||
|
f1(uint256): 591
|
||||||
|
f2(uint256[],string[],uint16,address): infinite
|
||||||
|
f3(uint16[],string[],uint16,address): infinite
|
||||||
|
f4(uint32[],string[12],bytes[2][],address): infinite
|
||||||
|
f5(address[],string[],bytes,address): infinite
|
||||||
|
f6(uint256[30],string[],uint16,address): infinite
|
||||||
|
f7(uint256[31],string[20],address,address): infinite
|
||||||
|
f8(uint256[32],string[],uint32,address): infinite
|
1
test/cmdlineTests/gas_test_abiv2_optimize_yul/args
Normal file
1
test/cmdlineTests/gas_test_abiv2_optimize_yul/args
Normal file
@ -0,0 +1 @@
|
|||||||
|
--gas --optimize --optimize-yul
|
3
test/cmdlineTests/gas_test_abiv2_optimize_yul/err
Normal file
3
test/cmdlineTests/gas_test_abiv2_optimize_yul/err
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
gas_test_abiv2_optimize_yul/input.sol:2:1: Warning: Experimental features are turned on. Do not use experimental features on live deployments.
|
||||||
|
pragma experimental ABIEncoderV2;
|
||||||
|
^-------------------------------^
|
15
test/cmdlineTests/gas_test_abiv2_optimize_yul/input.sol
Normal file
15
test/cmdlineTests/gas_test_abiv2_optimize_yul/input.sol
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
pragma solidity >=0.0;
|
||||||
|
pragma experimental ABIEncoderV2;
|
||||||
|
|
||||||
|
contract C {
|
||||||
|
uint public a;
|
||||||
|
uint[] public b;
|
||||||
|
function f1(uint) public pure returns (uint) { }
|
||||||
|
function f2(uint[] memory, string[] memory, uint16, address) public returns (uint[] memory, uint16[] memory) {}
|
||||||
|
function f3(uint16[] memory, string[] memory, uint16, address) public returns (uint[] memory, uint16[] memory) {}
|
||||||
|
function f4(uint32[] memory, string[12] memory, bytes[2][] memory, address) public returns (uint[] memory, uint16[] memory) {}
|
||||||
|
function f5(address[] memory, string[] memory, bytes memory, address) public returns (uint[] memory, uint16[] memory) {}
|
||||||
|
function f6(uint[30] memory, string[] memory, uint16, address) public returns (uint16[200] memory, uint16[] memory) {}
|
||||||
|
function f7(uint[31] memory, string[20] memory, C, address) public returns (bytes[] memory, uint16[] memory) {}
|
||||||
|
function f8(uint[32] memory, string[] memory, uint32, address) public returns (uint[] memory, uint16[] memory) {}
|
||||||
|
}
|
16
test/cmdlineTests/gas_test_abiv2_optimize_yul/output
Normal file
16
test/cmdlineTests/gas_test_abiv2_optimize_yul/output
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
|
||||||
|
======= gas_test_abiv2_optimize_yul/input.sol:C =======
|
||||||
|
Gas estimation:
|
||||||
|
construction:
|
||||||
|
676 + 641600 = 642276
|
||||||
|
external:
|
||||||
|
a(): 434
|
||||||
|
b(uint256): 892
|
||||||
|
f1(uint256): 356
|
||||||
|
f2(uint256[],string[],uint16,address): infinite
|
||||||
|
f3(uint16[],string[],uint16,address): infinite
|
||||||
|
f4(uint32[],string[12],bytes[2][],address): infinite
|
||||||
|
f5(address[],string[],bytes,address): infinite
|
||||||
|
f6(uint256[30],string[],uint16,address): infinite
|
||||||
|
f7(uint256[31],string[20],address,address): infinite
|
||||||
|
f8(uint256[32],string[],uint32,address): infinite
|
Loading…
Reference in New Issue
Block a user