mirror of
https://github.com/ethereum/solidity
synced 2023-10-03 13:03:40 +00:00
Store whether an evmasm Assembly is creation code.
This commit is contained in:
@@ -21,7 +21,7 @@ object "RunsTest1" {
|
||||
|
||||
|
||||
Binary representation:
|
||||
602580600c6000396000f3fe7fabc123450000000000000000000000000000000000000000000000000000000060005500
|
||||
600c80600c6000396000f3fe63abc1234560e01b60005500
|
||||
|
||||
Text representation:
|
||||
/* "yul_optimize_runs/input.yul":106:125 */
|
||||
@@ -40,8 +40,7 @@ Text representation:
|
||||
stop
|
||||
|
||||
sub_0: assembly {
|
||||
/* "yul_optimize_runs/input.yul":237:257 */
|
||||
0xabc1234500000000000000000000000000000000000000000000000000000000
|
||||
shl(0xe0, 0xabc12345)
|
||||
/* "yul_optimize_runs/input.yul":277:278 */
|
||||
0x00
|
||||
/* "yul_optimize_runs/input.yul":270:288 */
|
||||
|
||||
@@ -58,11 +58,11 @@ BOOST_AUTO_TEST_CASE(all_assembly_items)
|
||||
{ "root.asm", 0 },
|
||||
{ "sub.asm", 1 }
|
||||
};
|
||||
Assembly _assembly;
|
||||
Assembly _assembly{false, {}};
|
||||
auto root_asm = make_shared<string>("root.asm");
|
||||
_assembly.setSourceLocation({1, 3, root_asm});
|
||||
|
||||
Assembly _subAsm;
|
||||
Assembly _subAsm{false, {}};
|
||||
auto sub_asm = make_shared<string>("sub.asm");
|
||||
_subAsm.setSourceLocation({6, 8, sub_asm});
|
||||
// PushImmutable
|
||||
@@ -197,7 +197,7 @@ BOOST_AUTO_TEST_CASE(immutables_and_its_source_maps)
|
||||
{ *subName, 1 }
|
||||
};
|
||||
|
||||
auto subAsm = make_shared<Assembly>();
|
||||
auto subAsm = make_shared<Assembly>(false, string{});
|
||||
for (char i = 0; i < numImmutables; ++i)
|
||||
{
|
||||
for (int r = 0; r < numActualRefs; ++r)
|
||||
@@ -207,7 +207,7 @@ BOOST_AUTO_TEST_CASE(immutables_and_its_source_maps)
|
||||
}
|
||||
}
|
||||
|
||||
Assembly assembly;
|
||||
Assembly assembly{true, {}};
|
||||
for (char i = 1; i <= numImmutables; ++i)
|
||||
{
|
||||
assembly.setSourceLocation({10*i, 10*i + 3+i, assemblyName});
|
||||
@@ -256,11 +256,11 @@ BOOST_AUTO_TEST_CASE(immutable)
|
||||
{ "root.asm", 0 },
|
||||
{ "sub.asm", 1 }
|
||||
};
|
||||
Assembly _assembly;
|
||||
Assembly _assembly{true, {}};
|
||||
auto root_asm = make_shared<string>("root.asm");
|
||||
_assembly.setSourceLocation({1, 3, root_asm});
|
||||
|
||||
Assembly _subAsm;
|
||||
Assembly _subAsm{false, {}};
|
||||
auto sub_asm = make_shared<string>("sub.asm");
|
||||
_subAsm.setSourceLocation({6, 8, sub_asm});
|
||||
_subAsm.appendImmutable("someImmutable");
|
||||
@@ -349,10 +349,10 @@ BOOST_AUTO_TEST_CASE(immutable)
|
||||
|
||||
BOOST_AUTO_TEST_CASE(subobject_encode_decode)
|
||||
{
|
||||
Assembly assembly;
|
||||
Assembly assembly{true, {}};
|
||||
|
||||
shared_ptr<Assembly> subAsmPtr = make_shared<Assembly>();
|
||||
shared_ptr<Assembly> subSubAsmPtr = make_shared<Assembly>();
|
||||
shared_ptr<Assembly> subAsmPtr = make_shared<Assembly>(false, string{});
|
||||
shared_ptr<Assembly> subSubAsmPtr = make_shared<Assembly>(false, string{});
|
||||
|
||||
assembly.appendSubroutine(subAsmPtr);
|
||||
subAsmPtr->appendSubroutine(subSubAsmPtr);
|
||||
|
||||
@@ -1250,8 +1250,8 @@ BOOST_AUTO_TEST_CASE(jumpdest_removal_subassemblies)
|
||||
// tag unifications (due to block deduplication) is also
|
||||
// visible at the super-assembly.
|
||||
|
||||
Assembly main;
|
||||
AssemblyPointer sub = make_shared<Assembly>();
|
||||
Assembly main{false, {}};
|
||||
AssemblyPointer sub = make_shared<Assembly>(true, string{});
|
||||
|
||||
sub->append(u256(1));
|
||||
auto t1 = sub->newTag();
|
||||
|
||||
@@ -26,6 +26,6 @@ contract Main {
|
||||
// compileViaYul: also
|
||||
// ----
|
||||
// f(uint256): 0x34 -> 0x46bddb1178e94d7f2892ff5f366840eb658911794f2c3a44c450aa2c505186c1
|
||||
// gas irOptimized: 113598
|
||||
// gas irOptimized: 113610
|
||||
// gas legacy: 126596
|
||||
// gas legacyOptimized: 113823
|
||||
|
||||
@@ -26,6 +26,6 @@ contract Creator {
|
||||
// compileViaYul: also
|
||||
// ----
|
||||
// f(uint256,address[]): 7, 0x40, 10, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 -> 7, 8
|
||||
// gas irOptimized: 443960
|
||||
// gas irOptimized: 444029
|
||||
// gas legacy: 590683
|
||||
// gas legacyOptimized: 448326
|
||||
|
||||
@@ -26,6 +26,6 @@ contract Creator {
|
||||
// compileViaYul: also
|
||||
// ----
|
||||
// f(uint256,bytes): 7, 0x40, 78, "abcdefghijklmnopqrstuvwxyzabcdef", "ghijklmnopqrstuvwxyzabcdefghijkl", "mnopqrstuvwxyz" -> 7, "h"
|
||||
// gas irOptimized: 300804
|
||||
// gas irOptimized: 300885
|
||||
// gas legacy: 428917
|
||||
// gas legacyOptimized: 298128
|
||||
|
||||
@@ -17,7 +17,7 @@ contract D {
|
||||
// compileViaYul: also
|
||||
// ----
|
||||
// constructor(): 2 ->
|
||||
// gas irOptimized: 203967
|
||||
// gas irOptimized: 203963
|
||||
// gas legacy: 245842
|
||||
// gas legacyOptimized: 195676
|
||||
// f() -> 2
|
||||
|
||||
@@ -18,7 +18,7 @@ contract D {
|
||||
// compileViaYul: also
|
||||
// ----
|
||||
// constructor(): 2 ->
|
||||
// gas irOptimized: 204130
|
||||
// gas irOptimized: 204126
|
||||
// gas legacy: 246202
|
||||
// gas legacyOptimized: 195914
|
||||
// f() -> 2
|
||||
|
||||
@@ -42,7 +42,7 @@ contract Main {
|
||||
// compileViaYul: also
|
||||
// ----
|
||||
// constructor(), 22 wei ->
|
||||
// gas irOptimized: 284287
|
||||
// gas irOptimized: 284283
|
||||
// gas legacy: 402045
|
||||
// gas legacyOptimized: 266772
|
||||
// getFlag() -> true
|
||||
|
||||
@@ -22,6 +22,6 @@ contract A {
|
||||
// compileViaYul: also
|
||||
// ----
|
||||
// f(), 10 ether -> 3007, 3008, 3009
|
||||
// gas irOptimized: 272413
|
||||
// gas irOptimized: 272449
|
||||
// gas legacy: 422501
|
||||
// gas legacyOptimized: 287472
|
||||
|
||||
@@ -65,7 +65,7 @@ TestCase::TestResult EVMCodeTransformTest::run(ostream& _stream, string const& _
|
||||
return TestResult::FatalError;
|
||||
}
|
||||
|
||||
evmasm::Assembly assembly;
|
||||
evmasm::Assembly assembly{false, {}};
|
||||
EthAssemblyAdapter adapter(assembly);
|
||||
EVMObjectCompiler::compile(
|
||||
*stack.parserResult(),
|
||||
|
||||
@@ -185,25 +185,27 @@ void FuzzerUtil::testConstantOptimizer(string const& _input, bool _quiet)
|
||||
if (!_quiet)
|
||||
cout << "Got " << numbers.size() << " inputs:" << endl;
|
||||
|
||||
Assembly assembly;
|
||||
for (u256 const& n: numbers)
|
||||
{
|
||||
if (!_quiet)
|
||||
cout << n << endl;
|
||||
assembly.append(n);
|
||||
}
|
||||
for (bool isCreation: {false, true})
|
||||
{
|
||||
Assembly assembly{isCreation, {}};
|
||||
for (u256 const& n: numbers)
|
||||
{
|
||||
if (!_quiet)
|
||||
cout << n << endl;
|
||||
assembly.append(n);
|
||||
}
|
||||
for (unsigned runs: {1u, 2u, 3u, 20u, 40u, 100u, 200u, 400u, 1000u})
|
||||
{
|
||||
// Make a copy here so that each time we start with the original state.
|
||||
Assembly tmp = assembly;
|
||||
ConstantOptimisationMethod::optimiseConstants(
|
||||
isCreation,
|
||||
runs,
|
||||
langutil::EVMVersion{},
|
||||
tmp
|
||||
isCreation,
|
||||
runs,
|
||||
langutil::EVMVersion{},
|
||||
tmp
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void FuzzerUtil::testStandardCompiler(string const& _input, bool _quiet)
|
||||
|
||||
Reference in New Issue
Block a user