Merge pull request #11328 from ethereum/respectMemoryModelForInit

Respect memory model for init
This commit is contained in:
chriseth 2021-04-29 17:03:59 +02:00 committed by GitHub
commit f1d58c549b
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
38 changed files with 178 additions and 112 deletions

View File

@ -802,29 +802,24 @@ void IRGenerator::generateImplicitConstructors(ContractDefinition const& _contra
string IRGenerator::deployCode(ContractDefinition const& _contract)
{
Whiskers t(R"X(
<#loadImmutables>
let <var> := mload(<memoryOffset>)
</loadImmutables>
codecopy(0, dataoffset("<object>"), datasize("<object>"))
<#storeImmutables>
setimmutable(0, "<immutableName>", <var>)
</storeImmutables>
return(0, datasize("<object>"))
let <codeOffset> := <allocateUnbounded>()
codecopy(<codeOffset>, dataoffset("<object>"), datasize("<object>"))
<#immutables>
setimmutable(<codeOffset>, "<immutableName>", <value>)
</immutables>
return(<codeOffset>, datasize("<object>"))
)X");
t("allocateUnbounded", m_utils.allocateUnboundedFunction());
t("codeOffset", m_context.newYulVariable());
t("object", IRNames::deployedObject(_contract));
vector<map<string, string>> loadImmutables;
vector<map<string, string>> storeImmutables;
vector<map<string, string>> immutables;
if (_contract.isLibrary())
{
solAssert(ContractType(_contract).immutableVariables().empty(), "");
storeImmutables.emplace_back(map<string, string>{
{"var"s, "address()"},
{"immutableName"s, IRNames::libraryAddressImmutable()}
immutables.emplace_back(map<string, string>{
{"immutableName"s, IRNames::libraryAddressImmutable()},
{"value"s, "address()"}
});
}
@ -833,20 +828,12 @@ string IRGenerator::deployCode(ContractDefinition const& _contract)
{
solUnimplementedAssert(immutable->type()->isValueType(), "");
solUnimplementedAssert(immutable->type()->sizeOnStack() == 1, "");
string yulVar = m_context.newYulVariable();
loadImmutables.emplace_back(map<string, string>{
{"var"s, yulVar},
{"memoryOffset"s, to_string(m_context.immutableMemoryOffset(*immutable))}
});
storeImmutables.emplace_back(map<string, string>{
{"var"s, yulVar},
{"immutableName"s, to_string(immutable->id())}
immutables.emplace_back(map<string, string>{
{"immutableName"s, to_string(immutable->id())},
{"value"s, "mload(" + to_string(m_context.immutableMemoryOffset(*immutable)) + ")"}
});
}
t("loadImmutables", std::move(loadImmutables));
// reverse order to ease stack strain
reverse(storeImmutables.begin(), storeImmutables.end());
t("storeImmutables", std::move(storeImmutables));
t("immutables", std::move(immutables));
return t.render();
}

View File

@ -13,8 +13,8 @@ object "C_12" {
if callvalue() { revert(0, 0) }
sstore(0, shl(180, 1))
let _1 := datasize("C_12_deployed")
codecopy(0, dataoffset("C_12_deployed"), _1)
return(0, _1)
codecopy(128, dataoffset("C_12_deployed"), _1)
return(128, _1)
}
}
object "C_12_deployed" {

View File

@ -14,9 +14,14 @@ object "C_81" {
constructor_C_81()
codecopy(0, dataoffset("C_81_deployed"), datasize("C_81_deployed"))
let _1 := allocate_unbounded()
codecopy(_1, dataoffset("C_81_deployed"), datasize("C_81_deployed"))
return(0, datasize("C_81_deployed"))
return(_1, datasize("C_81_deployed"))
function allocate_unbounded() -> memPtr {
memPtr := mload(64)
}
function constructor_C_81() {

View File

@ -12,8 +12,8 @@ object "C_7" {
mstore(64, 128)
if callvalue() { revert(0, 0) }
let _1 := datasize("C_7_deployed")
codecopy(0, dataoffset("C_7_deployed"), _1)
return(0, _1)
codecopy(128, dataoffset("C_7_deployed"), _1)
return(128, _1)
}
}
object "C_7_deployed" {
@ -40,8 +40,8 @@ object "D_10" {
mstore(64, 128)
if callvalue() { revert(0, 0) }
let _1 := datasize("D_10_deployed")
codecopy(0, dataoffset("D_10_deployed"), _1)
return(0, _1)
codecopy(128, dataoffset("D_10_deployed"), _1)
return(128, _1)
}
}
object "D_10_deployed" {

View File

@ -12,8 +12,8 @@ object "C_3" {
mstore(64, 128)
if callvalue() { revert(0, 0) }
let _1 := datasize("C_3_deployed")
codecopy(0, dataoffset("C_3_deployed"), _1)
return(0, _1)
codecopy(128, dataoffset("C_3_deployed"), _1)
return(128, _1)
}
}
object "C_3_deployed" {
@ -40,8 +40,8 @@ object "D_16" {
mstore(64, 128)
if callvalue() { revert(0, 0) }
let _1 := datasize("D_16_deployed")
codecopy(0, dataoffset("D_16_deployed"), _1)
return(0, _1)
codecopy(128, dataoffset("D_16_deployed"), _1)
return(128, _1)
}
}
object "D_16_deployed" {
@ -82,8 +82,8 @@ object "D_16" {
mstore(64, 128)
if callvalue() { revert(0, 0) }
let _1 := datasize("C_3_deployed")
codecopy(0, dataoffset("C_3_deployed"), _1)
return(0, _1)
codecopy(128, dataoffset("C_3_deployed"), _1)
return(128, _1)
}
}
object "C_3_deployed" {

View File

@ -12,8 +12,8 @@ object "D_12" {
mstore(64, 128)
if callvalue() { revert(0, 0) }
let _1 := datasize("D_12_deployed")
codecopy(0, dataoffset("D_12_deployed"), _1)
return(0, _1)
codecopy(128, dataoffset("D_12_deployed"), _1)
return(128, _1)
}
}
object "D_12_deployed" {

View File

@ -12,8 +12,8 @@ object "D_8" {
mstore(64, 128)
if callvalue() { revert(0, 0) }
let _1 := datasize("D_8_deployed")
codecopy(0, dataoffset("D_8_deployed"), _1)
return(0, _1)
codecopy(128, dataoffset("D_8_deployed"), _1)
return(128, _1)
}
}
object "D_8_deployed" {

View File

@ -14,8 +14,8 @@ object "C_12" {
mstore(0, 100)
sstore(0, keccak256(0, 32))
let _1 := datasize("C_12_deployed")
codecopy(0, dataoffset("C_12_deployed"), _1)
return(0, _1)
codecopy(128, dataoffset("C_12_deployed"), _1)
return(128, _1)
}
}
object "C_12_deployed" {

View File

@ -12,8 +12,8 @@ object "C_7" {
mstore(64, 128)
if callvalue() { revert(0, 0) }
let _1 := datasize("C_7_deployed")
codecopy(0, dataoffset("C_7_deployed"), _1)
return(0, _1)
codecopy(128, dataoffset("C_7_deployed"), _1)
return(128, _1)
}
}
object "C_7_deployed" {

View File

@ -12,8 +12,8 @@ object "C_59" {
mstore(64, 128)
if callvalue() { revert(0, 0) }
let _1 := datasize("C_59_deployed")
codecopy(0, dataoffset("C_59_deployed"), _1)
return(0, _1)
codecopy(128, dataoffset("C_59_deployed"), _1)
return(128, _1)
}
}
object "C_59_deployed" {

View File

@ -12,8 +12,8 @@ object "Arraysum_34" {
mstore(64, 128)
if callvalue() { revert(0, 0) }
let _1 := datasize("Arraysum_34_deployed")
codecopy(0, dataoffset("Arraysum_34_deployed"), _1)
return(0, _1)
codecopy(128, dataoffset("Arraysum_34_deployed"), _1)
return(128, _1)
}
}
object "Arraysum_34_deployed" {

View File

@ -1,4 +1,4 @@
{"contracts":{"A":{"C":{"ewasm":{"wasm":"0061736d010000000125086000006000017e6000017f60017e017f60017f0060017f017f60027f7f0060037f7f7f0002510408657468657265756d08636f6465436f7079000708657468657265756d06726576657274000608657468657265756d0c67657443616c6c56616c7565000408657468657265756d0666696e697368000603090800020302020505010503010001060100071102066d656d6f72790200046d61696e000400b6030c435f335f6465706c6f7965640061736d010000000112046000006000017f60017f017f60027f7f0002130108657468657265756d06726576657274000303060500010102020503010001060100071102066d656d6f72790200046d61696e00010ad20205a10104027f017e017f047e024010022100200041c0006a210120012000490440000b420021022002a7210320031005ad42208621042002422088210520042005a71005ad84210620012006370000200141086a2006370000200141106a2006370000428001a71005ad4220862107200141186a2007428001422088a71005ad8437000020022002200284200284520440000b20022005520440000b1003200310000b0b2b01017f024042004200420084420084520440000b420042c000422088520440000b42c000a721000b20000b4203017f017e017f02404200210120012001200184200184520440000b20012001422088520440000b2001a72102200241c0006a210020002002490440000b0b20000b1f01017f024020004108744180fe0371200041087641ff01717221010b20010b1e01027f02402000100441107421022002200041107610047221010b20010b0aa603089a0102027f047e024010072100200041c0006a210120012000490440000b4200a7100aad422086210220024200422088a7100aad84210320012003370000200141086a2003370000200141106a2003370000200141186a100b37000041001002410829000021044200420084200441002900008484504504401008100510010b42a9032105100842b801100620051006100010082005100610030b0b2f02017f017e02404200210120012001200184200184520440000b20012001422088520440000b2001a721000b20000b2901017f024042004200420084420084520440000b42002000422088520440000b2000a721010b20010b2b01017f024042004200420084420084520440000b420042c000422088520440000b42c000a721000b20000b1e01027f024010052101200141c0006a210020002001490440000b0b20000b1f01017f024020004108744180fe0371200041087641ff01717221010b20010b1e01027f02402000100941107421022002200041107610097221010b20010b2401027e0240428001a7100aad42208621012001428001422088a7100aad8421000b20000b","wast":"(module
{"contracts":{"A":{"C":{"ewasm":{"wasm":"0061736d010000000125086000006000017e6000017f60017e017f60017f0060017f017f60027f7f0060037f7f7f0002510408657468657265756d08636f6465436f7079000708657468657265756d06726576657274000608657468657265756d0c67657443616c6c56616c7565000408657468657265756d0666696e6973680006030a090002030202020505010503010001060100071102066d656d6f72790200046d61696e000400b6030c435f335f6465706c6f7965640061736d010000000112046000006000017f60017f017f60027f7f0002130108657468657265756d06726576657274000303060500010102020503010001060100071102066d656d6f72790200046d61696e00010ad20205a10104027f017e017f047e024010022100200041c0006a210120012000490440000b420021022002a7210320031005ad42208621042002422088210520042005a71005ad84210620012006370000200141086a2006370000200141106a2006370000428001a71005ad4220862107200141186a2007428001422088a71005ad8437000020022002200284200284520440000b20022005520440000b1003200310000b0b2b01017f024042004200420084420084520440000b420042c000422088520440000b42c000a721000b20000b4203017f017e017f02404200210120012001200184200184520440000b20012001422088520440000b2001a72102200241c0006a210020002002490440000b0b20000b1f01017f024020004108744180fe0371200041087641ff01717221010b20010b1e01027f02402000100441107421022002200041107610047221010b20010b0ae303099a0102027f047e024010072100200041c0006a210120012000490440000b4200a7100bad422086210220024200422088a7100bad84210320012003370000200141086a2003370000200141106a2003370000200141186a100c37000041001002410829000021044200420084200441002900008484504504401008100510010b42a9032105100942b901100620051006100010092005100610030b0b2f02017f017e02404200210120012001200184200184520440000b20012001422088520440000b2001a721000b20000b2901017f024042004200420084420084520440000b42002000422088520440000b2000a721010b20010b2b01017f024042004200420084420084520440000b420042c000422088520440000b42c000a721000b20000b1e01027f024010052101200141c0006a210020002001490440000b0b20000b3c01027f024042004200420084420084520440000b4200428001422088520440000b428001a72101200141c0006a210020002001490440000b0b20000b1f01017f024020004108744180fe0371200041087641ff01717221010b20010b1e01027f02402000100a411074210220022000411076100a7221010b20010b2401027e0240428001a7100bad42208621012001428001422088a7100bad8421000b20000b","wast":"(module
;; custom section for sub-module
;; The Keccak-256 hash of the text representation of \"C_3_deployed\": d5523336521d49fa8bd64dba28ece7291aa7d45c646a23eabd038bbeecc2d803
;; (@custom \"C_3_deployed\" \"0061736d010000000112046000006000017f60017f017f60027f7f0002130108657468657265756d06726576657274000303060500010102020503010001060100071102066d656d6f72790200046d61696e00010ad20205a10104027f017e017f047e024010022100200041c0006a210120012000490440000b420021022002a7210320031005ad42208621042002422088210520042005a71005ad84210620012006370000200141086a2006370000200141106a2006370000428001a71005ad4220862107200141186a2007428001422088a71005ad8437000020022002200284200284520440000b20022005520440000b1003200310000b0b2b01017f024042004200420084420084520440000b420042c000422088520440000b42c000a721000b20000b4203017f017e017f02404200210120012001200184200184520440000b20012001422088520440000b2001a72102200241c0006a210020002002490440000b0b20000b1f01017f024020004108744180fe0371200041087641ff01717221010b20010b1e01027f02402000100441107421022002200041107610047221010b20010b\")
@ -32,8 +32,8 @@
(if (i32.eqz (i64.eqz (i64.or (i64.or (i64.const 0) (i64.const 0)) (i64.or (local.get $z3) (i64.load (i32.const 0)))))) (then
(call $eth.revert (call $to_internal_i32ptr) (call $u256_to_i32_344))))
(local.set $_1 (datasize \"C_3_deployed\"))
(call $eth.codeCopy (call $to_internal_i32ptr) (call $u256_to_i32 (dataoffset \"C_3_deployed\")) (call $u256_to_i32 (local.get $_1)))
(call $eth.finish (call $to_internal_i32ptr) (call $u256_to_i32 (local.get $_1)))
(call $eth.codeCopy (call $to_internal_i32ptr_348) (call $u256_to_i32 (dataoffset \"C_3_deployed\")) (call $u256_to_i32 (local.get $_1)))
(call $eth.finish (call $to_internal_i32ptr_348) (call $u256_to_i32 (local.get $_1)))
)
)
@ -96,11 +96,29 @@
(local.get $r)
)
(func $to_internal_i32ptr_348
(result i32)
(local $r i32)
(local $v i32)
(block $label__5
(if (i64.ne (i64.const 0) (i64.or (i64.or (i64.const 0) (i64.const 0)) (i64.const 0))) (then
(unreachable)))
(if (i64.ne (i64.const 0) (i64.shr_u (i64.const 128) (i64.const 32))) (then
(unreachable)))
(local.set $v (i32.wrap_i64 (i64.const 128)))
(local.set $r (i32.add (local.get $v) (i32.const 64)))
(if (i32.lt_u (local.get $r) (local.get $v)) (then
(unreachable)))
)
(local.get $r)
)
(func $bswap16
(param $x i32)
(result i32)
(local $y i32)
(block $label__5
(block $label__6
(local.set $y (i32.or (i32.and (i32.shl (local.get $x) (i32.const 8)) (i32.const 65280)) (i32.and (i32.shr_u (local.get $x) (i32.const 8)) (i32.const 255))))
)
@ -112,7 +130,7 @@
(result i32)
(local $y i32)
(local $hi i32)
(block $label__6
(block $label__7
(local.set $hi (i32.shl (call $bswap16 (local.get $x)) (i32.const 16)))
(local.set $y (i32.or (local.get $hi) (call $bswap16 (i32.shr_u (local.get $x) (i32.const 16)))))
@ -124,7 +142,7 @@
(result i64)
(local $y i64)
(local $hi i64)
(block $label__7
(block $label__8
(local.set $hi (i64.shl (i64.extend_i32_u (call $bswap32 (i32.wrap_i64 (i64.const 128)))) (i64.const 32)))
(local.set $y (i64.or (local.get $hi) (i64.extend_i32_u (call $bswap32 (i32.wrap_i64 (i64.shr_u (i64.const 128) (i64.const 32)))))))

View File

@ -10,8 +10,11 @@ object \"C_7\" {
mstore(64, 128)
if callvalue() { revert(0, 0) }
constructor_C_7()
codecopy(0, dataoffset(\"C_7_deployed\"), datasize(\"C_7_deployed\"))
return(0, datasize(\"C_7_deployed\"))
let _1 := allocate_unbounded()
codecopy(_1, dataoffset(\"C_7_deployed\"), datasize(\"C_7_deployed\"))
return(_1, datasize(\"C_7_deployed\"))
function allocate_unbounded() -> memPtr
{ memPtr := mload(64) }
function constructor_C_7()
{ }
}

View File

@ -13,9 +13,14 @@ object \"C_7\" {
constructor_C_7()
codecopy(0, dataoffset(\"C_7_deployed\"), datasize(\"C_7_deployed\"))
let _1 := allocate_unbounded()
codecopy(_1, dataoffset(\"C_7_deployed\"), datasize(\"C_7_deployed\"))
return(0, datasize(\"C_7_deployed\"))
return(_1, datasize(\"C_7_deployed\"))
function allocate_unbounded() -> memPtr {
memPtr := mload(64)
}
function constructor_C_7() {

View File

@ -13,9 +13,14 @@ object \"C_3\" {
constructor_C_3()
codecopy(0, dataoffset(\"C_3_deployed\"), datasize(\"C_3_deployed\"))
let _1 := allocate_unbounded()
codecopy(_1, dataoffset(\"C_3_deployed\"), datasize(\"C_3_deployed\"))
return(0, datasize(\"C_3_deployed\"))
return(_1, datasize(\"C_3_deployed\"))
function allocate_unbounded() -> memPtr {
memPtr := mload(64)
}
function constructor_C_3() {
@ -64,9 +69,14 @@ object \"D_16\" {
constructor_D_16()
codecopy(0, dataoffset(\"D_16_deployed\"), datasize(\"D_16_deployed\"))
let _1 := allocate_unbounded()
codecopy(_1, dataoffset(\"D_16_deployed\"), datasize(\"D_16_deployed\"))
return(0, datasize(\"D_16_deployed\"))
return(_1, datasize(\"D_16_deployed\"))
function allocate_unbounded() -> memPtr {
memPtr := mload(64)
}
function constructor_D_16() {
@ -163,9 +173,14 @@ object \"D_16\" {
constructor_C_3()
codecopy(0, dataoffset(\"C_3_deployed\"), datasize(\"C_3_deployed\"))
let _1 := allocate_unbounded()
codecopy(_1, dataoffset(\"C_3_deployed\"), datasize(\"C_3_deployed\"))
return(0, datasize(\"C_3_deployed\"))
return(_1, datasize(\"C_3_deployed\"))
function allocate_unbounded() -> memPtr {
memPtr := mload(64)
}
function constructor_C_3() {

View File

@ -14,9 +14,14 @@ object "test_11" {
constructor_test_11()
codecopy(0, dataoffset("test_11_deployed"), datasize("test_11_deployed"))
let _1 := allocate_unbounded()
codecopy(_1, dataoffset("test_11_deployed"), datasize("test_11_deployed"))
return(0, datasize("test_11_deployed"))
return(_1, datasize("test_11_deployed"))
function allocate_unbounded() -> memPtr {
memPtr := mload(64)
}
function constructor_test_11() {

View File

@ -1,7 +1,7 @@
======= viair_subobjects/input.sol:C =======
Binary:
60806040523415600f5760006000fd5b600a80601e600039806000f350fe608060405260006000fd
60806040523415600f5760006000fd5b600a80601e608039806080f350fe608060405260006000fd
Binary of the runtime part:
608060405260006000fd
Optimized IR:
@ -18,8 +18,8 @@ object "C_3" {
mstore(64, 128)
if callvalue() { revert(0, 0) }
let _1 := datasize("C_3_deployed")
codecopy(0, dataoffset("C_3_deployed"), _1)
return(0, _1)
codecopy(128, dataoffset("C_3_deployed"), _1)
return(128, _1)
}
}
object "C_3_deployed" {
@ -35,9 +35,9 @@ object "C_3" {
======= viair_subobjects/input.sol:D =======
Binary:
608060405234156100105760006000fd5b60ba80610020600039806000f350fe6080604052600436101515608b576000803560e01c6326121ff0141560895734156027578081fd5b80600319360112156036578081fd5b6028806080016080811067ffffffffffffffff82111715606457634e487b7160e01b83526041600452602483fd5b508061009260803980608083f015156082576040513d83823e3d81fd505b5080604051f35b505b60006000fdfe60806040523415600f5760006000fd5b600a80601e600039806000f350fe608060405260006000fd
608060405234156100105760006000fd5b60ba80610020608039806080f350fe6080604052600436101515608b576000803560e01c6326121ff0141560895734156027578081fd5b80600319360112156036578081fd5b6028806080016080811067ffffffffffffffff82111715606457634e487b7160e01b83526041600452602483fd5b508061009260803980608083f015156082576040513d83823e3d81fd505b5080604051f35b505b60006000fdfe60806040523415600f5760006000fd5b600a80601e608039806080f350fe608060405260006000fd
Binary of the runtime part:
6080604052600436101515608b576000803560e01c6326121ff0141560895734156027578081fd5b80600319360112156036578081fd5b6028806080016080811067ffffffffffffffff82111715606457634e487b7160e01b83526041600452602483fd5b508061009260803980608083f015156082576040513d83823e3d81fd505b5080604051f35b505b60006000fdfe60806040523415600f5760006000fd5b600a80601e600039806000f350fe608060405260006000fd
6080604052600436101515608b576000803560e01c6326121ff0141560895734156027578081fd5b80600319360112156036578081fd5b6028806080016080811067ffffffffffffffff82111715606457634e487b7160e01b83526041600452602483fd5b508061009260803980608083f015156082576040513d83823e3d81fd505b5080604051f35b505b60006000fdfe60806040523415600f5760006000fd5b600a80601e608039806080f350fe608060405260006000fd
Optimized IR:
/*******************************************************
* WARNING *
@ -52,8 +52,8 @@ object "D_16" {
mstore(64, 128)
if callvalue() { revert(0, 0) }
let _1 := datasize("D_16_deployed")
codecopy(0, dataoffset("D_16_deployed"), _1)
return(0, _1)
codecopy(128, dataoffset("D_16_deployed"), _1)
return(128, _1)
}
}
object "D_16_deployed" {
@ -94,8 +94,8 @@ object "D_16" {
mstore(64, 128)
if callvalue() { revert(0, 0) }
let _1 := datasize("C_3_deployed")
codecopy(0, dataoffset("C_3_deployed"), _1)
return(0, _1)
codecopy(128, dataoffset("C_3_deployed"), _1)
return(128, _1)
}
}
object "C_3_deployed" {

View File

@ -11,9 +11,12 @@ object "C_7" {
{
mstore(64, 128)
if callvalue() { revert(0, 0) }
codecopy(0, dataoffset("C_7_deployed"), datasize("C_7_deployed"))
return(0, datasize("C_7_deployed"))
let _1 := allocate_unbounded()
codecopy(_1, dataoffset("C_7_deployed"), datasize("C_7_deployed"))
return(_1, datasize("C_7_deployed"))
}
function allocate_unbounded() -> memPtr
{ memPtr := mload(64) }
}
object "C_7_deployed" {
code {

View File

@ -13,9 +13,14 @@ object \"C_11\" {
constructor_C_11()
codecopy(0, dataoffset(\"C_11_deployed\"), datasize(\"C_11_deployed\"))
let _1 := allocate_unbounded()
codecopy(_1, dataoffset(\"C_11_deployed\"), datasize(\"C_11_deployed\"))
return(0, datasize(\"C_11_deployed\"))
return(_1, datasize(\"C_11_deployed\"))
function allocate_unbounded() -> memPtr {
memPtr := mload(64)
}
function constructor_C_11() {

View File

@ -13,9 +13,14 @@ object \"C_11\" {
constructor_C_11()
codecopy(0, dataoffset(\"C_11_deployed\"), datasize(\"C_11_deployed\"))
let _1 := allocate_unbounded()
codecopy(_1, dataoffset(\"C_11_deployed\"), datasize(\"C_11_deployed\"))
return(0, datasize(\"C_11_deployed\"))
return(_1, datasize(\"C_11_deployed\"))
function allocate_unbounded() -> memPtr {
memPtr := mload(64)
}
function constructor_C_11() {

View File

@ -13,9 +13,14 @@ object \"C_11\" {
constructor_C_11()
codecopy(0, dataoffset(\"C_11_deployed\"), datasize(\"C_11_deployed\"))
let _1 := allocate_unbounded()
codecopy(_1, dataoffset(\"C_11_deployed\"), datasize(\"C_11_deployed\"))
return(0, datasize(\"C_11_deployed\"))
return(_1, datasize(\"C_11_deployed\"))
function allocate_unbounded() -> memPtr {
memPtr := mload(64)
}
function constructor_C_11() {

View File

@ -13,9 +13,14 @@ object \"C_11\" {
constructor_C_11()
codecopy(0, dataoffset(\"C_11_deployed\"), datasize(\"C_11_deployed\"))
let _1 := allocate_unbounded()
codecopy(_1, dataoffset(\"C_11_deployed\"), datasize(\"C_11_deployed\"))
return(0, datasize(\"C_11_deployed\"))
return(_1, datasize(\"C_11_deployed\"))
function allocate_unbounded() -> memPtr {
memPtr := mload(64)
}
function constructor_C_11() {

View File

@ -13,9 +13,14 @@ object \"C_11\" {
constructor_C_11()
codecopy(0, dataoffset(\"C_11_deployed\"), datasize(\"C_11_deployed\"))
let _1 := allocate_unbounded()
codecopy(_1, dataoffset(\"C_11_deployed\"), datasize(\"C_11_deployed\"))
return(0, datasize(\"C_11_deployed\"))
return(_1, datasize(\"C_11_deployed\"))
function allocate_unbounded() -> memPtr {
memPtr := mload(64)
}
function constructor_C_11() {

View File

@ -30,6 +30,6 @@ contract C is B {
// compileViaYul: also
// ----
// test() -> 77
// gas irOptimized: 133623
// gas irOptimized: 133635
// gas legacy: 156573
// gas legacyOptimized: 112940

View File

@ -38,5 +38,5 @@ contract C is B {
// compileViaYul: also
// ----
// test() -> 5, 10
// gas irOptimized: 92612
// gas irOptimized: 92624
// gas legacy: 100441

View File

@ -21,6 +21,6 @@ contract B {
// compileViaYul: also
// ----
// f() -> 2, 3, 4, 5, 6, 1000, 1001, 1002, 1003, 1004
// gas irOptimized: 135871
// gas irOptimized: 135883
// gas legacy: 264410
// gas legacyOptimized: 135699

View File

@ -45,6 +45,6 @@ contract C {
// compileViaYul: also
// ----
// test() -> 5, 6, 7
// gas irOptimized: 345942
// gas irOptimized: 345955
// gas legacy: 500424
// gas legacyOptimized: 309013

View File

@ -26,6 +26,6 @@ contract Main {
// compileViaYul: also
// ----
// f(uint256): 0x34 -> 0x46bddb1178e94d7f2892ff5f366840eb658911794f2c3a44c450aa2c505186c1
// gas irOptimized: 115528
// gas irOptimized: 115543
// gas legacy: 127152
// gas legacyOptimized: 113679

View File

@ -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: 474619
// gas irOptimized: 474718
// gas legacy: 570900
// gas legacyOptimized: 436724

View File

@ -26,6 +26,6 @@ contract Creator {
// compileViaYul: also
// ----
// f(uint256,bytes): 7, 0x40, 78, "abcdefghijklmnopqrstuvwxyzabcdef", "ghijklmnopqrstuvwxyzabcdefghijkl", "mnopqrstuvwxyz" -> 7, "h"
// gas irOptimized: 330923
// gas irOptimized: 330976
// gas legacy: 414850
// gas legacyOptimized: 292281

View File

@ -19,6 +19,6 @@ contract C {
// compileViaYul: also
// ----
// f(), 2000 ether -> true
// gas irOptimized: 123725
// gas irOptimized: 123743
// gas legacy: 123226
// gas legacyOptimized: 123092

View File

@ -28,6 +28,6 @@ contract C {
// compileViaYul: also
// ----
// t() -> 9
// gas irOptimized: 103941
// gas irOptimized: 103953
// gas legacy: 161097
// gas legacyOptimized: 112116

View File

@ -29,7 +29,7 @@ contract C {
// compileViaYul: also
// ----
// f() -> 3, 7, 5
// gas irOptimized: 131350
// gas irOptimized: 131380
// gas legacy: 153990
// gas legacyOptimized: 127822
// x() -> 7

View File

@ -23,8 +23,8 @@ contract D {
// compileViaYul: also
// ----
// f() -> 1
// gas irOptimized: 86492
// gas irOptimized: 86504
// gas legacy: 114412
// g() -> 5
// gas irOptimized: 86588
// gas irOptimized: 86600
// gas legacy: 114872

View File

@ -25,5 +25,5 @@ contract B {
// compileViaYul: also
// ----
// g() -> 42
// gas irOptimized: 90623
// gas irOptimized: 90635
// gas legacy: 117797

View File

@ -25,6 +25,6 @@ contract B {
// compileViaYul: also
// ----
// g() -> 42
// gas irOptimized: 119646
// gas irOptimized: 119658
// gas legacy: 180597
// gas legacyOptimized: 117351

View File

@ -37,10 +37,10 @@ contract C {
// compileViaYul: also
// ----
// convertParent() -> 1
// gas irOptimized: 103625
// gas irOptimized: 103637
// convertSubA() -> 1, 2
// gas irOptimized: 105708
// gas irOptimized: 105720
// gas legacy: 101703
// convertSubB() -> 1, 3
// gas irOptimized: 105642
// gas irOptimized: 105654
// gas legacy: 101637

View File

@ -22,6 +22,6 @@ contract A {
// compileViaYul: also
// ----
// f(), 10 ether -> 3007, 3008, 3009
// gas irOptimized: 294216
// gas irOptimized: 294279
// gas legacy: 422027
// gas legacyOptimized: 287256